Kernel-Module: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 33: | Zeile 33: | ||
fops_put(file->f_op); | fops_put(file->f_op); | ||
file->f_op = fops_get(old_fops); | file->f_op = fops_get(old_fops); | ||
</nowiki></pre> | |||
=== Patchdatei (~/linux-3.13-dvb-mutex.patch) === | |||
<pre><nowiki> | |||
--- linux-3.13/drivers/media/dvb-core/dvbdev.c 2014-03-07 00:07:50.866909615 +0100 | |||
+++ linux-3.13/drivers/media/dvb-core/dvbdev.c.orig 2014-01-20 03:40:07.000000000 +0100 | |||
@@ -81,11 +81,8 @@ | |||
goto fail; | |||
file->private_data = dvbdev; | |||
replace_fops(file, new_fops); | |||
- if (file->f_op->open) { | |||
- mutex_unlock(&dvbdev_mutex); | |||
+ if (file->f_op->open) | |||
err = file->f_op->open(inode,file); | |||
- mutex_lock(&dvbdev_mutex); | |||
- } | |||
up_read(&minor_rwsem); | |||
mutex_unlock(&dvbdev_mutex); | |||
return err; | |||
</nowiki></pre> | </nowiki></pre> | ||
Zeile 41: | Zeile 61: | ||
KERNELDIR=$(uname -r | perl -e '<> =~ /(\d+)\.(\d+)\..*(fc\d+)/; print "kernel-$1.$2.$3\n"') | KERNELDIR=$(uname -r | perl -e '<> =~ /(\d+)\.(\d+)\..*(fc\d+)/; print "kernel-$1.$2.$3\n"') | ||
cd ~/rpmbuild/BUILD/$KERNELDIR/linux* | cd ~/rpmbuild/BUILD/$KERNELDIR/linux* | ||
patch -p1 < ~/linux-3. | patch -p1 < ~/linux-3.13-dvb-mutex.patch | ||
cd drivers/media/dvb-core | cd drivers/media/dvb-core | ||
make -C /lib/modules/`uname -r`/build M=`pwd` modules | make -C /lib/modules/`uname -r`/build M=`pwd` modules |
Version vom 1. Januar 1970, 01:00 Uhr
Kernel-Module für Fedora erzeugen
Erzeugen einer Buildumgebung mit aktuellem Kernel
rpmdev-setuptree yumdownloader --source kernel KERNEL=$(ls kernel-*.src.rpm|tail -1) su -c "yum-builddep $KERNEL" rpm -Uvh $KERNEL cd ~/rpmbuild/SPECS rpmbuild -bp --target=$(uname -m) kernel.spec
Patch für dvbdev
Patchdatei (~/linux-3.7.1-dvb-mutex.patch)
diff -Nur linux-3.7.1/drivers/media/dvb-core/dvbdev.c linux-3.7.1/drivers/media/dvb-core/dvbdev.c --- linux-3.7.1/drivers/media/dvb-core/dvbdev.c +++ linux-3.7.1/drivers/media/dvb-core/dvbdev.c @@ -83,8 +83,11 @@ static int dvb_device_open(struct inode *inode, struct file *file) file->f_op = old_fops; goto fail; } - if(file->f_op->open) + if(file->f_op->open) { + mutex_unlock(&dvbdev_mutex); err = file->f_op->open(inode,file); + mutex_lock(&dvbdev_mutex); + } if (err) { fops_put(file->f_op); file->f_op = fops_get(old_fops);
Patchdatei (~/linux-3.13-dvb-mutex.patch)
--- linux-3.13/drivers/media/dvb-core/dvbdev.c 2014-03-07 00:07:50.866909615 +0100 +++ linux-3.13/drivers/media/dvb-core/dvbdev.c.orig 2014-01-20 03:40:07.000000000 +0100 @@ -81,11 +81,8 @@ goto fail; file->private_data = dvbdev; replace_fops(file, new_fops); - if (file->f_op->open) { - mutex_unlock(&dvbdev_mutex); + if (file->f_op->open) err = file->f_op->open(inode,file); - mutex_lock(&dvbdev_mutex); - } up_read(&minor_rwsem); mutex_unlock(&dvbdev_mutex); return err;
Patch Einspielen
Wenn das Modul für einen neuen Kernel benötigt wird und der Kernel keine Änderungen in dvb-core hatte, kann man ab hier starten und die patch
-Zeile weglassen.
KERNELDIR=$(uname -r | perl -e '<> =~ /(\d+)\.(\d+)\..*(fc\d+)/; print "kernel-$1.$2.$3\n"') cd ~/rpmbuild/BUILD/$KERNELDIR/linux* patch -p1 < ~/linux-3.13-dvb-mutex.patch cd drivers/media/dvb-core make -C /lib/modules/`uname -r`/build M=`pwd` modules su -c "mv /usr/lib/modules/`uname -r`/kernel/drivers/media/dvb-core/dvb-core.ko /usr/lib/modules/`uname -r`/kernel/drivers/media/dvb-core/dvb-core.ko.orig" su -c "make -C /lib/modules/`uname -r`/build M=`pwd` modules_install"
Patch aktivieren
rmmod dvb_usb_dib0700 dib8000 dib7000m dib0070 dib7000p dvb_usb budget_ci budget_core dvb_core modprobe budget_ci modprobe dvb_usb_dib0700
Kernelmodul für SASC
siehe SASC