![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5iM0kjZjJzNmZGN3gDNwY2MmFTOiZDNxMTYwIzNyYTNl9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
一、.ko 檔案介紹
.ko檔案是kernel object檔案(核心子產品),該檔案的意義就是把核心的一些功能移動到核心外邊, 需要的時候插入核心,不需要時解除安裝。
二、優點
(1)這樣可以縮小核心體積;
(2)使用友善。
三、.ko檔案一般的用處
(1)作為一個功能子產品,需要使用時,直接插入運作就行。如在imx6上連接配接模拟攝像頭,先運作模拟攝像頭對應的驅動子產品 camera.ko檔案,然後對應的工程執行檔案運作就行。
四、使用.ko 檔案
1、加載驅動子產品test.ko
(1)方法一 進入test.ko驅動子產品檔案所在的目錄,然後直接 insmod test.ko
(2)方法二 将test.ko檔案拷貝到/lib/module/#uname-r#/目錄下,這裡,#uname -r#意思是,在終端中輸入
uname -r後顯示的核心版本及名稱,例如mini2440中#uname-r#就是2.6.32.2-FriendlyARM。
然後 depmod(會在/lib/modules/#uname -r#/目錄下生成modules.dep和modules.dep.bb檔案,表明子產品的依賴關系)
最後 modprobe test(注意這裡無需輸入.ko字尾) 即可
注:兩種方法的差別
modprobe和insmod類似,都是用來動态加載驅動子產品的,差別在于modprobe可以解決load module時的依賴關系,它是通過/lib/modules/#uname -r/modules.dep(.bb)檔案來查找依賴關系的;而insmod不能解決依賴問題。也就是說,如果你确定你要加載的驅動子產品不依賴其他驅動子產品的話,既可以insmod也可以modprobe,當然insmod可以在任何目錄下執行,更友善一些。而如果你要加載的驅動子產品還依賴其他ko驅動子產品的話,就隻能将子產品拷貝到上述的特定目錄,depmod後再modprobe。
2、檢視已加載的驅動子產品清單
在任何目錄下輸入指令
3、解除安裝驅動子產品
在任何目錄下, 輸入指令
注:“module_name”是lsmod顯示的子產品名稱,而不是對應的ko檔案名
五、編寫生成.ko 檔案
Linux下hello.ko核心子產品制作的全過程
1. linux系統用的是Redflag 6.0 SP1 下載下傳位址:ftp://ftp.redflag-linux.com/pub/redflag/dt6sp1/SP1/redflag-6-sp1.iso, 系統安裝很容易,安提示做就好。
所用的核心源碼目錄樹下載下傳位址:ftp://ftp.redflag-linux.com/pub/redflag/dt6sp1/SP1/redflag-6-tool-sp1-src1.iso,将此iso檔案挂載到/mnt下,安裝其中的核心rpm包。
挂載方法:mount -t iso9660 redflag-6-tool-sp1-src1.iso /mnt/ -o loop
核心目錄樹安裝方法:cd /mnt/RedFlag/SRMPS/
1 | |
3. 編寫hello子產品代碼,源碼如下:
hello.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
4. 編寫hello子產品的Makefile檔案,Makefile内容如下:
1 2 3 4 5 6 7 8 | |
5. 編譯子產品在指令行進入hello.c所在的檔案夾下執行make指令即可完成hello子產品的編譯。用ls指令可以檢視到hello.ko檔案,此檔案就是我們自定義的核心子產品。
6. 安裝hello子產品
指令行下執行指令
1 | |
1 | |
可以看到下面這樣的資訊:“Aug 6 13:37:59 localhost kernel: Hello, world”,說明子產品加載成功了。
微信号:ywcclzy