1. 程式人生 > >核心開發:第一個hello world 模組

核心開發:第一個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