Score:0

การสร้างเคอร์เนลสร้าง "ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): ​​การอ้างอิงที่ไม่ได้กำหนดถึง `__x64_sys_s_enable'"

ธง hu

ระบบปฏิบัติการคือ Ubuntu 20.10 แหล่งที่มาของเคอร์เนลคือ linux_5.8.0-59.66

ฉันกำลังย้ายการปรับเปลี่ยนเคอร์เนลจาก Centos 7 Rhel 7.9 ไปยัง Ubuntu

แหล่งที่มาของเคอร์เนล Ubuntu ดั้งเดิมที่ไม่ได้แก้ไขจะคอมไพล์และทำงานอย่างสมบูรณ์บนเครื่องนี้ ดูเหมือนว่าการตั้งค่าคอมไพเลอร์จะทำงานอย่างถูกต้อง

ปัญหาปัจจุบันของฉันเกี่ยวข้องกับการเรียกระบบที่ฉันเพิ่มเข้าไป ข้อผิดพลาดที่เกิดขึ้นคือ -

LD .tmp_vmlinux.btf
ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): ​​การอ้างอิงที่ไม่ได้กำหนดถึง `__x64_sys_s_enable'
BTF .btf.vmlinux.bin.o    
ข้อผิดพลาดการแบ่งส่วน (คอร์ดัมพ์)
LD .tmp_vmlinux.kallsyms1
.btf.vmlinux.bin.o: ไม่รู้จักไฟล์: ไม่รู้จักรูปแบบไฟล์
ทำ: *** [Makefile:1163: vmlinux] ข้อผิดพลาด 1

ฉันได้ค้นหาและ googled ข้อผิดพลาดดั้งเดิมนี้ "การอ้างอิงที่ไม่ได้กำหนด" พบการแก้ไขที่เป็นไปได้ซึ่งไม่ได้ผล

ต่อไปนี้เป็นขั้นตอนที่ฉันใช้เพื่อเพิ่มการเรียกระบบ ซึ่งแต่เดิมใช้งานได้กับ Centos 7 และ RHEL 7.9

แก้ไข /SOURCE-DIRECTORY/include/linux/syscalls.h แสดงความคิดเห็นในบรรทัดเดิมและเพิ่มการอ้างอิงถึง __64 (รวมถึงบรรทัดว่างด้านบน)-

asmlinkage ยาว __64_sys_s_enable(int s_enable_flag);
// asmlinkage ยาว sys_s_enable (int s_enable_flag);

แก้ไข /SOURCE-DIRECTORY/arch/x86/include/asm/syscalls.h เพิ่ม -

# การเพิ่ม SYSCALL
440 64 s_enable sys_s_enable

ฟิลด์นี้ถูกคั่นด้วย TAB และฉันไม่ได้เพิ่มบรรทัดว่างใดๆ

สร้างไดเร็กทอรีต้นทางและไฟล์ - /SOURCE-DIRECTORY/s_enable ที่มี s_enable.c s_enable.c อย่างครบถ้วนคือ

#รวม <linux/kernel.h>
ภายนอก int s_enable_flag;

asmlinkage ยาว sys_s_enable (int i)
{
// printk(KERN_INFO "ใน SYSCALL ดั้งเดิม s_enable\n");
         s_enable_flag = ฉัน;
         กลับ 0;
}

และเพิ่มไดเร็กทอรี syscall ที่เหมาะสมให้กับ Makefile

core-y += เคอร์เนล/ certs/ mm/ fs/ ipc/ security/ crypto/ block/ s_enable/

และเรียกใช้ "sudo make"

ฉันไม่แน่ใจว่าฉันทำอะไรผิดที่ "make" ใช้งานได้กับแหล่งเคอร์เนลดั้งเดิมและการเรียกระบบที่ฉันพยายามเพิ่มนั้นใช้งานได้กับ distros อื่น ๆ ที่กล่าวถึง

ขอขอบคุณสำหรับการป้อนข้อมูลใด ๆ ที่คุณสามารถให้ได้

โพสต์คำตอบ

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