第二十二章 核心与核心模块
生活随笔
收集整理的這篇文章主要介紹了
第二十二章 核心与核心模块
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
談完了整個(gè)啟動(dòng)的流程,您應(yīng)該會(huì)知道,在整個(gè)啟動(dòng)的過(guò)程當(dāng)中,
是否能夠成功的驅(qū)動(dòng)我們主機(jī)的硬件配備, 是核心 (kernel) 的工作!
而核心一般都是壓縮檔,因此在使用核心之前,就得要將他解壓縮后, 才能加載主內(nèi)存當(dāng)中。
另外,為了應(yīng)付日新月異的硬件, 目前的核心都是具有『可讀取模塊化驅(qū)動(dòng)程序』的功能, 亦即是所謂的『 modules (模塊化)』的功能啦!所謂的模塊化可以將他想成是一個(gè)『外掛程序』, 該外掛程序可能由硬件開(kāi)發(fā)廠商提供,也有可能我們的核心本來(lái)就支持~不過(guò),較新的硬件, 通常都需要硬件開(kāi)發(fā)商提供驅(qū)動(dòng)程序模塊啦!
那么核心與核心模塊放在哪?
核心: /boot/vmlinuz 或 /boot/vmlinuz-version;
核心解壓縮所需 RAM Disk: /boot/initrd (/boot/initrd-version);
核心模塊: /lib/modules/version/kernel 或 /lib/modules/$(uname -r)/kernel;
核心原始碼: /usr/src/linux 或 /usr/src/kernels/ (要安裝才會(huì)有,默認(rèn)不安裝)
如果該核心被順利的加載系統(tǒng)當(dāng)中了,那么就會(huì)有幾個(gè)資訊紀(jì)錄下來(lái):
1.核心版本: /proc/version
2.系統(tǒng)核心功能: /proc/sys/kernel
問(wèn)題來(lái)啦,如果我有個(gè)新的硬件,偏偏我的操作系統(tǒng)不支持,該怎么辦?很簡(jiǎn)單啊!
重新編譯核心,并加入最新的硬件驅(qū)動(dòng)程序原始碼;
將該硬件的驅(qū)動(dòng)程序編譯成為模塊,在啟動(dòng)時(shí)加載該模塊
上面第一點(diǎn)還很好理解, 反正就是重新編譯核心就是了。不過(guò),核心編譯很不容易啊! 我們會(huì)在后續(xù)章節(jié)約略介紹核心編譯的整個(gè)程序。比較有趣的則是將該硬件的驅(qū)動(dòng)程序編譯成為模塊啦! 關(guān)於編譯的方法,可以參考后續(xù)的第二十二章、原始碼與 tarball的介紹。 我們這個(gè)章節(jié)僅是說(shuō)明一下,如果想要加載一個(gè)已經(jīng)存在的模塊時(shí),該如何是好?
核心模塊與相依性
既然要處理核心模塊, 自然就得要了解了解我們核心提供的模塊之間的相關(guān)性啦! 基本上,核心模塊的放置處是在 /lib/modules/$(uname -r)/kernel 當(dāng)中,里面主要還分成幾個(gè)目錄:
arch :與硬件平臺(tái)有關(guān)的項(xiàng)目,例如 CPU 的等級(jí)等等;
crypto :核心所支持的加密的技術(shù),例如 md5 或者是 des 等等;
drivers :一些硬件的驅(qū)動(dòng)程序,例如顯卡、網(wǎng)絡(luò)卡、PCI 相關(guān)硬件等等;
fs :核心所支持的 filesystems ,例如 vfat, reiserfs, nfs 等等;
lib :一些函式庫(kù);
net :與網(wǎng)絡(luò)有關(guān)的各項(xiàng)協(xié)議數(shù)據(jù),還有防火墻模塊 (net/ipv4/netfilter/*) 等等;
sound :與音效有關(guān)的各項(xiàng)模塊;
如果要我們一個(gè)一個(gè)的去檢查這些模塊的主要資訊,然后定義出他們的相依性, 我們可能會(huì)瘋掉吧!所以說(shuō),我們的 Linux 當(dāng)然會(huì)提供一些模塊相依性的解決方案羅~ 對(duì)啦!那就是檢查 /lib/modules/$(uname -r)/modules.dep 這個(gè)文件啦!他記錄了在核心支持的模塊的各項(xiàng)相依性。
那么這個(gè)文件如何創(chuàng)建呢?挺簡(jiǎn)單! 利用 depmod 這個(gè)命令就可以達(dá)到創(chuàng)建該文件的需求了!
[root@www ~]# depmod [-Ane] 選項(xiàng)與參數(shù): -A :不加任何參數(shù)時(shí), depmod 會(huì)主動(dòng)的去分析目前核心的模塊,并且重新寫(xiě)入/lib/modules/$(uname -r)/modules.dep 當(dāng)中。若加入 -A 參數(shù)時(shí),則 depmod會(huì)去搜尋比 modules.dep 內(nèi)還要新的模塊,如果真找到新模塊,才會(huì)升級(jí)。 -n :不寫(xiě)入 modules.dep ,而是將結(jié)果輸出到螢?zāi)簧?standard out); -e :顯示出目前已加載的不可運(yùn)行的模塊名稱(chēng)范例一:若我做好一個(gè)網(wǎng)絡(luò)卡驅(qū)動(dòng)程序,檔名為 a.ko,該如何升級(jí)核心相依性? [root@www ~]# cp a.ko /lib/modules/$(uname -r)/kernel/drivers/net [root@www ~]# depmod
以上面的范例一為例,我們的 Linux kernel 2.6.x 版本的核心模塊擴(kuò)展名一定是 .ko 結(jié)尾的, 當(dāng)你使用 depmod 之后,該程序會(huì)跑到模塊標(biāo)準(zhǔn)放置目錄 /lib/modules/$(uname -r)/kernel , 并依據(jù)相關(guān)目錄的定義將全部的模塊捉出來(lái)分析,最終才將分析的結(jié)果寫(xiě)入 modules.dep 文件中的吶! 這個(gè)文件很重要喔!因?yàn)樗麜?huì)影響到本章稍后會(huì)介紹的 modprobe 命令的應(yīng)用!
核心模塊的觀察
那你到底曉不曉得目前核心加載了多少的模塊呢?粉簡(jiǎn)單啦!利用 lsmod 即可!
[root@www ~]# lsmod Module Size Used by autofs4 24517 2 hidp 23105 2 ....(中間省略).... 8139too 28737 0 8139cp 26305 0 mii 9409 2 8139too,8139cp <==mii 還被 8139cp, 8139too 使用 ....(中間省略).... uhci_hcd 25421 0 <==底下三個(gè)是 U盤(pán) 相關(guān)的模塊! ohci_hcd 23261 0 ehci_hcd 33357 0
使用 lsmod 之后,系統(tǒng)會(huì)顯示出目前已經(jīng)存在於核心當(dāng)中的模塊,顯示的內(nèi)容包括有:
模塊名稱(chēng)(Module);
模塊的大小(size);
此模塊是否被其他模塊所使用 (Used by)。
也就是說(shuō),模塊其實(shí)真的有相依性喔!舉上表為例, mii 這個(gè)模塊會(huì)被 8139too 所使用。 簡(jiǎn)單的說(shuō),就是 『當(dāng)你要加載 8139too 時(shí),需要先加載 mii 這個(gè)模塊才可以順利的加載 8139too』的意思。 那么除了顯示出目前的模塊外,我還可以查閱每個(gè)模塊的資訊嗎?舉例來(lái)說(shuō),我們知道 8139too 是螃蟹卡的驅(qū)動(dòng)程序,那么 mii 是什么咚咚?就用 modinfo 來(lái)觀察吧!
[root@www ~]# modinfo [-adln] [module_name|filename] 選項(xiàng)與參數(shù): -a :僅列出作者名稱(chēng); -d :僅列出該 modules 的說(shuō)明 (description); -l :僅列出授權(quán) (license); -n :僅列出該模塊的詳細(xì)路徑。范例一:由上個(gè)表格當(dāng)中,請(qǐng)列出 mii 這個(gè)模塊的相關(guān)資訊: [root@www ~]# modinfo mii filename: /lib/modules/2.6.18-92.el5/kernel/drivers/net/mii.ko license: GPL description: MII hardware support library author: Jeff Garzik <jgarzik@pobox.com> srcversion: 16DCEDEE4B5629C222C352D depends: vermagic: 2.6.18-92.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1 # 可以看到這個(gè)模塊的來(lái)源,以及該模塊的簡(jiǎn)易說(shuō)明!(是硬件支持函式庫(kù))范例二:我有一個(gè)模塊名稱(chēng)為 a.ko ,請(qǐng)問(wèn)該模塊的資訊為? [root@www ~]# modinfo a.ko ....(省略)....
事實(shí)上,這個(gè) modinfo 除了可以『查閱在核心內(nèi)的模塊』之外,還可以檢查『某個(gè)模塊文件』, 因此,如果你想要知道某個(gè)文件代表的意義為何,利用 modinfo 加上完整檔名吧! 看看就曉得是啥玩意兒羅! ^_^
核心模塊的加載與移除
好了,如果我想要自行手動(dòng)加載模塊,又該如何是好?有很多方法啦,最簡(jiǎn)單而且建議的,是使用 modprobe 這個(gè)命令來(lái)加載模塊, 這是因?yàn)? modprobe 會(huì)主動(dòng)的去搜尋 modules.dep 的內(nèi)容,先克服了模塊的相依性后, 才決定需要加載的模塊有哪些,很方便。至於 insmod 則完全由使用者自行加載一個(gè)完整檔名的模塊, 并不會(huì)主動(dòng)的分析模塊相依性啊!
[root@www ~]# insmod [/full/path/module_name] [parameters]范例一:請(qǐng)嘗試加載 cifs.ko 這個(gè)『文件系統(tǒng)』模塊 [root@www ~]# insmod /lib/modules/$(uname -r)/kernel/fs/cifs/cifs.ko [root@www ~]# lsmod | grep cifs cifs 212789 0
他立刻就將該模塊加載羅~但是 insmod 后面接的模塊必須要是完整的『檔名』才行!那如何移除這個(gè)模塊呢?
[root@www ~]# rmmod [-fw] module_name 選項(xiàng)與參數(shù): -f :強(qiáng)制將該模塊移除掉,不論是否正被使用; -w :若該模塊正被使用,則 rmmod 會(huì)等待該模塊被使用完畢后,才移除他!范例一:將剛剛加載的 cifs 模塊移除! [root@www ~]# rmmod cifs范例二:請(qǐng)加載 vfat 這個(gè)『文件系統(tǒng)』模塊 [root@www ~]# insmod /lib/modules/$(uname -r)/kernel/fs/vfat/vfat.ko insmod: error inserting '/lib/modules/2.6.18-92.el5/kernel/fs/vfat/vfat.ko': -1 Unknown symbol in module # 無(wú)法加載 vfat 這個(gè)模塊啊!傷腦筋!
使用 insmod 與 rmmod 的問(wèn)題就是,你必須要自行找到模塊的完整檔名才行,而且如同上述范例二的結(jié)果, 萬(wàn)一模塊有相依屬性的問(wèn)題時(shí),你將無(wú)法直接加載或移除該模塊呢!所以近年來(lái)我們都建議 直接使用 modprobe 來(lái)處理模塊加載的問(wèn)題,這個(gè)命令的用法是:
[root@www ~]# modprobe [-lcfr] module_name 選項(xiàng)與參數(shù): -c :列出目前系統(tǒng)所有的模塊!(更詳細(xì)的代號(hào)對(duì)應(yīng)表) -l :列出目前在 /lib/modules/`uname -r`/kernel 當(dāng)中的所有模塊完整檔名; -f :強(qiáng)制加載該模塊; -r :類(lèi)似 rmmod ,就是移除某個(gè)模塊羅~范例一:加載 cifs 模塊 [root@www ~]# modprobe cifs # 很方便吧!不需要知道完整的模塊檔名,這是因?yàn)樵撏暾麢n名已經(jīng)記錄到 # /lib/modules/`uname -r`/modules.dep 當(dāng)中的緣故啊!如果要移除的話: [root@www ~]# modprobe -r cifs
使用 modprobe 真的是要比 insmod 方便很多!因?yàn)樗侵苯尤ニ褜?modules.dep 的紀(jì)錄, 所以羅,當(dāng)然可以克服模塊的相依性問(wèn)題,而且還不需要知道該模塊的詳細(xì)路徑呢! 好方便! ^_^
例題:
嘗試使用 modprobe 加載 vfat 這個(gè)模塊,并且觀察該模塊的相關(guān)模塊是哪個(gè)?
答:
我們使用 modprobe 來(lái)加載,再以 lsmod 來(lái)觀察與 grep 擷取關(guān)鍵字看看:
[root@www ~]# modprobe vfat [root@www ~]# lsmod | grep vfat vfat 15809 0 fat 51165 1 vfat <==原來(lái)就是 fat 這個(gè)模塊啊![root@www ~]# modprobe -r vfat <==測(cè)試完移除此模塊
核心模塊的額外參數(shù)配置: /etc/modprobe.conf
這個(gè)文件我們之前已經(jīng)談過(guò)了,這里只是再?gòu)?qiáng)調(diào)一下而已,如果您想要修改某些模塊的額外參數(shù)配置, 就在這個(gè)文件內(nèi)配置吧!我們假設(shè)一個(gè)案例好了,假設(shè)我的網(wǎng)絡(luò)卡 eth0 是使用 ne , 但是 eth1 同樣也使用 ne ,為了避免同一個(gè)模塊會(huì)導(dǎo)致網(wǎng)絡(luò)卡的錯(cuò)亂, 因此,我可以先找到 eth0 與 eth1 的 I/O 與 IRQ ,假設(shè):
eth0 : I/O (0x300) 且 IRQ=5
eth1 : I/O (0x320) 且 IRQ=7
則:
[root@www ~]# vi /etc/modprobe.conf alias eth0 ne alias eth1 ne options eth0 io=0x300 irq=5 options eth1 io=0x320 irq=7
嘿嘿!如此一來(lái),我的 Linux 就不會(huì)捉錯(cuò)網(wǎng)絡(luò)卡的對(duì)應(yīng)羅!因?yàn)楸晃覐?qiáng)制指定某個(gè) I/O 咯嘛! ^_^
轉(zhuǎn)自: http://vbird.dic.ksu.edu.tw/linux_basic/0510osloader_2.php
另外,為了應(yīng)付日新月異的硬件, 目前的核心都是具有『可讀取模塊化驅(qū)動(dòng)程序』的功能, 亦即是所謂的『 modules (模塊化)』的功能啦!所謂的模塊化可以將他想成是一個(gè)『外掛程序』, 該外掛程序可能由硬件開(kāi)發(fā)廠商提供,也有可能我們的核心本來(lái)就支持~不過(guò),較新的硬件, 通常都需要硬件開(kāi)發(fā)商提供驅(qū)動(dòng)程序模塊啦!
那么核心與核心模塊放在哪?
核心: /boot/vmlinuz 或 /boot/vmlinuz-version;
核心解壓縮所需 RAM Disk: /boot/initrd (/boot/initrd-version);
核心模塊: /lib/modules/version/kernel 或 /lib/modules/$(uname -r)/kernel;
核心原始碼: /usr/src/linux 或 /usr/src/kernels/ (要安裝才會(huì)有,默認(rèn)不安裝)
如果該核心被順利的加載系統(tǒng)當(dāng)中了,那么就會(huì)有幾個(gè)資訊紀(jì)錄下來(lái):
1.核心版本: /proc/version
2.系統(tǒng)核心功能: /proc/sys/kernel
問(wèn)題來(lái)啦,如果我有個(gè)新的硬件,偏偏我的操作系統(tǒng)不支持,該怎么辦?很簡(jiǎn)單啊!
重新編譯核心,并加入最新的硬件驅(qū)動(dòng)程序原始碼;
將該硬件的驅(qū)動(dòng)程序編譯成為模塊,在啟動(dòng)時(shí)加載該模塊
上面第一點(diǎn)還很好理解, 反正就是重新編譯核心就是了。不過(guò),核心編譯很不容易啊! 我們會(huì)在后續(xù)章節(jié)約略介紹核心編譯的整個(gè)程序。比較有趣的則是將該硬件的驅(qū)動(dòng)程序編譯成為模塊啦! 關(guān)於編譯的方法,可以參考后續(xù)的第二十二章、原始碼與 tarball的介紹。 我們這個(gè)章節(jié)僅是說(shuō)明一下,如果想要加載一個(gè)已經(jīng)存在的模塊時(shí),該如何是好?
核心模塊與相依性
既然要處理核心模塊, 自然就得要了解了解我們核心提供的模塊之間的相關(guān)性啦! 基本上,核心模塊的放置處是在 /lib/modules/$(uname -r)/kernel 當(dāng)中,里面主要還分成幾個(gè)目錄:
arch :與硬件平臺(tái)有關(guān)的項(xiàng)目,例如 CPU 的等級(jí)等等;
crypto :核心所支持的加密的技術(shù),例如 md5 或者是 des 等等;
drivers :一些硬件的驅(qū)動(dòng)程序,例如顯卡、網(wǎng)絡(luò)卡、PCI 相關(guān)硬件等等;
fs :核心所支持的 filesystems ,例如 vfat, reiserfs, nfs 等等;
lib :一些函式庫(kù);
net :與網(wǎng)絡(luò)有關(guān)的各項(xiàng)協(xié)議數(shù)據(jù),還有防火墻模塊 (net/ipv4/netfilter/*) 等等;
sound :與音效有關(guān)的各項(xiàng)模塊;
如果要我們一個(gè)一個(gè)的去檢查這些模塊的主要資訊,然后定義出他們的相依性, 我們可能會(huì)瘋掉吧!所以說(shuō),我們的 Linux 當(dāng)然會(huì)提供一些模塊相依性的解決方案羅~ 對(duì)啦!那就是檢查 /lib/modules/$(uname -r)/modules.dep 這個(gè)文件啦!他記錄了在核心支持的模塊的各項(xiàng)相依性。
那么這個(gè)文件如何創(chuàng)建呢?挺簡(jiǎn)單! 利用 depmod 這個(gè)命令就可以達(dá)到創(chuàng)建該文件的需求了!
[root@www ~]# depmod [-Ane] 選項(xiàng)與參數(shù): -A :不加任何參數(shù)時(shí), depmod 會(huì)主動(dòng)的去分析目前核心的模塊,并且重新寫(xiě)入/lib/modules/$(uname -r)/modules.dep 當(dāng)中。若加入 -A 參數(shù)時(shí),則 depmod會(huì)去搜尋比 modules.dep 內(nèi)還要新的模塊,如果真找到新模塊,才會(huì)升級(jí)。 -n :不寫(xiě)入 modules.dep ,而是將結(jié)果輸出到螢?zāi)簧?standard out); -e :顯示出目前已加載的不可運(yùn)行的模塊名稱(chēng)范例一:若我做好一個(gè)網(wǎng)絡(luò)卡驅(qū)動(dòng)程序,檔名為 a.ko,該如何升級(jí)核心相依性? [root@www ~]# cp a.ko /lib/modules/$(uname -r)/kernel/drivers/net [root@www ~]# depmod
以上面的范例一為例,我們的 Linux kernel 2.6.x 版本的核心模塊擴(kuò)展名一定是 .ko 結(jié)尾的, 當(dāng)你使用 depmod 之后,該程序會(huì)跑到模塊標(biāo)準(zhǔn)放置目錄 /lib/modules/$(uname -r)/kernel , 并依據(jù)相關(guān)目錄的定義將全部的模塊捉出來(lái)分析,最終才將分析的結(jié)果寫(xiě)入 modules.dep 文件中的吶! 這個(gè)文件很重要喔!因?yàn)樗麜?huì)影響到本章稍后會(huì)介紹的 modprobe 命令的應(yīng)用!
核心模塊的觀察
那你到底曉不曉得目前核心加載了多少的模塊呢?粉簡(jiǎn)單啦!利用 lsmod 即可!
[root@www ~]# lsmod Module Size Used by autofs4 24517 2 hidp 23105 2 ....(中間省略).... 8139too 28737 0 8139cp 26305 0 mii 9409 2 8139too,8139cp <==mii 還被 8139cp, 8139too 使用 ....(中間省略).... uhci_hcd 25421 0 <==底下三個(gè)是 U盤(pán) 相關(guān)的模塊! ohci_hcd 23261 0 ehci_hcd 33357 0
使用 lsmod 之后,系統(tǒng)會(huì)顯示出目前已經(jīng)存在於核心當(dāng)中的模塊,顯示的內(nèi)容包括有:
模塊名稱(chēng)(Module);
模塊的大小(size);
此模塊是否被其他模塊所使用 (Used by)。
也就是說(shuō),模塊其實(shí)真的有相依性喔!舉上表為例, mii 這個(gè)模塊會(huì)被 8139too 所使用。 簡(jiǎn)單的說(shuō),就是 『當(dāng)你要加載 8139too 時(shí),需要先加載 mii 這個(gè)模塊才可以順利的加載 8139too』的意思。 那么除了顯示出目前的模塊外,我還可以查閱每個(gè)模塊的資訊嗎?舉例來(lái)說(shuō),我們知道 8139too 是螃蟹卡的驅(qū)動(dòng)程序,那么 mii 是什么咚咚?就用 modinfo 來(lái)觀察吧!
[root@www ~]# modinfo [-adln] [module_name|filename] 選項(xiàng)與參數(shù): -a :僅列出作者名稱(chēng); -d :僅列出該 modules 的說(shuō)明 (description); -l :僅列出授權(quán) (license); -n :僅列出該模塊的詳細(xì)路徑。范例一:由上個(gè)表格當(dāng)中,請(qǐng)列出 mii 這個(gè)模塊的相關(guān)資訊: [root@www ~]# modinfo mii filename: /lib/modules/2.6.18-92.el5/kernel/drivers/net/mii.ko license: GPL description: MII hardware support library author: Jeff Garzik <jgarzik@pobox.com> srcversion: 16DCEDEE4B5629C222C352D depends: vermagic: 2.6.18-92.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1 # 可以看到這個(gè)模塊的來(lái)源,以及該模塊的簡(jiǎn)易說(shuō)明!(是硬件支持函式庫(kù))范例二:我有一個(gè)模塊名稱(chēng)為 a.ko ,請(qǐng)問(wèn)該模塊的資訊為? [root@www ~]# modinfo a.ko ....(省略)....
事實(shí)上,這個(gè) modinfo 除了可以『查閱在核心內(nèi)的模塊』之外,還可以檢查『某個(gè)模塊文件』, 因此,如果你想要知道某個(gè)文件代表的意義為何,利用 modinfo 加上完整檔名吧! 看看就曉得是啥玩意兒羅! ^_^
核心模塊的加載與移除
好了,如果我想要自行手動(dòng)加載模塊,又該如何是好?有很多方法啦,最簡(jiǎn)單而且建議的,是使用 modprobe 這個(gè)命令來(lái)加載模塊, 這是因?yàn)? modprobe 會(huì)主動(dòng)的去搜尋 modules.dep 的內(nèi)容,先克服了模塊的相依性后, 才決定需要加載的模塊有哪些,很方便。至於 insmod 則完全由使用者自行加載一個(gè)完整檔名的模塊, 并不會(huì)主動(dòng)的分析模塊相依性啊!
[root@www ~]# insmod [/full/path/module_name] [parameters]范例一:請(qǐng)嘗試加載 cifs.ko 這個(gè)『文件系統(tǒng)』模塊 [root@www ~]# insmod /lib/modules/$(uname -r)/kernel/fs/cifs/cifs.ko [root@www ~]# lsmod | grep cifs cifs 212789 0
他立刻就將該模塊加載羅~但是 insmod 后面接的模塊必須要是完整的『檔名』才行!那如何移除這個(gè)模塊呢?
[root@www ~]# rmmod [-fw] module_name 選項(xiàng)與參數(shù): -f :強(qiáng)制將該模塊移除掉,不論是否正被使用; -w :若該模塊正被使用,則 rmmod 會(huì)等待該模塊被使用完畢后,才移除他!范例一:將剛剛加載的 cifs 模塊移除! [root@www ~]# rmmod cifs范例二:請(qǐng)加載 vfat 這個(gè)『文件系統(tǒng)』模塊 [root@www ~]# insmod /lib/modules/$(uname -r)/kernel/fs/vfat/vfat.ko insmod: error inserting '/lib/modules/2.6.18-92.el5/kernel/fs/vfat/vfat.ko': -1 Unknown symbol in module # 無(wú)法加載 vfat 這個(gè)模塊啊!傷腦筋!
使用 insmod 與 rmmod 的問(wèn)題就是,你必須要自行找到模塊的完整檔名才行,而且如同上述范例二的結(jié)果, 萬(wàn)一模塊有相依屬性的問(wèn)題時(shí),你將無(wú)法直接加載或移除該模塊呢!所以近年來(lái)我們都建議 直接使用 modprobe 來(lái)處理模塊加載的問(wèn)題,這個(gè)命令的用法是:
[root@www ~]# modprobe [-lcfr] module_name 選項(xiàng)與參數(shù): -c :列出目前系統(tǒng)所有的模塊!(更詳細(xì)的代號(hào)對(duì)應(yīng)表) -l :列出目前在 /lib/modules/`uname -r`/kernel 當(dāng)中的所有模塊完整檔名; -f :強(qiáng)制加載該模塊; -r :類(lèi)似 rmmod ,就是移除某個(gè)模塊羅~范例一:加載 cifs 模塊 [root@www ~]# modprobe cifs # 很方便吧!不需要知道完整的模塊檔名,這是因?yàn)樵撏暾麢n名已經(jīng)記錄到 # /lib/modules/`uname -r`/modules.dep 當(dāng)中的緣故啊!如果要移除的話: [root@www ~]# modprobe -r cifs
使用 modprobe 真的是要比 insmod 方便很多!因?yàn)樗侵苯尤ニ褜?modules.dep 的紀(jì)錄, 所以羅,當(dāng)然可以克服模塊的相依性問(wèn)題,而且還不需要知道該模塊的詳細(xì)路徑呢! 好方便! ^_^
例題:
嘗試使用 modprobe 加載 vfat 這個(gè)模塊,并且觀察該模塊的相關(guān)模塊是哪個(gè)?
答:
我們使用 modprobe 來(lái)加載,再以 lsmod 來(lái)觀察與 grep 擷取關(guān)鍵字看看:
[root@www ~]# modprobe vfat [root@www ~]# lsmod | grep vfat vfat 15809 0 fat 51165 1 vfat <==原來(lái)就是 fat 這個(gè)模塊啊![root@www ~]# modprobe -r vfat <==測(cè)試完移除此模塊
核心模塊的額外參數(shù)配置: /etc/modprobe.conf
這個(gè)文件我們之前已經(jīng)談過(guò)了,這里只是再?gòu)?qiáng)調(diào)一下而已,如果您想要修改某些模塊的額外參數(shù)配置, 就在這個(gè)文件內(nèi)配置吧!我們假設(shè)一個(gè)案例好了,假設(shè)我的網(wǎng)絡(luò)卡 eth0 是使用 ne , 但是 eth1 同樣也使用 ne ,為了避免同一個(gè)模塊會(huì)導(dǎo)致網(wǎng)絡(luò)卡的錯(cuò)亂, 因此,我可以先找到 eth0 與 eth1 的 I/O 與 IRQ ,假設(shè):
eth0 : I/O (0x300) 且 IRQ=5
eth1 : I/O (0x320) 且 IRQ=7
則:
[root@www ~]# vi /etc/modprobe.conf alias eth0 ne alias eth1 ne options eth0 io=0x300 irq=5 options eth1 io=0x320 irq=7
嘿嘿!如此一來(lái),我的 Linux 就不會(huì)捉錯(cuò)網(wǎng)絡(luò)卡的對(duì)應(yīng)羅!因?yàn)楸晃覐?qiáng)制指定某個(gè) I/O 咯嘛! ^_^
轉(zhuǎn)自: http://vbird.dic.ksu.edu.tw/linux_basic/0510osloader_2.php
總結(jié)
以上是生活随笔為你收集整理的第二十二章 核心与核心模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [原创]破解大众PQ35 46平台CAN
- 下一篇: 把jpg转换成pdf教程