Два компилятора одной и той же версии ядра: одна загружается, одна не может найти корневое устройство

У меня есть два компилятора той же версии ядра (4.0.5 + gentoo patch). Один ботинок, правильно, но не хватает нескольких флагов CONFIG ядра.

Добавление этих флагов и запуск make all && make install дает мне «неспособность найти корневое устройство / dev / sda4».

У меня есть болотный стандарт /etc/fstab :

 /dev/sda1 /boot ext2 noauto,noatime,discard 0 2 /dev/sda4 / ext4 noatime,discard 0 1 /dev/sda3 none swap sw 0 0 /dev/cdrom /mnt/cdrom auto noauto,ro 0 0 /dev/fd0 /mnt/floppy auto noauto 0 0 

Проверка прекрасного Googles предполагает, что это связано с некоторой конфигурацией в initramfs, которая … интересна (и трудно отлаживать, насколько я могу судить!).

Я использую Grub 1 со следующей конфигурацией:

 title Gentoo Linux 4.0.5 - no docker, has X. root (hd0,0) kernel /boot/vmlinuz-4.0.5-gentoo-x root=/dev/sda4 rootfstype=ext4 initrd /boot/initramfs-genkernel-x86_64-4.0.5-gentoo title Gentoo Linux 4.0.5 - latest build. root (hd0,0) kernel /boot/vmlinuz-4.0.5-gentoo root=/dev/sda4 rootfstype=ext4 initrd /boot/initramfs-genkernel-x86_64-4.0.5-gentoo 

Обратите внимание, что первая запись – это сборка загрузки, а вторая – сборка без загрузки.

Мое подозрение в том, что ядро ​​+ initramfs имеет требование бинарного сопоставления, а новая сборка изменяет бинарные местоположения, в результате чего прошивка может быть выгружена.

Если у кого-то есть ссылки на авторитетную документацию по взаимодействию с ядрами / initramfs / root или авторитетный ответ, который будет оценен.

Edit: потратив некоторое время на изучение этого, получается, что UUID=<uuid> тоже не помогает. Тем не менее, похоже, что при дисфункциональной загрузке в оболочку initramfs демонстрируется, что /dev/sda<1-4> не существует (это то, что я пытаюсь найти). Хммм.

  • Показать записи исключения маршрутизации ядра (FIB)
  • Как скомпилировать Linux-драйвер для Netis WF2190 Wifi-ключа для FriendlyARM mini210s?
  • Загрузка ноутбука очень медленная
  • Как получить доступ к физической памяти из пользовательского пространства?
  • Где я могу найти конфигурацию ядра в каждом дистрибутиве Linux?
  • прослушиватель событий ядра
  • как файл / proc / net / dev заполнен?
  • Что такое zImage, rootfs
  • One Solution collect form web for “Два компилятора одной и той же версии ядра: одна загружается, одна не может найти корневое устройство”

    Кажется, вы используете одни и те же initramf для обоих ядер. Initramfs содержит модули ядра, которые могут потребоваться загрузить оттуда, и в зависимости от различий в конфигурации ядра это может быть или не быть проблемой.

    Как правило, я считаю, что два ядра «совместимы», только если они были созданы в одном исходном дереве, а модули не были перекомпилированы во второй компиляции ядра. Таким образом, включение дополнительного модуля (который не приводит к перекомпиляции существующих модулей) приводит к «совместимому» ядру, тогда как изменение флага CONFIG, из-за которого происходит перекомпилирование существующих модулей, приводит к «несовместимому» ядру. Смешивание модулей между несовместимыми ядрами может быть проблемой. Поэтому вам необходимо сгенерировать новые initramfs для несовместимых изменений конфигурации ядра. Кроме того, наличие двух несовместимых ядер с одной и той же строкой версии, установленной на одном компьютере, может дать вам проблемы, поскольку /lib/modules/<version> будет единственным местом для модулей обоих ядер, но вы можете модули только одного из них есть … Вы можете добавить строку в корневой EXTRAVERSION= Makefile дерева ядра после EXTRAVERSION= чтобы сделать вашу версию версии ядра уникальной.

    Linux и Unix - лучшая ОС в мире.