溫故而知新
今天回頭復(fù)習(xí)下模塊的命令使用:
1、模塊手動加載命令:insmod、modprobe
手動加載模塊要求用戶具有root權(quán)限。在開發(fā)過程中,通常使用insmod來加載模塊,并且應(yīng)該給出所加載模塊的路徑,例如:
雖然這種方式比較低級,但它是其他模塊加載方式的基礎(chǔ)。在系統(tǒng)管理和生產(chǎn)系統(tǒng)中常用的模塊加載形式則是modprobe,這種方式更加智能。它會在加載模塊之前解析modules.dep文件,以便先確認(rèn)依賴關(guān)系,然后自動處理依賴關(guān)系:
能否使用modprobe加載模塊,取決于depmod工具是否知道模塊的依賴關(guān)系。
2、depmod工具
在內(nèi)核構(gòu)建過程中運(yùn)行depmod工具可以生成模塊依賴文件,它讀取/lib/modules/<kernel_release>/中的每個(gè)模塊確定它應(yīng)該導(dǎo)出哪些符號以及它需要什么符號,然后將處理的結(jié)果寫入modules.dep以及二進(jìn)制版本modules.dep.bin,它是一種模塊索引。
除此之外,depmod工具還可以從模塊文件中提取出該模塊所支持的硬件設(shè)備和硬件設(shè)備所屬廠商的ID(這些信息是驅(qū)動開發(fā)人員提供給模塊的),并在lib/modules/<kern_release>/modules.alias中生成modules.alias文件(可以將其理解文驅(qū)動程序的索引表,表中標(biāo)明了驅(qū)動程序所支持的設(shè)備有哪些),該文件將設(shè)備映射到其對應(yīng)的驅(qū)動程序。
modules.alias文件將會在處理熱拔插事件時(shí)被modprobe調(diào)用,以確定什么驅(qū)動模塊應(yīng)當(dāng)被加載。
用戶空間的熱插拔代理程序udev用于接收到內(nèi)核發(fā)布的通知(通常是設(shè)備描述符,pid、vid、類、設(shè)備類、設(shè)備子類、接口以及可標(biāo)識設(shè)備的所有信息)。當(dāng)熱拔插守護(hù)進(jìn)程接收到通知后,會調(diào)用modprobe,并傳遞設(shè)備描述信息,接下來,modprobe解析module.alias文件,匹配與之相關(guān)的驅(qū)動程序。在加載模塊之前,modprobe會在module.dep中查找與之有依賴關(guān)系的模塊,在所有的被依賴模塊安裝完成后,再加載指定模塊。
3、配置模塊開機(jī)自啟動,/etc/modules-load.d/<filename>.conf
用于在啟動時(shí)加載一些模塊,人們通常使用:/etc/modules-load.d/modules.conf,當(dāng)然也可以根據(jù)需要?jiǎng)?chuàng)建多個(gè).conf文件。下面是一個(gè)/etc/modules-load.d/mymodules.conf
模塊卸載命令:rmmod、modprobe -r
常用的模塊卸載命令是rmmod,人們更喜歡使用這個(gè)命令來卸載使用insmod加載的模塊,使用該命令時(shí)只需要傳遞模塊名即可,例如:
需要說一下的時(shí),模塊卸載是內(nèi)核的一項(xiàng)可配置的功能,該功能的啟用或者禁止由CONFIG_MODULE_UNLOAD的值確定,沒有這個(gè)選項(xiàng)或者這個(gè)選項(xiàng)配置為“n”就不能卸載任何模塊,以下配置就啟動模塊卸載功能:
倘若用戶需要卸載的模塊還在被使用,則內(nèi)核不會允許該卸載行為的發(fā)生。除非在內(nèi)核配置中進(jìn)行了如下配置:
modprobe -r是一種卸載模塊的高級形式,能夠自動卸載未使用的且與要卸載模塊相關(guān)的被依賴模塊。
若果要查看卸載或者加載模塊,可以使用lsmod進(jìn)行查看。