2.2 Modul registriert sich mit einer Major Device NumberIn dem Buch "Kernel-Programierung 6. Auflage" wird als Beispiel ein Device programmiert, um den PC-Lautsprecher anzusprechen. Auf Seite 231 wird erklärt, daß das Device registriert werden muß und hierbei vom Kernel eine Major-Number zugewiesen bekommt. Es gibt auch die Möglichkeit, selbst eine Major-Number zu bestimmen, läuft aber hierbei in die Gefahr, daß diese schon besetzt sein könnte. Als Beispiel-Implementierung des Aufrufs der Routine register_chrdev fand ich den Code von /usr/src/linux/driver/pcmcia/ds.c. Ich kopierte das Muster. Beim Make und nachträglichem Laden des neuen Moduls mit "insmod" erhielt ich folgenden Output: andreas@gericom:~/Development/driver> make make -C /lib/modules/2.6.5-7.111-default/build SUBDIRS=/home/andreas/Development/driver modules make[1]: Entering directory `/usr/src/linux-2.6.5-7.111-obj/i386/default' make -C ../../../linux-2.6.5-7.111 O=../linux-2.6.5-7.111-obj/i386/default modules WARNING: Symbol version dump /usr/src/linux-2.6.5-7.111-obj/i386/default/Module.symvers is missing, modules will have CONFIG_MODVERSIONS disabled. CC [M] /home/andreas/Development/driver/hello-4.o Building modules, stage 2. MODPOST CC /home/andreas/Development/driver/hello-4.mod.o LD [M] /home/andreas/Development/driver/hello-4.ko make[1]: Leaving directory `/usr/src/linux-2.6.5-7.111-obj/i386/default' andreas@gericom:~/Development/driver> su Password: su: ungültiges Kennwort andreas@gericom:~/Development/driver> su Password: gericom:/home/andreas/Development/driver # insmod hello-3.ko gericom:/home/andreas/Development/driver # insmod hello-4.ko gericom:/home/andreas/Development/driver # Da ich alles unter der graphischen Oberfläche in einem "xterminal" angestoßen habe, war nichts von meinem Modul zu sehen. Im Logfile sah man aber dann doch: gericom:/var/log # tail -f messages May 22 13:39:11 gericom kernel: spurious 8259A interrupt: IRQ7. May 22 13:53:24 gericom -- MARK -- May 22 13:59:00 gericom /USR/SBIN/CRON[8586]: (root) CMD ( rm -f /var/spool/cron/lastrun/cron.hourly) May 22 14:13:25 gericom -- MARK -- May 22 14:33:25 gericom -- MARK -- May 22 14:53:25 gericom -- MARK -- May 22 14:59:00 gericom /USR/SBIN/CRON[9422]: (root) CMD ( rm -f /var/spool/cron/lastrun/cron.hourly) May 22 15:13:25 gericom -- MARK -- May 22 15:24:01 gericom su: (to root) andreas on /dev/pts/6 May 22 15:24:01 gericom su: pam_unix2: session started for user root, service su May 22 15:24:57 gericom su: FAILED SU (to root) andreas on /dev/pts/4 May 22 15:25:09 gericom su: (to root) andreas on /dev/pts/4 May 22 15:25:09 gericom su: pam_unix2: session started for user root, service su May 22 15:25:48 gericom kernel: hello_3: no version for "struct_module" found: kernel tainted. May 22 15:25:48 gericom kernel: hello_3: unsupported module, tainting kernel. May 22 15:25:48 gericom kernel: hello_3: module license 'unspecified' taints kernel. May 22 15:25:48 gericom kernel: Hello, world 2 May 22 15:26:02 gericom kernel: hello_4: unsupported module, tainting kernel. May 22 15:26:02 gericom kernel: Hello, world 4 May 22 15:26:02 gericom kernel: Device registered using major 253. Der Text "Hello, world 4" stammt von dem geladenen Modul. Direkt zuvor habe ich nochmals hello_3 geladen. Man sieht sehr schön, daß die Anzahl der Warnungen auch zurückgegangen ist. Copyright © Andreas Birkert Letzte Aktualisierung am 20. Dezember 2013 |