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