
當連接到某個無線網路時,我的核心不斷出現恐慌。我想發送錯誤報告,但我的核心顯然被污染了。從/var/log/messages
:
Apr 17 21:28:22 Eiger kernel: [13330.442453] Pid: 4095, comm: kworker/u:1 Tainted: G O 3.8.4-102.fc17.x86_64 #1
和
[root@Eiger ~]# cat /proc/sys/kernel/tainted
4096
我無法找到有關 4096 位元遮罩含義的文檔,但該。如何找出哪個模組污染了內核?G
標誌表示外部 GPL 模組已載入到核心中
我已經 grep for [Tt]aint
in /var/log/messages
ordmesg
並沒有找到與載入模組時相對應的任何內容。我的核心是 Fedora 17 的最新核心:3.8.4-102.fc17.x86_64。
更新: 可能是rts5139
模組的原因。它顯示在lsmod
但modinfo rts5139
會產生ERROR: Module rts5139 not found.
當引導先前的內核 3.8.3-103.fc17.x86_64 時,該模組未列出,lsmod
且內核未受污染(/proc/sys/kernel/taint
為 0)。
我嘗試過將此模組列入黑名單
echo 'blacklist rts5139' >> /etc/modprobe.d/blacklist.conf
但重新啟動仍顯示內核被污染。
答案1
好吧,我不相信標準的 Fedora 核心套件會包含任何會觸發此污點的模組,所以問題是,您還安裝了哪些其他核心模組?
常見的候選者是圖形驅動程式(儘管我認為這些驅動程式主要會設定“專有”位元)和無線驅動程式。
如果您可以在lsmod
輸出中找到您認為可能是候選者的任何內容,請執行modinfo <module-name>
並查看輸出是否包含intree: Y
任何模組,而沒有該模組會觸發您所看到的污點。
更新:rts5139
您看到的lsmod
但似乎不在您的系統上的模組可能位於 initrd 中,並且在安裝主檔案系統之前在引導過程的早期從那裡加載。
這也解釋了為什麼黑名單不起作用,因為您必須使用更新的黑名單重建 initrd。重建 initrddracut
無論如何都會導致模組消失。
答案2
➜ ~ dmesg | grep -i 'taint'
[ 10.029333] vboxdrv: module verification failed: signature and/or required key missing - tainting kernel
[ 10.029364] Disabling lock debugging due to kernel taint
答案3
另一種方法是檢查taint
以下每個模組的檔案/sys/module
:
#!/bin/bash
cat /proc/modules |
while read module rest
do
if [[ $(od -A n /sys/module/$module/taint) != " 000012" ]] ; then
echo $module
fi
done
如果一個模組沒有污點,那麼該taint
檔案將只包含一個換行符,od
表示為「000012
」。您無法檢查檔案大小,因為無論其實際內容如何,大小都列為 4,096 位元組。
答案4
檢查您的啟動日誌或在早期階段(在您的磁碟安裝 RW 之前)觀察您的啟動程序。這可能是您的 initrd 中的一個錯誤模組。
您是否有 DKMS 或類似的東西?