Tôi đang cố gắng tạo trình điều khiển linux cũ trong hệ thống của mình (Kubuntu 21.10) với Làm cho c ...
.
Tài xế khai báo khung thời gian cấu trúc tĩnh frame_timestamp;
Nếu tôi cố gắng xây dựng nó với một cái gì đó như
make -C /lib/modules/`uname -r`/build M=`pwd` V=1 modules
tôi nhận được ... có loại âstruct timevalâ chưa hoàn chỉnh
error và một số lỗi liên quan khác.
Vì vậy, tôi tin rằng tôi phải bao gồm sys/time.h với #include <sys/time.h>
vào mã.
Nhưng trong trường hợp này tôi đang nhận được lỗi nghiêm trọng: sys/time.h: Không có tệp hoặc thư mục như vậy
. Và tôi không thể tìm ra cách để giải quyết điều này. (Mã đã có một số bao gồm nhưng không có từ sys/, tất cả chúng đều từ linux/ và media/)
Tôi đã kết thúc với một sau đây Makefile
:
obj-m := mydriver.o
KDIR := /lib/modules/$(shell uname -r)/build
NKT := $(shell pwd)
mặc định:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) M=$(PWD) V=1 mô-đun
Các KDIR
giải quyết thành /lib/modules/5.13.0-21-generic/build
liên kết đến /usr/src/linux-headers-5.13.0-21-generic
. Không có sys/time.h
.
định vị sys/time.h
trả về:
/usr/include/i386-linux-gnu/sys/time.h
/usr/include/sys/time.h
/usr/include/x86_64-linux-gnu/sys/time.h
thuộc về libc6-dev
và libc6-dev-i386:
.
dpkg -l *5.13.0-21*
đưa ra:
ii linux-headers-5.13.0-21 5.13.0-21.21 tất cả các tệp Tiêu đề liên quan đến nhân Linux phiên bản 5.13.0
ii linux-headers-5.13.0-21-generic 5.13.0-21.21 AMD64 Các tiêu đề nhân Linux cho phiên bản 5.13.0 trên 64 bit x86 SMP
ii linux-image-5.13.0-21-generic 5.13.0-21.21 AMD64 Hình ảnh hạt nhân đã ký chung
un linux-image-unsigned-5.13.0-21-generic <неÑ> <неÑ> (опиÑание недоÑÑÑпно)
ii linux-modules-5.13.0-21-generic 5.13.0-21.21 AMD64 Các mô-đun bổ sung của nhân Linux cho phiên bản 5.13.0 trên x86 64 bit >
ii linux-modules-extra-5.13.0-21-generic 5.13.0-21.21 AMD64 Các mô-đun bổ sung của nhân Linux cho phiên bản 5.13.0 trên x86 64 bit
Tôi đã cố gắng mã hóa cứng -Tôi /usr/gồm/x86_64-linux-gnu/
vào trong Làm cho c
- điều này không có tác dụng.
Tôi cũng đã cố tải xuống một nhân vani từ kernel.org: https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.13.tar.xz
và mã hóa nó như KDIR
- điều đó không giúp được gì và nó không chứa sys/time.h
một trong hai.
Câu hỏi là: làm thế nào để buộc quá trình xây dựng mô-đun của tôi xem sys/time.h
?
Mô-đun linux có được phép liên kết với libc không? Nếu nó không phải là một phần của kernel, làm cách nào để nó có sẵn cho quá trình xây dựng mô-đun?