內核開發:第一個hello world 模塊

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


發佈了37 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章