
Мое ядро продолжает паниковать при подключении к определенной беспроводной сети. Я хотел бы отправить отчет об ошибке, но мое ядро, по-видимому, испорчено. От /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
Я искал [Tt]aint
в /var/log/messages
или dmesg
и не нашел ничего, соответствующего загрузке модуля. Мое ядро — последнее ядро из 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 с обновленным черным списком. Пересборка initrd с dracut
приведет к тому, что модуль в любом случае исчезнет.
решение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, то taint
файл будет содержать только новую строку, которая od
представлена как " 000012
". Вы не можете проверить размер файла, так как все размеры указаны как 4096 байт независимо от их фактического содержимого.
решение4
Проверьте ваш boot-log или проследите за процессом загрузки на ранней стадии (до того, как ваши диски будут смонтированы RW). Это может быть плохой модуль в вашем initrd.
У вас есть DKMS или что-то подобное?