Score:0

การสร้างโมดูล linux - sys/time.h: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว

ธง in

ฉันกำลังพยายามสร้างไดรเวอร์ linux เก่าในระบบของฉัน (Kubuntu 21.10) ด้วย ทำ -C ....
คนขับกำลังประกาศ โครงสร้างคงที่ timeval frame_timestamp;

ถ้าฉันพยายามสร้างมันด้วยสิ่งที่ชอบ

ทำ -C /lib/modules/`uname -r`/build M=`pwd` V=1 โมดูล

ฉันได้รับ ... มีประเภท âstruct timevalâ ที่ไม่สมบูรณ์ ข้อผิดพลาดและข้อผิดพลาดอื่น ๆ ที่เกี่ยวข้อง
ดังนั้นฉันเชื่อว่าฉันต้องรวม sys/time.h ด้วย #รวม <sys/time.h> ลงในรหัส
แต่ในกรณีนี้ฉันได้รับ ข้อผิดพลาดร้ายแรง: sys/time.h: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว. และฉันไม่สามารถหาวิธีแก้ไขปัญหานี้ได้ (โค้ดมีบางส่วนอยู่แล้ว แต่ไม่มีจาก sys/ ทั้งหมดมาจาก linux/ และ media/)

ฉันลงเอยด้วยการติดตาม สร้างไฟล์:

obj-m := mydriver.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(เชลล์ pwd)

ค่าเริ่มต้น:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) M=$(PWD) V=1 โมดูล

เดอะ เคดีอาร์ แก้ไขเป็น /lib/modules/5.13.0-21-generic/build ซึ่งเชื่อมโยงกับ /usr/src/linux-headers-5.13.0-21-generic. ไม่มี sys/time.h.

ค้นหา 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 ไฟล์ Header ทั้งหมดที่เกี่ยวข้องกับ Linux kernel เวอร์ชัน 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 kernel โมดูลเพิ่มเติมสำหรับเวอร์ชัน 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/ เข้าไปข้างใน ทำ -C - สิ่งนี้ไม่มีผล
ฉันพยายามดาวน์โหลดวานิลลาเคอร์เนลจาก kernel.org ด้วย: https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.13.tar.xz และฮาร์ดโค้ดเป็น เคดีอาร์ - ที่ไม่ได้ช่วยและไม่มี sys/time.h ทั้ง.

คำถามคือ จะบังคับให้กระบวนการสร้างโมดูลของฉันเห็นได้อย่างไร sys/time.h?
โมดูล linux อนุญาตให้เชื่อมโยงกับ libc หรือไม่ หากไม่ใช่ส่วนหนึ่งของเคอร์เนล จะทำให้พร้อมใช้งานสำหรับโมดูล buildprocess ได้อย่างไร

Score:-2
ธง in

ตกลงดูเหมือนว่าจะใช้ไม่ได้ sys/time.h ในโมดูลเคอร์เนล
ฉันได้ดูคำจำกัดความของ โครงสร้าง v4l2_buffer ใน ลินุกซ์/videodev2.h ที่ไหน โครงสร้างเวลา ควรใช้โดยไดรเวอร์เพื่อเริ่มต้น การประทับเวลา ฟิลด์และพบที่นั่น:

รถบรรทุก v4l2_buffer {
    ดัชนี __u32;
    __u32 ประเภท;
    __u32 ไบต์ที่ใช้;
    __u32 ธง;
    ฟิลด์ __u32;
#ifdef __เคอร์เนล__
    struct __kernel_v4l2_timeval เวลาประทับ;
#อื่น
    struct timeval เวลาประทับ;
#เอนดิฟ
    struct v4l2_timecode รหัสเวลา;
....

เดอะ __เคอร์เนล__ ถูกกำหนดโดยอัตโนมัติที่ไหนสักแห่งใน ทำ -C กระบวนการดังนั้นเคอร์เนลที่ทันสมัยคาดว่าจะได้รับ __kernel_v4l2_timeval. เปลี่ยน โครงสร้างเวลา กับ โครงสร้าง __kernel_v4l2_timeval ท่ามกลางเทคนิคอื่น ๆ ทำให้ฉันรวบรวมไดรเวอร์เก่านี้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา