linux驱动模块命令大全insmod/rmmod/modprobe/depmod/lsmod
玩過linux程序開發(fā)的人都知道,當(dāng)一個(gè)驅(qū)動(dòng)程序以模塊化的模式編譯之后,它并不是隨著系統(tǒng)啟動(dòng)而直接活躍的,而是靜靜的躺在內(nèi)核的某個(gè)角落里,此時(shí)是不可用的。應(yīng)用程序想要調(diào)用該驅(qū)動(dòng),則必須先加載,然后才能使用。而且,使用完還存在一個(gè)卸載的過程。那么,這些個(gè)驅(qū)動(dòng)模塊,該如何加載?又該如何卸載?又能否通過某個(gè)命令來進(jìn)行統(tǒng)一管理或者查看呢?下面我們就來逐一分析。
一、驅(qū)動(dòng)模塊的加載
一般來說,insmod和modprobe這兩個(gè)命令都可以完成驅(qū)動(dòng)模塊的加載過程。下面以hello.ko驅(qū)動(dòng)模塊為例來解釋:
1、insmod命令
進(jìn)入hello.ko驅(qū)動(dòng)模塊文件所在的目錄,然后直接輸入下面的命令即可:
insmod hello.ko2、modprobe命令
首先必須將hello.ko文件拷貝到/lib/module/#uname -r#/目錄下【為方便敘述,下文中統(tǒng)一稱為驅(qū)動(dòng)模塊安裝目錄】。
這里要說明一下,#uname -r#的意思是,在終端中輸入uname -r后顯示的內(nèi)核版本及名稱。例如我目前正在玩的mini2440開發(fā)板中,#uname -r#就是2.6.32.2-FriendlyARM,所以,編譯好的驅(qū)動(dòng)模塊就必須放在/lib/module/2.6.32.2-FriendlyARM這個(gè)目錄下。
然后執(zhí)行以下命令即可:
depmod # 更新modules.dep和modules.dep.bb文件,記錄模塊的依賴關(guān)系 modprobe hello # 注意這里無(wú)需輸入.ko后綴3、二者對(duì)比
總結(jié)一下,如上所述,insmod和modprobe都可以用來載入kernel module,但是二者還是有差別的,主要體現(xiàn)在modprobe能夠處理module載入的依賴性問題。
比方你要載入a module,而a module需要系統(tǒng)先載入b module,此時(shí)如果直接用insmod載入,通常都會(huì)出錯(cuò),不過當(dāng)你使用modprobe命令時(shí),系統(tǒng)就能夠分析出其中的依賴關(guān)系,于是會(huì)自動(dòng)先載入b module然后再載入a module。
當(dāng)然,modprobe 并不是大神,不可能真的是全自動(dòng)分析,它只是讀取了驅(qū)動(dòng)模塊安裝目錄下的modules.dep文件,從而分析出各個(gè)模塊的依賴性的,而該文件則是通過depmod命令所建立,這就是上面為什么要先執(zhí)行一下depmod命令然后再執(zhí)行modprobe命令的原因了。當(dāng)然,如果你不執(zhí)行depmod命令,modprobe命令可能也可以執(zhí)行成功,但是你本次載入的模塊就沒有與系統(tǒng)其他驅(qū)動(dòng)模塊建立依賴關(guān)系,無(wú)法形成一個(gè)有機(jī)的整體。
也就是說,如果你確定你要加載的驅(qū)動(dòng)模塊不依賴其他驅(qū)動(dòng)模塊的話,既可以insmod也可以modprobe,當(dāng)然insmod可以在任何目錄下執(zhí)行,更方便一些。而如果你要加載的驅(qū)動(dòng)模塊還依賴其他ko驅(qū)動(dòng)模塊的話,就只能將模塊拷貝到上述的特定目錄,depmod后再modprobe。
二、驅(qū)動(dòng)模塊的卸載
上面既然已經(jīng)了解了如何加載一個(gè)驅(qū)動(dòng)模塊,自然也要介紹一下如何卸載一個(gè)驅(qū)動(dòng)模塊。與加載命令對(duì)應(yīng),卸載命令也有兩個(gè):
1、rmmod
在任何目錄下輸入以下命令即可:
rmmod module_name注意:其中”module_name”是lsmod顯示的模塊名稱,而不是對(duì)應(yīng)的ko文件名。
2、modprobe命令
modprobe -r hello # 注意這里無(wú)需輸入.ko后綴 depmod # 更新modules.dep和modules.dep.bb文件,記錄模塊的依賴關(guān)系同上所述,使用modprobe命令來卸載一個(gè)模塊時(shí),它也會(huì)自動(dòng)更新驅(qū)動(dòng)模塊安裝目錄下的modules.dep和modules.dep.bb文件,從而將該模塊完整的卸載掉。
三、模塊列表的查看
在任何目錄下,都可以輸入下面的命令來查看已加載的驅(qū)動(dòng)模塊列表。
leon@Ubuntu:~$ lsmod Module Size Used by vboxsf 45056 3 bnep 20480 2 rfcomm 69632 0 bluetooth 512000 10 bnep,rfcomm binfmt_misc 20480 1 nfsd 315392 13 auth_rpcgss 57344 1 nfsd nfs_acl 16384 1 nfsd nfs 249856 0 lockd 94208 2 nfs,nfsd grace 16384 2 nfsd,lockd sunrpc 331776 19 nfs,nfsd,auth_rpcgss,lockd,nfs_acl fscache 65536 1 nfs snd_intel8x0 40960 2總結(jié)
以上是生活随笔為你收集整理的linux驱动模块命令大全insmod/rmmod/modprobe/depmod/lsmod的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息称《漫威金刚狼》最早将于 2024
- 下一篇: linux系统下top命令的详细用法、参