小白自制Linux開發板 番外篇 一 modprobe加載驅動問題(轉載整理)

使用modprobe加載驅動

轉載地址:https://blog.csdn.net/qq_39101111/article/details/78773362

前面我們提到,modprobe並不需要指定到具體的KO文件目錄,我們不仿測試下:

[root@x4412 /]# modprobe x4412-beep.ko
modprobe: can't change directory to '/lib/modules': No such file or directory
[root@x4412 /]#

這裏提示找不到/lib/modules目錄,和前面介紹的一樣,它需要在指定目錄下加載KO,那我們不仿新建該目錄,再執行上面的指令測試:

1 [root@x4412 /]# mkdir /lib/modules
2 [root@x4412 /]# modprobe x4412-beep.ko
3 modprobe: can't change directory to '3.0.15-9tripod': No such file or directory
4 [root@x4412 /]#

這裏提示找不到3.0.15-9tripod目錄,它對應linux內核的名稱,可以使用uname–r指令查詢。我們繼續新建目錄,繼續測試:

1 [root@x4412 /]# uname -r
2 3.0.15-9tripod
3 [root@x4412 /]# mkdir /lib/modules/3.0.15-9tripod
4 [root@x4412 /]# modprobe x4412-beep.ko
5 modprobe: can't open 'modules.dep': No such file or directory
6 [root@x4412 /]#

 

這時,提示找不到modules.dep文件。我們不需要手動創建該文件,使用depmod指令即可自動生成。很有可能默認情況下根文件系統不支持該指令,執行時會提示如下信息:

[root@x4412 modules]# depmod
-sh: depmod: command not found
[root@x4412 modules]#


可見,我們只需要配置完busybox 後,保存到這裏就可以了。

有兩種方法可以實現:

    第一種就是在busybox 的編譯目錄配置完成後,用busybox 當前目錄的配置文件.config 替換掉package/busybox/busybox.config 文件。

    第二種就是配置完busybox 後,直接在buildroot 的配置選項中導入這個配置文件。

我們可以通過配置busybox來添加這個功能。但是我們製作的根文件系統,是用buildroot自動完成的,busybox也隨之自動生成,我們還能隨心所欲的添加其他功能嗎?答案是肯定的。
進入buildroot的menuconfig菜單,進入Target packages選項,發現第一欄有關於busybox的配置選項,如下圖所示:

busybox 的編譯目錄在output/build/busybox-1.22.1 下,這裏output 是編譯之後纔會釋放的文件,手工配置busybox 後,配置文件也會保存在這個目錄下,因此不推薦用第二種方法,它不便於源碼維護。下面介紹第一種方法。
進入output/build/busybox-1.22.1 目錄,執行make menuconfig ,進入Linux Module Utilities 菜單,如下圖所示:

選中insmod,rmmod,lsmod,modprobe,depmod,保存退出,然後將當前目錄下的.config文件覆蓋掉package\busybox\busybox.config文件,之後在buildroot根目錄下執行make指令重新編譯,busybox將會自動更新,並最終打包到映像文件rootfs.ext4中。

將開發板更新最新的文件系統後,我們就可以使用depmod 指令了。在沒有執行該指令時,在/lib/modules/ 3.0.15-9tripod 下是沒有任何文件的,執行depmod 命令後,該目錄下將會生成三個文件:

1 [root@x4412 /]# ls /lib/modules/3.0.15-9tripod/
2 [root@x4412 /]# depmod
3 [root@x4412 /]# ls /lib/modules/3.0.15-9tripod/
4 modules.alias    modules.dep      modules.symbols
5 [root@x4412 /]#

我們再嘗試執行modprobe指令加載驅動:

1 [root@x4412 /]# modprobe x4412-beep.ko
2 modprobe: module x4412-beep.ko not found in modules.dep
3 [root@x4412 /]#

 

這裏提示在modules.dep文件中沒有發現我們加載的ko文件,我們嘗試查看一下modules.dep的內容:

 

1 [root@x4412 /]# cd /lib/modules/3.0.15-9tripod/
2 [root@x4412 3.0.15-9tripod]# more modules.dep
3 [root@x4412 3.0.15-9tripod]#

 

可見,裏面的內容爲空。實際上,depmod指令會自動分析/lib/modules/$(uname -r)目錄下的可加載模塊,並按照固定的格式填入modules.dep中。因此,我們可以先將需要加載的ko文件拷貝到對應的目錄,再執行depmod指令。

1 [root@x4412 3.0.15-9tripod]# pwd                  
2 /lib/modules/3.0.15-9tripod
3 [root@x4412 3.0.15-9tripod]# cp /mnt/x4412-beep.ko .
4 [root@x4412 3.0.15-9tripod]# depmod
5 [root@x4412 3.0.15-9tripod]# more modules.dep
6 x4412-beep.ko:
7 [root@x4412 3.0.15-9tripod]#

 

可以看到,在modules.dep中已經存在有我們需要加載的ko文件名了。注意,不要手工的去編輯modules.dep文件!再執行modprobe指令,即可加載模塊了。

1 [root@x4412 3.0.15-9tripod]# modprobe x4412-beep.ko
2 [ 2029.489772] x4412 beep driver
3 [root@x4412 3.0.15-9tripod]#

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章