Vraag & Antwoord

OS Linux

Een enkele input driver compileren

5 antwoorden
  • Ik heb mezelf wijs gemaakt dat een onbenullig (!) probleem met mijn USB toestenbord kan worden opgelost door de desbetreffende driver - keybdev - een heel klein beetje aan te passen. (Als dat echt zo is, lijkt mij dat een fraai voorbeeld van beginnersgeluk!) Ik heb geprobeerd alleen die aangepaste driver te compileren met behulp van de Makefile en een Config.in die bij de sourcedirectory horen waarin de originele driver zat. Bij het compileren liep ik uiteindelijk echter tegen het volgende aan:[quote:0fa38aad9b][root@localhost input]# make keybdev.o cc -DKBUILD_BASENAME=keybdev -c -o keybdev.o keybdev.c In file included from /usr/include/linux/kbd_kern.h:4, from keybdev.c:40: /usr/include/linux/interrupt.h:44:25: asm/hardirq.h: No such file or directory /usr/include/linux/interrupt.h:45:25: asm/softirq.h: No such file or directory make: *** [keybdev.o] Error 1 [/quote:0fa38aad9b]Ik denk eigenlijk dat die twee files wel op mijn systeem staan:[quote:0fa38aad9b][root@localhost input]# locate hardirq.h /usr/src/linux-2.4.18-3/include/asm-i386/hardirq.h [root@localhost input]# locate softirq.h /usr/src/linux-2.4.18-3/include/asm-i386/softirq.h [root@localhost input]#[/quote:0fa38aad9b] Zou ik deze melding moeten negeren en, zo ja, hoe doe je dat?
  • Laat ik de vraag herformuleren: wat ligt in de rede als je een .c bestand wilt compileren en een config,in, een makefile en een Rules.make bij de hand hebt?
  • Ik ben weer wat verder en onderneem een derde (en laatste?) poging op deze vraag een antwoord te krijgen. Keybdev.o is volgens mij een Loadable (Kernel) Module. Daarover las ik in [url=http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Kernel-HOWTO.html#ss3.5]The Linux Kernel HOWTO[/url]:[quote:4fbd98c1eb][b:4fbd98c1eb]3.5 What's a loadable module?[/b:4fbd98c1eb] These are pieces of kernel code which are not linked (included) directly in the kernel. One compiles them separately, and can insert and remove them into the running kernel at almost any time. Due to its flexibility, this is now the preferred way to code certain kernel features. Many popular device drivers, such as the PCMCIA drivers and the QIC-80/40 tape driver, are loadable modules.[/quote:4fbd98c1eb]Keybdev kan je inderdaad probleemloos in- en uitschakelen (met insmod en rmmod). Overigens is het daarbij wel handig als je tenminste tegelijk een normaal toetsenbord hebt ingeplugd! De vraag wordt dus: hoe compileer je alleen een losse module? (Volledigheidshalve: Rules.make en de bij deze driver horende config.in en Makefile gebruik je kennelijk als je de hele kernel compileert: maar dat is niet wat ik wil.)
  • Om deze (merkwaardige?) thread met mezelf ook maar af te ronden, het commando waarmee het compileren (vooralsnog) foutloos lijkt te gaan, was gcc -c -Wall -O3 -D__KERNEL__ -DMODULE -I./ -I/usr/src/linux-2.4.18-3/include -I/usr/src/linux-2.4.18-3/include/linux keybdev.c Conclusie: je kan inderdaad een losse module compileren en vervolgens met "modprobe" in de kernel stoppen!
  • Je zegt het zelf al, door de optie -D KERNEL_MODULE mee te geven aan gcc herkent hij zelf al dat et een kernel module is en zal niet het bijbehorende (verkeerde) makefile pakken.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.