Home Modulprogrammierung Erstes Modul auf Gericom-Laptop unter Kernel 2.6 hello-4 auf COBRA unter Kernel 2.4
 

2.2 Modul registriert sich mit einer Major Device Number

In 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
Home Modulprogrammierung Erstes Modul auf Gericom-Laptop unter Kernel 2.6 hello-4 auf COBRA unter Kernel 2.4