цикл входа в систему после обновления до 4.4.0-116 ядер: графический экран входа в систему-> черный экран-> графический экран входа в систему

Не может войти в систему в настольную среду после apt upgrade && reboot: при вводе пароля мерцания экрана в черный экран и возвращается назад к экрану входа в систему. Вход в систему через терминал (Ctrl+Alt+F1) хорошо работает.

/var/log/Xorg.0.log говорит:

(EE) NVIDIA: Не удалось инициализировать модуль ядра NVIDIA. Посмотрите
(EE) NVIDIA: ядро системы регистрируется для дополнительных сообщений об ошибках и
(EE) NVIDIA: консультируйтесь с README NVIDIA для деталей.
(EE) Никакие устройства обнаруживается.

$ dmesg говорит:

Nvidia: волшебством версии '4.4.0-116-универсальный SMP mod_unload modversions' должен быть '4.4.0-116-универсальный SMP mod_unload modversions retpoline'

Попытка загрузить драйвер Nvidia вручную перестала работать:

$ sudo modprobe nvidia
modprobe: ERROR: could not insert 'nvidia': Exec format error

Похожие страницы: VirtualBox, не запускающийся после обновления ядра

5
задан 25 February 2018 в 13:20

2 ответа

Проблема с gcc версией, которая не поддерживает retpoline (Что такое retpoline и как это работает?). Посмотрите ошибку Ubuntu: 4.4.0-116 Обновление ядра на 2/21 повреждает драйверы Nvidia (на 14,04 и 16.04).

В моем случае, производя чистку ppa:ubuntu-toolchain-r/test для установки значения по умолчанию gcc версия и восстанавливающий с DKMS, модуль Nvidia (путем переустановки 4.4.0-116 ядер) решает проблему. См. инструкции, отправленные @cjjefcoat на средстве отслеживания ошибки.

Значение по умолчанию восстановления gcc путем чистки ppa:ubuntu-toolchain-r/testверсия:

$ sudo apt-get install ppa-purge
$ sudo ppa-purge ppa:ubuntu-toolchain-r/test

версия gcc (на Ubuntu 16.04) с поддержкой retpoline:

$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609

Переустановите ядро:

$ sudo apt-get purge linux-headers-4.4.0-116 linux-headers-4.4.0-116-generic linux-image-4.4.0-116-generic linux-image-extra-4.4.0-116-generic linux-signed-image-4.4.0-116-generic
$ sudo apt-get install linux-generic linux-signed-generic

Проверка модуль Nvidia:

$ modinfo nvidia_xxx -k 4.4.0-116-generic | grep vermagic
vermagic:       4.4.0-116-generic SMP mod_unload modversions retpoline 

замена _xxx с Вашей версией - просто нажимают TAB после modinfo nvidia

retpoline должен быть в выводе.

После этого reboot завершенный успешно.


Если у Вас уже есть совместимая gcc версия, Вы могли бы восстановить использование модуля Nvidia dkms команда, не переустанавливая ядро:

# dkms remove nvidia-xxx/yyy.zzz -k 4.4.0-116-generic
# dkms install nvidia-xxx/yyy.zzz -k 4.4.0-116-generic

Я решил переустановить ядро вместо этого для обновления всех модулей, которые были восстановлены с DKMS использование несправедливости gcc версия.

8
ответ дан 23 November 2019 в 08:54

Я не знаю, просят ли, чтобы Ubuntu была корректным местом для того дерьма, но — поскольку мне нужно новый g++ и все еще периодически ядро обновления — я записал сценарий удара тот (1) чистки ppa:ubuntu-toolchain-r/test, (2) восстанавливает все DKMS-модули для выбранных ядер, (3) установки g++-7 назад — на этот ответ.

Сценарий предоставлен, "как", без гарантий любого вида.
Не используйте его, если Вы не понимаете значение каждой строки.
Это предназначается для того, чтобы сэкономить время при выполнении вещей, которые Вы можете сделать вручную (не для того, чтобы сделать "волшебство", которое Вы не понимаете).

Сценарий:

#!/bin/bash -e

for list in /etc/apt/sources.list.d/ubuntu-toolchain-r*.list; do
    sudo cp -a "$list" "$list.backup"
    echo "Backed up $list to $list.backup"
done
sudo ppa-purge ppa:ubuntu-toolchain-r/test

readarray -t kernels < <(ls -1 /lib/modules)
echo "Kernels: ${kernels[*]}"
for kernel in "${kernels[@]}"; do
    dkms_modules=($(sudo dkms status -k "$kernel" | sed -r 's#^([^,]+), ([^,]+), .*$#\1/\2#'))
    while true; do
        echo
        read -p "Reinstall DKMS-modules (${dkms_modules[*]}) on kernel $kernel? [Y/n] " choice
        if [ "${choice^^}" = N ]; then continue 2; fi
        if [ "${choice^^}" = Y ] || [ -z "$choice" ]; then break; fi
        echo "Expected 'y', 'n' or '', but got '$choice'"
    done
    echo
    for dkms_module in "${dkms_modules[@]}"; do
        sudo dkms remove -k "$kernel" "$dkms_module"
        sudo dkms install -k "$kernel" "$dkms_module"
    done
    echo
    for module in /lib/modules/"$kernel"/updates/dkms/*.ko; do
        vermagic="$(modinfo -F vermagic $module)"
        echo -n "Vermagic for $(basename ${module%.ko}): $vermagic -- "
        fgrep -q retpoline <<<"$vermagic" && echo ok || echo "'retpoline' is missing!!!"
    done
done

for list in /etc/apt/sources.list.d/ubuntu-toolchain-r*.list; do
    sudo mv "$list.backup" "$list"
    echo "Restored $list from $list.backup"
done
sudo apt update
sudo apt install g++-7
sudo apt dist-upgrade
1
ответ дан 23 November 2019 в 08:54

Другие вопросы по тегам:

Похожие вопросы: