.ko文件是kernel object文件(內核模塊),該文件的意義就是把內核的一些功能移動到內核外邊, 須要的時候插入內核,不須要時卸載。linux
(1)這樣能夠縮小內核體積;shell
(2)使用方便。bash
(1)做爲一個功能模塊,須要使用時,直接插入運行就行。如在imx6上鍊接模擬攝像頭,先運行模擬攝像頭對應的驅動模塊 camera.ko文件,而後對應的工程執行文件運行就行。oop
(1)方法一
進入test.ko驅動模塊文件所在的目錄,而後直接 insmod test.ko spa
(2)方法二
將test.ko文件拷貝到/lib/module/#uname-r#/目錄下,這裏,#uname -r#意思是,在終端中輸入 命令行
uname -r後顯示的內核版本及名稱,例如mini2440中#uname-r#就是2.6.32.2-FriendlyARM。code
而後 depmod(會在/lib/modules/#uname -r#/目錄下生成modules.dep和modules.dep.bb文件,代表模塊的依賴關係) blog
最後 modprobe test(注意這裏無需輸入.ko後綴) 便可源碼
注:兩種方法的區別it
modprobe和insmod相似,都是用來動態加載驅動模塊的,區別在於modprobe能夠解決load module時的依賴關係,它是經過/lib/modules/#uname -
r/modules.dep(.bb)文件來查找依賴關係的;而insmod不能解決依賴問題。也就是說,若是你肯定你要加載的驅動模塊不依賴其餘驅動模塊的話,既能夠
insmod也能夠modprobe,固然insmod能夠在任何目錄下執行,更方便一些。而若是你要加載的驅動模塊還依賴其餘ko驅動模塊的話,就只能將模塊拷貝到上
述的特定目錄,depmod後再modprobe。
在任何目錄下輸入命令
在任何目錄下, 輸入命令
注:「module_name」是lsmod顯示的模塊名稱,而不是對應的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/
rpm -i kernel-2.6.23.1-4.src.rpm
3. 編寫hello模塊代碼,源碼以下:
hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
4. 編寫hello模塊的Makefile文件,Makefile內容以下:
obj-m :=hello.o
KERNEL :=/usr/src/kernels/$(uname -r)/
PWD :=$(shell pwd)
modules :
$(MAKE) -C $(KERNEL) M=$(PWD) modules
.PHONEY:clean
clean :
rm -f *.o *.ko
5. 編譯模塊
在命令行進入hello.c所在的文件夾下執行make命令便可完成hello模塊的編譯。用ls命令能夠查看到hello.ko文件,此文件就是咱們自定義的內核模塊。
6. 安裝hello模塊
命令行下執行命令
insmod hello.ko
cat /var/log/messages
能夠看到下面這樣的信息:「Aug 6 13:37:59 localhost kernel: Hello, world」,說明模塊加載成功了。