linux加載驅動命令,Linux中的insmod和mknod命令

 2023-11-30 阅读 31 评论 0

摘要:一、insmod命令詳解 insmod命令用于將給定的模塊加載到內核中。Linux有許多功能是通過模塊的方式,在需要時才載入kernel。如此可使kernel較為精簡,進而提高效率,以及保有較大的彈性。這類可載入的模塊,通常是設備驅動程序。 注意:需要注意

一、insmod命令詳解

insmod命令用于將給定的模塊加載到內核中。Linux有許多功能是通過模塊的方式,在需要時才載入kernel。如此可使kernel較為精簡,進而提高效率,以及保有較大的彈性。這類可載入的模塊,通常是設備驅動程序。

注意:需要注意的是使用insmod在加載模塊時,僅僅是臨時加載,即重啟后該模塊會失效。

linux加載驅動命令。2、用法:

語法
insmod(選項)(參數)

選項
-f:不檢查目前kernel版本與模塊編譯時的kernel版本是否一致,強制將模塊載入;
-k:將模塊設置為自動卸除;
-m:輸出模塊的載入信息;
-o<模塊名稱>:指定模塊的名稱,可使用模塊文件的文件名;
-p:測試模塊是否能正確地載入kernel;
-s:將所有信息記錄在系統記錄文件中;
-v:執行時顯示詳細的信息;
-x:不要匯出模塊的外部符號;
-X:匯出模塊所有的外部符號,此為預設置。

vim常用命令、參數
內核模塊:指定要加載的內核模塊文件。

實例
加載RAID1陣列級別模塊,如下所示:

[root@localhost boot]# insmod /lib/modules/2.6.
18-8.el5/kernel/drivers/md/raid1.ko  [root@localhost boot]# lsmod | grep raid1
raid1                  25153  0

從以上顯示結果可知,RAID1模塊已加載成功。只是在使用insmod命令加載模塊時,需要使用絕對路徑方能加載,且加載時無法自動解決依賴關系。

Linux重新生成設備文件命令,靜態加載就是把驅動程序直接編譯進內核,系統啟動后可以直接調用。靜態加載的缺點是調試起來比較麻煩,每次修改一個地方都要重新編譯和下載內核,效率較低。若采用靜態加載的驅動較多,會導致內核容量很大,浪費存儲空間。

動態加載利用了Linuxmodule特性,可以在系統啟動后用insmod命令添加模塊(.ko),在不需要的時候用rmmod命令卸載模塊,采用這種動態加載的方式便于驅動程序的調試,同時可以針對產品的功能需求,進行內核的裁剪,將不需要的驅動去除,大大減小了內核的存儲容量。

在這里插入圖片描述
【insmod與modprobe命令】

wget命令、在Linux中,modprobe和insmod都可以用來加載module,不過現在一般都推薦使用modprobe而不是insmod了。 modprobe和insmod的區別是什么呢?

  1. modprobe可以解決load module時的依賴關系,比如load moudleA就必須先load mouduleB之類的,它是通過/lib/modules//modules.dep文件來查找依賴關系的。而insmod不能解決依賴問題。

  2. modprobe默認會去/lib/modules/目錄下面查找module,而insmod只在給它的參數中去找module(默認在當前目錄找)。 這樣,有時insmod也有它的有用之處,舉個例子吧。

/root/my-mod.ko這個modulecd /root/,然后用insmod my-mod.ko(insmod /root/my-mod.ko)就可以insert這個module了,但是用modprobe my-mod.ko(modprobe /root/my-mod.ko)卻提示"FATAL: Module my-mod.ko not found",這就是因為modprobe是到/lib/modules/uname -r/下去找module的,如果沒找到就是這樣了。

二、mknod命令詳解

我們的linux操作系統跟外部設備(如磁盤、光盤等)的通信都是通過設備文件進行的,應用程序可以打開、關閉、讀寫這些設備文件,從而對設備進行讀寫,這種操作就像讀寫普通的文件一樣easy。linux為不同種類的設備文件提供了相同的接口,比如read(),write(),open(),close()

所以在系統與設備通信之前,系統首先要建立一個設備文件,這個設備文件存放在/dev目錄下。其實系統默認情況下就已經生成了很多設備文件,但有時候我們需要自己手動新建一些設備文件,這個時候就會用到像mkdir, mknod這樣的命令。

   mknod 的標準形式為:       mknod DEVNAME {b | c}  MAJOR  MINOR

1,DEVNAME是要創建的設備文件名,如果想將設備文件放在一個特定的文件夾下,就需要先用mkdir在dev目錄下新建一個目錄;

2, b和c 分別表示塊設備和字符設備:
b表示系統從塊設備中讀取數據的時候,直接從內存的buffer中讀取數據,而不經過磁盤;
c表示字符設備文件與設備傳送數據的時候是以字符的形式傳送,一次傳送一個字符,比如打印機、終端都是以字符的形式傳送數據;

3,MAJORMINOR分別表示主設備號和次設備號:
為了管理設備,系統為每個設備分配一個編號,一個設備號由主設備號和次設備號組成。主設備號標示某一種類的設備,次設備號用來區分同一類型的設備。linux操作系統中為設備文件編號分配了32位無符號整數,其中前12位是主設備號,后20位為次設備號,所以在向系統申請設備文件時主設備號不好超過4095,次設備號不好超過2^20 -1。
.
下面,我們就可以用mknod命令來申請設備文件了。

  mkdir -p  /dev/cobingmknod /dev/cobing/mydev1 c 128 512

注意:不是所有的編譯的模塊是需要通過mknod進行按照后再insmod的,有的模塊僅需要insmod即可。

三、模塊進行加載后重啟失效

為了是在命令行中執行insmod命令安裝的驅動能在重啟之后還有的解決方法大致有一下兩種方法:

(1)直接編譯內核,把想安裝的驅動在編譯內核的時候給編譯進去,這種方法比較麻煩,花的時候也比較的多,一般不采用這種方法(這種方法網上有很多資料可以參考)。

(2)這種方法比較簡單:就是在啟動腳本中加載模塊,這樣每次開機啟動都自動加載相應的驅動模塊。具體的方式如下:

  在文件/etc/rc.local中加載你想要的模塊程序即可

比如我想再系統啟動的時候自動給我完成:卸載r8169驅動、然后安裝r8168驅動、同時重啟網絡服務器的工作,那么我在該文件中的exit 0 之前寫如下的語句:

rmmod r8169#(卸載相應的驅動)insmod /usr/src/r8168.ko#(這個是r8168.ko文件放的絕對路徑),這步是安裝相應的驅動ifconfig eth0 downifconfig eth0 up

然后保存,重新啟動reboot之后,系統就將自動完成我們想要的那幾步工作。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/188296.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息