ฉันมีโมดูลลินุกซ์ง่ายๆ ที่ฉันต้องการสร้างและแทรกลงในเคอร์เนล แต่มีปัญหากับส่วน 'sudo insmod <module_name>'
Ubuntu ทำงานบนโฮสต์ Win10 ผ่าน VirtualBox
เพื่อนอีกสองคนทำตามขั้นตอนเดียวกันและได้ผลสำหรับพวกเขา
หนึ่งมีเคอร์เนลเวอร์ชัน 5.11.0-40 ในขณะที่อีกอันมีเหมือนกับฉัน 5.11.0-41
โมดูล 'linux_module.c' มีลักษณะดังนี้:
#รวม <linux/kernel.h>
#รวม <linux/module.h>
MODULE_LICENSE("จีพีแอล");
__init int init_module (โมฆะ)
{
printk (KERN_INFO "สวัสดีชาวโลกจาก linux_module\n");
กลับ 0;
}
__exit เป็นโมฆะ cleanup_module (เป็นโมฆะ)
{
}
Makefile:
obj-m =
obj-m += linux_module.o
KVERSION = $(เชลล์ uname -r)
โมดูลทั้งหมด:
สร้างโมดูล -C /lib/modules/$(KVERSION)/build M=$(PWD)
ทำความสะอาด:
ทำให้ -C /lib/modules/$(KVERSION)/build M=$(PWD) สะอาด
การใช้ 'make all' ส่งคืนสิ่งนี้:
ทำโมดูล -C /lib/modules/5.11.0-41-generic/build M=/home/soberflow/Documents/BS/KernelModule/LinuxModule
ทำ [1]: เข้าสู่ไดเร็กทอรี '/usr/src/linux-headers-5.11.0-41-generic'
CC [M] /home/soberflow/Documents/BS/KernelModule/LinuxModule/linux_module.o
MODPOST /home/soberflow/Documents/BS/KernelModule/LinuxModule/Module.symvers
CC [M] /home/soberflow/Documents/BS/KernelModule/LinuxModule/linux_module.mod.o
LD [M] /home/soberflow/Documents/BS/KernelModule/LinuxModule/linux_module.ko
ทำ [1]: ออกจากไดเร็กทอรี '/usr/src/linux-headers-5.11.0-41-generic'
ฉันได้รับข้อผิดพลาดต่อไปนี้:
insmod: ข้อผิดพลาด: ไม่สามารถแทรกโมดูล linux_module.ko: รูปแบบโมดูลไม่ถูกต้อง
ด้วย 'modprobe <module_name>' มันบอกว่าต่อไปนี้:
modprobe: FATAL: ไม่พบโมดูล linux_module.ko ในไดเรกทอรี /lib/modules/5.11.0-41-generic
ไม่มีใครมีความคิดว่าปัญหาคืออะไร?