Încerc să construiesc un driver Linux vechi în sistemul meu (Kubuntu 21.10) cu face -C...
.
Șoferul declară struct static timeval frame_timestamp;
Dacă încerc să-l construiesc cu ceva de genul
make -C /lib/modules/`uname -r`/build M=`pwd` V=1 module
Primesc ... are un tip incomplet âstruct timevalâ
eroare și alte erori asociate.
Deci cred că trebuie să includ sys/time.h cu #include <sys/time.h>
în cod.
Dar în acest caz primesc eroare fatală: sys/time.h: Nu există un astfel de fișier sau director
. Și nu găsesc o modalitate de a rezolva asta. (Codul avea deja unele include, dar niciuna de la sys/, toate sunt de la Linux/ și media/)
Am ajuns să am un următor Makefile
:
obj-m := mydriver.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
Mod implicit:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) M=$(PWD) V=1 module
The KDIR
se rezolvă în /lib/modules/5.13.0-21-generic/build
care se leagă de /usr/src/linux-headers-5.13.0-21-generic
. Nu este sys/time.h
.
localizați sys/time.h
se intoarce:
/usr/include/i386-linux-gnu/sys/time.h
/usr/include/sys/time.h
/usr/include/x86_64-linux-gnu/sys/time.h
care îi aparține libc6-dev
și libc6-dev-i386:
.
dpkg -l *5.13.0-21*
ofera:
ii linux-headers-5.13.0-21 5.13.0-21.21 toate fișierele Header legate de versiunea 5.13.0 a nucleului Linux
ii linux-headers-5.13.0-21-generic 5.13.0-21.21 amd64 Antete kernel Linux pentru versiunea 5.13.0 pe 64 de biți x86 SMP
ii linux-image-5.13.0-21-generic 5.13.0-21.21 amd64 Imagine kernel semnată generică
un linux-image-unsigned-5.13.0-21-generic <неÑ> <неÑ> (опиÑание недоѾÑÑоÑÑÐ
ii linux-modules-5.13.0-21-generic 5.13.0-21.21 amd64 Linux kernel module suplimentare pentru versiunea 5.13.0 pe 64 de biți x86 >
ii linux-modules-extra-5.13.0-21-generic 5.13.0-21.21 amd64 Linux kernel module suplimentare pentru versiunea 5.13.0 pe 64 de biți x86
Încercam să codific -I /usr/include/x86_64-linux-gnu/
în face -C
- nu are niciun efect.
De asemenea, am încercat să descarc un nucleu vanilla de pe kernel.org: https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.13.tar.xz
și codificați-l ca KDIR
- asta nu ajută și nu conține sys/time.h
fie.
Întrebarea este: cum îmi forțez procesul de construire a modulului să vadă sys/time.h
?
Modulul Linux permite conectarea la libc? Dacă nu face parte din nucleu, cum să-l faceți disponibil pentru procesul de construire a modulului?