Điểm:0

Xây dựng mô-đun linux - sys/time.h: Không có tệp hoặc thư mục như vậy

lá cờ in

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-devlibc6-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?

Điểm:-2
lá cờ in

Ok, có vẻ như một người không thể sử dụng sys/time.h trong mô-đun hạt nhân.
Tôi đã xem xét định nghĩa của cấu trúc v4l2_buffer Trong linux/videodev2.h ở đâu cấu trúc thời gian được cho là được sử dụng bởi trình điều khiển để khởi tạo nó dấu thời gian trường và tìm thấy ở đó:

cấu trúc v4l2_buffer {
    chỉ mục __u32;
    __u32 loại;
    __u32 bytesused;
    __u32 cờ;
    trường __u32;
#ifdef __KERNEL__
    dấu thời gian cấu trúc __kernel_v4l2_timeval;
#khác
    dấu thời gian cấu trúc;
#endif
    cấu trúc mã thời gian v4l2_timecode;
....

Các __KERNEL__ được xác định tự động ở đâu đó trong Làm cho c xử lý, vì vậy hạt nhân cập nhật sẽ nhận được __kernel_v4l2_timeval. thay thế cấu trúc thời gian với cấu trúc __kernel_v4l2_timeval cùng với một số thủ thuật khác cho phép tôi biên dịch trình điều khiển cũ này.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.