ฉันได้เขียนโมดูลเคอร์เนลอย่างง่ายเพื่อพิมพ์ Hello kernel msg
my_module.c
#รวม <linux/module.h>
#รวม <linux/init.h>
/* ข้อมูลเมตา */
MODULE_LICENSE("จีพีแอล");
MODULE_AUTHOR("ภควัต");
MODULE_DESCRIPTION("โมดูล HELLO WORLD");
/*ฟังก์ชันนี้ถูกเรียกใช้เมื่อโหลดโมดูลลงในเคอร์เนล*/
int คงที่ __init ModuleInit (โมฆะ)
{
printk("สวัสดี เคอร์เนล!\n");
กลับ 0;
}
/*ฟังก์ชันนี้ถูกเรียกใช้เมื่อโมดูลถูกลบออกจากเคอร์เนล*/
โมฆะคงที่ __exit ModuleExit (โมฆะ)
{
printk("ลาก่อนเคอร์เนล");
}
module_init (โมดูลอินิต);
module_exit (โมดูลทางออก);
สร้างไฟล์
obj-m += my_module.o
ทั้งหมด:
สร้างโมดูล -C /lib/modules/$(shell uname -r)/build M=$(PWD)
ทำความสะอาด:
ทำให้ -C /lib/modules/$(shell uname -r)/build M=$(PWD) สะอาด
เมื่อฉันใส่โมดูล ฉันจะได้รับ msg ที่พิมพ์ในบันทึกของเคอร์เนล แต่เมื่อฉันลบโมดูล msg จะไม่ได้รับการพิมพ์ เมื่อฉันใส่โมดูลอีกครั้ง ข้อความสองข้อความจะถูกพิมพ์หนึ่งรายการสำหรับการออกจากโมดูลล่าสุด และอีกข้อความหนึ่งสำหรับการโหลดโมดูล เหตุใดโมดูลออกจาก msg จึงพิมพ์ในภายหลังเมื่อฉันใส่โมดูล แต่ไม่ใช่เมื่อถอดโมดูลออก
bhagwat@bhagwat:~/bhagwatws/Personal/device_driver$ sudo insmod my_module.ko
bhagwat@bhagwat:~/bhagwatws/ส่วนตัว/device_driver$ dmesg | หาง
[24.595403] rfkill: เปิดใช้งานตัวจัดการอินพุต
[30.244336] rfkill: ตัวจัดการอินพุตปิดใช้งาน
[145.426767] my_module: การตรวจสอบโมดูลล้มเหลว: ลายเซ็นและ/หรือคีย์ที่จำเป็นหายไป - เคอร์เนลเสีย
[ 145.427022] สวัสดีเคอร์เนล!
[217.026559] ลาก่อน เคอร์เนล
[498.489388] สวัสดีเคอร์เนล!
[524.139613] ลาก่อนเคอร์เนล
[ 528.270128] สวัสดีเคอร์เนล!
[577.360611] ลาก่อนเคอร์เนล
[ 587.700237] สวัสดีเคอร์เนล!
bhagwat@bhagwat:~/bhagwatws/Personal/device_driver$ sudo rmmod my_module
bhagwat@bhagwat:~/bhagwatws/ส่วนตัว/device_driver$ dmesg | หาง
[24.595403] rfkill: เปิดใช้งานตัวจัดการอินพุต
[30.244336] rfkill: ตัวจัดการอินพุตปิดใช้งาน
[145.426767] my_module: การตรวจสอบโมดูลล้มเหลว: ลายเซ็นและ/หรือคีย์ที่จำเป็นหายไป - เคอร์เนลเสีย
[ 145.427022] สวัสดีเคอร์เนล!
[217.026559] ลาก่อน เคอร์เนล
[498.489388] สวัสดีเคอร์เนล!
[524.139613] ลาก่อนเคอร์เนล
[ 528.270128] สวัสดีเคอร์เนล!
[577.360611] ลาก่อนเคอร์เนล
[ 587.700237] สวัสดีเคอร์เนล!
bhagwat@bhagwat:~/bhagwatws/Personal/device_driver$ sudo insmod my_module.ko
bhagwat@bhagwat:~/bhagwatws/ส่วนตัว/device_driver$ dmesg | หาง
[145.426767] my_module: การตรวจสอบโมดูลล้มเหลว: ลายเซ็นและ/หรือคีย์ที่จำเป็นหายไป - เคอร์เนลเสีย
[ 145.427022] สวัสดีเคอร์เนล!
[217.026559] ลาก่อน เคอร์เนล
[498.489388] สวัสดีเคอร์เนล!
[524.139613] ลาก่อนเคอร์เนล
[ 528.270128] สวัสดีเคอร์เนล!
[577.360611] ลาก่อนเคอร์เนล
[ 587.700237] สวัสดีเคอร์เนล!
[667.900373] ลาก่อน เคอร์เนล
[ 676.245356] สวัสดีเคอร์เนล!
bhagwat@bhagwat:~/bhagwatws/Personal/device_driver$ sudo rmmod my_module
bhagwat@bhagwat:~/bhagwatws/ส่วนตัว/device_driver$ dmesg | หาง
[145.426767] my_module: การตรวจสอบโมดูลล้มเหลว: ลายเซ็นและ/หรือคีย์ที่จำเป็นหายไป - เคอร์เนลเสีย
[ 145.427022] สวัสดีเคอร์เนล!
[217.026559] ลาก่อน เคอร์เนล
[498.489388] สวัสดีเคอร์เนล!
[524.139613] ลาก่อนเคอร์เนล
[ 528.270128] สวัสดีเคอร์เนล!
[577.360611] ลาก่อนเคอร์เนล
[ 587.700237] สวัสดีเคอร์เนล!
[667.900373] ลาก่อน เคอร์เนล
[ 676.245356] สวัสดีเคอร์เนล!