Я начал читать книгу Essential Linux Device Drivers. Я следую процессу компиляции и загрузки нового ядра. Однако я не могу загрузиться в недавно скомпилированное ядро - я выбираю новое ядро в grub и затем ... ничего ... экран просто остается прежним.
Вот шаги, которые я предпринимаю, как описано в книге (я использую ядро 2.6.24, поскольку именно на нем основана книга):
cd /usr/src/linux-2.6.24 # the base dir of the kernel I downloaded
make clean
cp arch/x86/configs/i386_defconfig .config
make bzImage
cp arch/x86/boot/bzImage /boot/vmlinuz
В книге говорится, что:
Вам может потребоваться предупредить ваш загрузчик о прибытии нового образа загрузки. Если вы используете загрузчик GRUB, он определяет это автоматически.
Ну, в моем случае он не определился автоматически, так как не было возможности выбрать это ядро в GRUB. Поэтому я сделал это вручную, введя update-grub в терминале. И это тоже не сработало. Однако, как только я изменил имя файла с vmlinuz на vmlinuz-2.6.24 и ввел update-grub, он его подхватил. Так что на странице 11 книги, похоже, уже упущено несколько вещей.
В книге говорится, что затем необходимо перезагрузить машину.
В любом случае, теперь я могу выбрать это ядро в GRUB, но, как я уже сказал выше, оно не загружается должным образом, экран просто гаснет и больше не меняется. Так что я что-то упускаю? Я точно следовал инструкциям в книге. Я потратил 50 евро на эту книгу, и теперь не могу продвинуться дальше 11-й страницы из-за этой проблемы.
Я так понимаю, что тот факт, что я использую Ubuntu на VirtualBox, не является проблемой? Я просто захожу в grub во время загрузки виртуальной машины Ubuntu, а затем выбираю только что скомпилированное ядро, не вижу, как это может быть проблемой.
решение1
В Ubuntu есть скрипт, импортированный из Debian, который выполняет установку за вас. После компиляции ядра просто запустите его, sudo make modules_install install
и ваше ядро будет установлено правильно.
Более позднее редактирование:Здесьэто скрипт, который используют Ubuntu и Debian. Он автоматически вызывается Makefile ядра, когда вы вводите вышеуказанные команды установки и выполняет установку, специфичную для дистрибутива.
решение2
Ваш файл grub.conf должен иметь запись, похожую на эту
title My Linux Kernel
root (hd0,0)
kernel /boot/gentoo-kernel root=/dev/sda1
Ваше ядро Ubuntu может иметь что-то вроде
initrd /boot/initrd.img
Вам это не нужно при компиляции ядра на вашем оборудовании. Это может быть причиной вашей проблемы.
Вы должны прокомментировать мне свой файл grub.conf, и я его посмотрю. В противном случае проблема может быть в вашей конфигурации.
Старое ядро также может не иметь драйверов, необходимых для нового оборудования.
Более новая система Ubuntu не сможет вернуться к старой версии ядра без кучи проблем.
вы можете попробовать более старую версию Ubuntu, которая работает на версии, близкой к этой версии ядра, или новейшую версию ядра с kernel.org.
решение3
Каждый дистрибутив Linux имеет свой собственный механизм и политику развертывания пакетов. То же самое касается ядра. Большинство дистрибутивов скрывают процесс компиляции своими инструментами, которые в основном предоставляют бинарные пакеты.
Если вы хотите скомпилировать собственное ядро для определенного дистрибутива Linux, вам необходимо следовать этому руководству по дистрибутиву, чтобы узнать, как сделать это по-своему, не нарушая работу вашей системы.
У Ubuntu свой особый подход, то же самое и у Achlinux, и у Redhat, и у Gentoo.
Итак, для Ubuntu следуйте документации здесьhttps://wiki.ubuntu.com/Kernel/BuildYourOwnKernel