Я пытаюсь создать старый драйвер Linux в своей системе (Kubuntu 21.10) с помощью сделать -С...
.
Водитель заявляет статическая структура timeval frame_timestamp;
Если я попытаюсь построить его с чем-то вроде
make -C /lib/modules/`uname -r`/build M=`pwd` V=1 модули
я собираюсь ... имеет неполный тип "struct timeval"
ошибка и некоторые другие связанные ошибки.
Поэтому я считаю, что должен включить sys/time.h с #include <sys/time.h>
в код.
Но в этом случае я получаю фатальная ошибка: sys/time.h: нет такого файла или каталога
. И я не могу найти способ решить эту проблему. (В коде уже есть некоторые включения, но ни одного из sys/, все они из linux/ и media/)
Я закончил со следующим Makefile
:
obj-m := mydriver.o
KDIR := /lib/modules/$(оболочка uname -r)/сборка
PWD := $(оболочка pwd)
По умолчанию:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) M=$(PWD) V=1 модулей
КДИР
превращается в /lib/modules/5.13.0-21-общий/сборка
который ссылается на /usr/src/linux-заголовки-5.13.0-21-общий
. Здесь нет систем/время.ч
.
найти sys/time.h
возвращает:
/usr/include/i386-linux-gnu/sys/time.h
/usr/include/sys/time.h
/usr/include/x86_64-linux-gnu/sys/time.h
который принадлежит libc6-dev
и libc6-dev-i386:
.
dpkg -l *5.13.0-21*
дает:
ii linux-headers-5.13.0-21 5.13.0-21.21 все файлы заголовков, относящиеся к версии ядра Linux 5.13.0
ii linux-headers-5.13.0-21-generic 5.13.0-21.21 amd64 Заголовки ядра Linux для версии 5.13.0 на 64-разрядной платформе x86 SMP
ii linux-image-5.13.0-21-generic 5.13.0-21.21 amd64 Общий образ ядра с подписью
un linux-image-unsigned-5.13.0-21-generic <неÑ> <неÑ> (опиÑание недоÑÑÑпно)
ii linux-modules-5.13.0-21-generic 5.13.0-21.21 amd64 Дополнительные модули ядра Linux для версии 5.13.0 на 64-разрядной версии x86 >
ii linux-modules-extra-5.13.0-21-generic 5.13.0-21.21 amd64 Дополнительные модули ядра Linux для версии 5.13.0 на 64-разрядной платформе x86
Я пытался жестко закодировать -I /usr/include/x86_64-linux-gnu/
в сделать -С
- это не влияет.
Я также попытался загрузить ванильное ядро с kernel.org: https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.13.tar.xz
и жестко запрограммировать его как КДИР
- это не помогает и не содержит систем/время.ч
либо.
Вопрос в том, как заставить мой процесс сборки модуля видеть систем/время.ч
?
Разрешается ли модулю linux связываться с libc? Если это не часть ядра, как сделать его доступным для процесса сборки модуля?