玩過linux程序開發(fā)的人都知道,當一個驅(qū)動程序以模塊化的模式編譯之后,它并不是隨著系統(tǒng)啟動而直接活躍的,而是靜靜的躺在內(nèi)核的某個角落里,此時是不可用的。應用程序想要調(diào)用該驅(qū)動,則必須先加載linux命令大全,然后才能使用。而且,使用完還存在一個卸載的過程。那么,這些個驅(qū)動模塊,該如何加載?又該如何卸載?又能否通過某個命令來進行統(tǒng)一管理或者查看呢?下面我們就來逐一分析。
一般來說,insmod和modprobe這兩個命令都可以完成驅(qū)動模塊的加載過程。下面以hello.ko驅(qū)動模塊為例來解釋:
1、insmod命令
進入hello.ko驅(qū)動模塊文件所在的目錄,然后直接輸入下面的命令即可:
insmod hello.ko
2、modprobe命令
其一:拷貝該 plugin_name.vim插件到你個人插件目錄~/.vim/plugin/下,拷貝plugin_help.txt到你個人文檔目錄~/.vim/doc/下,若存在該插件syntax的vim支持文件則放到~/.vim/syntax/目錄下,如果以上目錄不存在到終端輸入如下命令創(chuàng)建:。2. 內(nèi)核驅(qū)動模塊查看,支持內(nèi)核驅(qū)動模塊的內(nèi)存拷貝。2.內(nèi)核驅(qū)動模塊查看,支持內(nèi)核驅(qū)動模塊的內(nèi)存拷貝。
這里要說明一下,#uname -r#的意思是,在終端中輸入uname -r后顯示的內(nèi)核版本及名稱。例如我目前正在玩的mini2440開發(fā)板中,#uname -r#就是2.6.32.2-FriendlyARM,所以,編譯好的驅(qū)動模塊就必須放在/lib/module/2.6.32.2-FriendlyARM這個目錄下。
然后執(zhí)行以下命令即可:
depmod # 更新modules.dep和modules.dep.bb文件,記錄模塊的依賴關系
modprobe hello # 注意這里無需輸入.ko后綴
3、二者對比
總結(jié)一下,如上所述,insmod和modprobe都可以用來載入kernel module,但是二者還是有差別的,主要體現(xiàn)在modprobe能夠處理module載入的依賴性問題。
比方你要載入a module,而a module需要系統(tǒng)先載入b module,此時如果直接用insmod載入,通常都會出錯,不過當你使用modprobe命令時,系統(tǒng)就能夠分析出其中的依賴關系linux命令大全,于是會自動先載入b module然后再載入a module。
當然,modprobe 并不是大神,不可能真的是全自動分析,它只是讀取了驅(qū)動模塊安裝目錄下的modules.dep文件,從而分析出各個模塊的依賴性的,而該文件則是通過depmod命令所建立,這就是上面為什么要先執(zhí)行一下depmod命令然后再執(zhí)行modprobe命令的原因了。當然,如果你不執(zhí)行depmod命令,modprobe命令可能也可以執(zhí)行成功,但是你本次載入的模塊就沒有與系統(tǒng)其他驅(qū)動模塊建立依賴關系,無法形成一個有機的整體。
至于smartdrv.exe的加載方法,很簡單,進入windows安裝盤的win98安裝目錄,運行不帶參數(shù)的smartdrv.exe就是了,不過需要說明一點的是這個程序要使用擴展內(nèi)存,所以你必須事先加載himem.sys,建議你制作一張windows啟動盤(直接執(zhí)行format a:/s就可以了),然后將windows 98安裝目錄下的himem.sys和smartdrv.exe拷貝到軟盤上,然后在軟盤上邊建一個config.sys,在其中加入這樣一句:device=himem.sys ,以后用這張軟盤啟動就可以運行smartdrv.exe了。為了提供這樣的功能,在window2000開始,微軟加了一個特性,強制操作系統(tǒng)的加載程序首先從應用程序目錄中加載模塊,只有當加載程序無法在應用程序目錄中找到文件,才搜索其他目錄。模塊加載函數(shù)(必須)當通過insmod或modprobe命令加載內(nèi)核模塊時,模塊的加載函數(shù)會自動被內(nèi)核執(zhí)行,完成本模塊的相關初始化工作。