Как определить, какой модуль портит ядро?

Как определить, какой модуль портит ядро?

Мое ядро ​​продолжает паниковать при подключении к определенной беспроводной сети. Я хотел бы отправить отчет об ошибке, но мое ядро, по-видимому, испорчено. От /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 или что-то подобное?

Связанный контент