核心開發:第一個hello world 模組
阿新 • • 發佈:2019-02-03
linux核心版本:3.10.46
嵌入式linux學習:驅動開發之第一個linux模組
驅動可以編譯進核心,也可以獨立編譯為模組。當需要時載入模組,不需要時解除安裝模組。
製作第一個模組:
#include #include static int __init smart210_hello_module_init(void) { printk("Hello, Smart210 module is installed !\n"); return 0; } static void __exit smart210_hello_module_cleanup(void) { printk("Good-bye, smart210 module was removed!\n"); } module_init(smart210_hello_module_init); module_exit(smart210_hello_module_cleanup); MODULE_LICENSE("GPL");
配置核心,將此模組關聯進核心中後,進行編譯,如果無關聯,則linux無法編譯此模組
編譯核心時選擇make zmage /uImage後,make modules
便會生成*.ko模組。
然後把此模組放進busybox的nfs系統目錄中。
*.ko模組必須放在指定的資料夾下才能被呼叫:
在busybox根目錄下:
/lib/modules/$(uname -r)/
載入核心:
linux裝置驅動的動態載入可以使用insmod或modprobe兩種方式,insmod一次只能載入一個特定的驅動,且需要驅動的絕對路徑,而modprobe則可以一次性將有依賴關係的驅動全部載入到核心,不需要驅動的具體地址.
執行modprobe *.ko 發現找不到modules.dep檔案,這裡需要用到busybox的指令depmod。注意如果找不到此指令,需要重新配置busybox選中此指令後,再重新建立跟檔案系統後,在執行depmod指令。指令執行後,會在/lib/modules/$(uname -r)/的目錄下生成3個檔案
當然,helloworld模組也應放在此目錄下。
然後再執行modprobe
此時模組已經被載入。
lsmod
rmmod