在編譯核心後,make install 時可能遇到“ERROR: modinfo: could not find module XXX”的問題;命令列中操作看到的內容如下:
代碼如下 |
複製代碼 |
[root@smilejay linux-3.12]# make modules_install .......... INSTALL sound/soundcore.ko INSTALL sound/synth/emux/snd-emux-synth.ko INSTALL sound/synth/snd-util-mem.ko INSTALL sound/usb/snd-usb-audio.ko INSTALL sound/usb/snd-usbmidi-lib.ko INSTALL sound/usb/usx2y/snd-usb-usx2y.ko DEPMOD 3.12.0 [root@smilejay linux-3.12]# make install sh /root/linux-3.12/arch/x86/boot/install.sh 3.12.0 arch/x86/boot/bzImage System.map "/boot" ERROR: modinfo: could not find module power_meter ERROR: modinfo: could not find module nf_conntrack_ipv4 ERROR: modinfo: could not find module nf_defrag_ipv4 ERROR: modinfo: could not find module nf_conntrack_ipv6 ERROR: modinfo: could not find module nf_defrag_ipv6 ERROR: modinfo: could not find module xt_state ERROR: modinfo: could not find module nf_conntrack ERROR: modinfo: could not find module i2c_piix4 ERROR: modinfo: could not find module sg ERROR: modinfo: could not find module ext4 ERROR: modinfo: could not find module mbcache ERROR: modinfo: could not find module jbd2 ERROR: modinfo: could not find module sr_mod ERROR: modinfo: could not find module cdrom ERROR: modinfo: could not find module pata_acpi ERROR: modinfo: could not find module ata_generic ERROR: modinfo: could not find module ata_piix |
原因分析:在make install時,為了讓新核心中不缺少所需module,會先檢查當前系統已經載入了的module(lsmod命令可查看),然後對比新安裝的核心模組,如果新的核心模組中缺少一些module(和當前lsmod命令的輸出做對比),就會報“ERROR: modinfo: could not find module power_meter”這樣的錯誤資訊。
具體來說,缺少相應module而報錯,大致可分為3種情況:
1. 確實是缺少了某個module,其解決方案是:如果報的module對於你來說是有用,檢查編譯kernel時的.config檔案,加上對應的配置(配為=m),重新編譯和安裝modules即可;如果你覺得這個module沒啥用,大可不必管它了。
2. 新編譯的kernel已經將該選項編譯進kernel了(.config中選擇為=Y),從而不需要產生這個module的.ko檔案,系統找不到對應的.ko檔案,但是已經在新核心中了,不必理會這個報錯。例如,上面的“ERROR: modinfo: could not find module ext4”是因為我將EXT4檔案系統模組編譯為built-in了,如下:
代碼如下 |
複製代碼 |
[root@smilejay linux-3.12]# grep EXT4 .config CONFIG_EXT4_FS=y # CONFIG_EXT4_FS_POSIX_ACL is not set # CONFIG_EXT4_FS_SECURITY is not set # CONFIG_EXT4_DEBUG is not set |
3. 模組的名稱變了,用當前系統lsmod命令尋找的模組名稱,在新編譯的核心中找不到module了。只需要檢查確認即可,如這裡的“ERROR: modinfo: could not find module power_meter”就是這種類型,檢查方式如下:
代碼如下 |
複製代碼 |
# 當前系統已經載入了power_meter模組 [root@smilejay ~]# lsmod | grep meter power_meter 9169 1 # 但是kernel 3.12 中該module名稱為 acpi_power_meter,和'lsmod'查到的power_meterb不一致。 [root@smilejay ~]# find /lib/ -name "*power_meter.ko" /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/acpi/power_meter.ko /lib/modules/3.12.0/kernel/drivers/hwmon/acpi_power_meter.ko |
最後,如果那些錯誤判的核心模組,你認為不重要或者都經過上面的分析解決後,你就可以忽略這些錯誤提示了;儘管有這些“ERROR: modinfo: ”錯誤提示,但是kernel還是被正確安裝了的,往下繼續操作使用即可。