On Wed, Dec 31, 2003 at 12:18:14PM +0100, Thomas Guettler wrote:
Hallo!
Hi Thomas,
==root@sonne:/usr/src/kernel-source-2.4.18/drivers/usb/serial# gcc -D__KERNEL__ -I/usr/src/kernel-source-2.4.18/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=i686 -malign-functions=4 -DMODULE -DMODVERSIONS -include /usr/src/kernel-source-2.4.18/include/linux/modversions.h -DKBUILD_BASENAME=visor -c -o visor.o visor.c visor.c:257: unknown field `owner' specified in initializer visor.c:257: warning: initialization from incompatible pointer type visor.c:258: field `name' already initialized visor.c:258: warning: initialization from incompatible pointer type ...
Die entsprechenden Zeilen Quelltext aus visor.c:
/* All of the device info needed for the Handspring Visor, and Palm 4.0 devices\ */ static struct usb_serial_device_type handspring_device = { .owner = THIS_MODULE, .name = "Handspring Visor / Treo / Palm 4.0 / Clié 4.x"\ ...
Die Syntax mit dem Punkt vor "owner" ist mir neu.
Dieser Syntax wird im Kernel recht häufig angewendet und ist IIRC gemäß dem C Standard. Es erleichtert die Initialisierung von Strukturen, die nicht genannten Felder werden einfach ignoriert.
Hast du mal nachgeschaut welche Felder die Struktur usb_serial_device_type im 2.4.18 anbietet? Evtl. müssen sie ja nur umbenannt werden.
Gut, dann übernehme ich eben nur die USB Device ID vom neuen Treiber in füge die entsprechenden Zeilen in visor.c von 2.4.18. Das Kompilieren klappt, doch beim Einfügen des Moduls erhalte ich folgende Fehlermeldung:
==root@sonne:/usr/src/kernel-source-2.4.18/drivers/usb/serial# modprobe visor /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: unresolved symbol usb_unlink_urb_R46d4c2f5 /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: unresolved symbol usb_free_urb_R73aa24c5 /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: unresolved symbol usb_alloc_urb_Rc7805622 /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: unresolved symbol tty_flip_buffer_push_R0e688183 /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: unresolved symbol usb_serial_deregister_Rbd83b5a3 /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: unresolved symbol usb_submit_urb_Re521bb66 /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: unresolved symbol usb_serial_register_Reccb6b5b /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: unresolved symbol usb_control_msg_Rce4bf6b5 /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: unresolved symbol usb_set_configuration_R1940f013 /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: unresolved symbol tty_get_baud_rate_R6c8a12cb /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: insmod /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o failed /lib/modules/2.4.18-k7/kernel/drivers/usb/serial/visor.o: insmod visor failed
in /proc/ksysms finde ich jedoch folgenden Eintrag: d888f160 usb_unlink_urb_R97fe1c61 [usbcore]
Die fehlende Funktion scheint da zu sein, bloß die "Zufallszahl" ist unterschiedlich.
Die 'Zufallszahl' dürfte der Fingerprint dieser Funktion für den speziellen Kernel sein, deswegen kannst du nicht ein Modul vom 2.4.22 in einen 2.4.18 Kernel laden. Bist du sicher das du das richtige Modul (vom 2.4.18) zu laden versuchst?
Ciao, Tobias