Вопрос или проблема
Я недавно собрал и установил ядро Linux на своем компьютере с Kubuntu. Я скачал исходный .tar.gz с kernel.org, распаковал его и использовал следующие команды (выполняя их в верхнем каталоге исходного пакета) для компиляции и установки:
make oldconfig
make -j4
sudo make modules_install
sudo make install
Однако, когда я перезагрузился, я получил сообщение “Ошибка: нехватка оперативной памяти”, и когда я нажал клавишу для продолжения, на экране появился экран паники ядра с сообщением “не синхронизируется: VFS: Невозможно смонтировать корневую файловую систему на unknown-block(0,0)”.
Мои другие ядра работают нормально, поэтому я все еще могу загружаться как обычно. Но мне любопытно, почему это ядро не работает и что я могу сделать, чтобы оно заработало.
Я пробовал это с несколькими версиями (5.9.12, 5.9.14 и 5.10.2) и получил тот же результат, так что, похоже, точная версия не является проблемой. Но я знаю, что раньше я постоянно компилировал ядра таким образом, и они работали без проблем. Поэтому я попробовал множество вещей и в конце концов понял, что UEFI, похоже, является виновником. Это же ядро будет работать, если я установлю его на системе с наследием. Безопасная загрузка отключена на рассматриваемом (UEFI) ПК, так что я предполагаю, что это не связано с ключами безопасной загрузки. Похоже, это связано с чем-то в UEFI, но не с безопасной загрузкой, что ломает его.
Тем не менее, при поиске в интернете я не смог найти ничего, касающегося загрузки скомпилированного ядра Linux с UEFI. Так есть ли что-то дополнительное, что я должен сделать? Или проблема в чем-то другом?
Правка: Я не понимаю, почему мой вопрос был закрыт. Но на случай, если он требует более подробных пояснений, я спрашиваю следующее: Если я загружу исходный код ядра Linux с kernel.org или код, из которого строятся ядра Ubuntu, отсюда (https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.10.4/) и соберу его с помощью приведенных выше команд, я обнаружу, что он нормально загружается в BIOS, но не в UEFI. Мой вопрос: почему.
sudo update-initramfs должно решить проблему.
Ответ или решение
Компиляция ядра Linux и загрузка с помощью UEFI: Разбор проблем
При компиляции и установке ядра Linux на вашей системе Kubuntu вы столкнулись с проблемами при загрузке через UEFI, что вызывает ошибки «выйди из памяти» и «не удается смонтировать корневую файловую систему». Давайте подробно разберем возможные причины данной проблемы и пути их решения.
Причины проблемы
Когда вы компилируете ядро Linux, надо учитывать различные настройки и конфигурации, которые могут влиять на успешную загрузку в среде UEFI. Основные моменты, которые следует учесть:
-
Проблемы с загрузчиком: UEFI требует, чтобы загрузчик (например, GRUB) был корректно настроен и соответствовал архитектуре системы. Убедитесь, что вы обновили порядок загрузки и что UEFI загрузчик правильно ссылается на новое ядро.
-
Инициализация модулей: При сборке ядра важно убедиться в том, что все необходимые модули поддерживаются и загружаются. Если модуль для вашей файловой системы не загружается, система не сможет несколькими коридоры смонтировать файловую систему.
-
Проблемы с initramfs:
initramfs
— это временная файловая система, которая используется для начальной загрузки. Отсутствие или неправильная настройкаinitramfs
может привести к проблемам при загрузке системы. Убедитесь, что вы обновили его после установки нового ядра:sudo update-initramfs -u
-
Конфигурация ядра: Некоторые опции в конфигурации ядра являются критически важными для UEFI. Например, необходимо убедиться, что включены настройки для поддержки APFS (Advanced Power Management File System), UEFI и вашей файловой системы. Запустите
make menuconfig
для настройки параметров ядра.
Решение проблемы
Вот шаги, которые могут помочь вам решить проблему загрузки вашего компилированного ядра в UEFI:
-
Проверка конфигурации ядра: Убедитесь, что у вас включены необходимые драйверы и модули. Это касается не только поддержки вашей файловой системы, но и любых других устройств, необходимых для загрузки.
-
Обновление initramfs: После каждой сборки и установки нового ядра обязательно обновляйте
initramfs
. Это поможет убедиться, что необходимые модули и драйверы загружены во время первоначальной загрузки:sudo update-initramfs -u
-
Обновление загрузчика GRUB: После установки нового ядра убедитесь, что загрузчик GRUB обновлён. Это поможет GRUB корректно обнаружить новое ядро:
sudo update-grub
-
Проверка параметров UEFI: Убедитесь, что ваш UEFI настроен на загрузку в режиме UEFI, а не в режиме совместимости (Legacy). Возможно, стоит проверить настройки UEFI BIOS, чтобы исключить блокировку загрузки некоторых компонентов.
-
Мониторинг логов: Если проблема сохраняется, изучите логи загрузки системы (
dmesg
,/var/log/syslog
и т.д.) для получения дополнительной информации о том, что происходит в момент загрузки.
Заключение
Неудачная загрузка с компилированным ядром Linux через UEFI может быть связана с множеством факторов, начиная от конфигурации ядра до проблем с инициализацией файловых систем. Выполнение вышеперечисленных шагов должно помочь вам устранить проблему. Если после выполнения всех вышеперечисленных действий система все еще не загружается, возможно, необходимо провести более глубокую диагностику с использованием специализированных инструментов для отслеживания проблем с загрузкой.
Пусть ваш опыт с компиляцией ядра станет положительным путем согласованного анализа и системных улучшений!