日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > Linux下編寫和加載 .ko 文件(驅(qū)動模塊文件)

          Linux下編寫和加載 .ko 文件(驅(qū)動模塊文件)

          發(fā)布人:電子禪石 時間:2020-08-10 來源:工程師 發(fā)布文章

          一、.ko 文件介紹

          .ko文件是kernel object文件(內(nèi)核模塊),該文件的意義就是把內(nèi)核的一些功能移動到內(nèi)核外邊, 需要的時候插入內(nèi)核,不需要時卸載。

          二、優(yōu)點

          (1)這樣可以縮小內(nèi)核體積;

          (2)使用方便。

          三、.ko文件一般的用處

          (1)作為一個功能模塊,需要使用時,直接插入運行就行。如在imx6上連接模擬攝像頭,先運行模擬攝像頭對應(yīng)的驅(qū)動模塊 camera.ko文件,然后對應(yīng)的工程執(zhí)行文件運行就行。

          四、使用.ko 文件1、加載驅(qū)動模塊test.ko

          (1)方法一 
          進(jìn)入test.ko驅(qū)動模塊文件所在的目錄,然后直接   insmod  test.ko 

          (2)方法二 
          將test.ko文件拷貝到/lib/module/#uname-r#/目錄下,這里,#uname -r#意思是,在終端中輸入 

          uname -r后顯示的內(nèi)核版本及名稱,例如mini2440中#uname-r#就是2.6.32.2-FriendlyARM。

          然后 depmod(會在/lib/modules/#uname -r#/目錄下生成modules.dep和modules.dep.bb文件,表明模塊的依賴關(guān)系) 

          最后 modprobe test(注意這里無需輸入.ko后綴) 即可

          注:兩種方法的區(qū)別

          modprobe和insmod類似,都是用來動態(tài)加載驅(qū)動模塊的,區(qū)別在于modprobe可以解決load module時的依賴關(guān)系,它是通過/lib/modules/#uname -

          r/modules.dep(.bb)文件來查找依賴關(guān)系的;而insmod不能解決依賴問題。也就是說,如果你確定你要加載的驅(qū)動模塊不依賴其他驅(qū)動模塊的話,既可以

          insmod也可以modprobe,當(dāng)然insmod可以在任何目錄下執(zhí)行,更方便一些。而如果你要加載的驅(qū)動模塊還依賴其他ko驅(qū)動模塊的話,就只能將模塊拷貝到上

          述的特定目錄,depmod后再modprobe。

          2、查看已加載的驅(qū)動模塊列表

          在任何目錄下輸入命令

           

          3、卸載驅(qū)動模塊

          在任何目錄下, 輸入命令

          注:“module_name”是lsmod顯示的模塊名稱,而不是對應(yīng)的ko文件名

          五、編寫生成.ko 文件

          Linux下hello.ko內(nèi)核模塊制作的全過程

          1. linux系統(tǒng)用的是Redflag 6.0 SP1 下載地址:ftp://ftp.redflag-linux.com/pub/redflag/dt6sp1/SP1/redflag-6-sp1.iso, 系統(tǒng)安裝很容易,安提示做就好。

          所用的內(nèi)核源碼目錄樹下載地址:ftp://ftp.redflag-linux.com/pub/redflag/dt6sp1/SP1/redflag-6-tool-sp1-src1.iso,將此iso文件掛載到/mnt下,安裝其中的內(nèi)核rpm

          包。

          掛載方法:mount -t iso9660 redflag-6-tool-sp1-src1.iso /mnt/ -o loop

          內(nèi)核目錄樹安裝方法: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 <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內(nèi)容如下:  

          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. 編譯模塊
          在命令行進(jìn)入hello.c所在的文件夾下執(zhí)行make命令即可完成hello模塊的編譯。用ls命令可以查看到hello.ko文件,此文件就是我們自定義的內(nèi)核模塊。

           6. 安裝hello模塊

           命令行下執(zhí)行命令

          1
          insmod hello.ko
          1
          cat /var/log/messages

          可以看到下面這樣的信息:“Aug  6 13:37:59 localhost kernel: Hello, world”,說明模塊加載成功了?! ?/span>


          *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



          關(guān)鍵詞: 驅(qū)動

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉