天天看點

ko檔案解除安裝 linux_Linux下編寫和加載 .ko 檔案(驅動子產品檔案)

ko檔案解除安裝 linux_Linux下編寫和加載 .ko 檔案(驅動子產品檔案)

一、.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、檢視已加載的驅動子產品清單

在任何目錄下輸入指令

ko檔案解除安裝 linux_Linux下編寫和加載 .ko 檔案(驅動子產品檔案)

3、解除安裝驅動子產品

在任何目錄下, 輸入指令

ko檔案解除安裝 linux_Linux下編寫和加載 .ko 檔案(驅動子產品檔案)
注:“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

rpm -i kernel-2.6.23.1-4.src.rpm

3. 編寫hello子產品代碼,源碼如下:  

hello.c

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#include   

#include   

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内容如下:  

1

2

3

4

5

6

7

8

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子產品

 指令行下執行指令

1

insmod hello.ko

1

cat

/var/log/messages

可以看到下面這樣的資訊:“Aug  6 13:37:59 localhost kernel: Hello, world”,說明子產品加載成功了。  

ko檔案解除安裝 linux_Linux下編寫和加載 .ko 檔案(驅動子產品檔案)
ko檔案解除安裝 linux_Linux下編寫和加載 .ko 檔案(驅動子產品檔案)

微信号:ywcclzy