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

У меня есть два компилятора той же версии ядра (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> не существует (это то, что я пытаюсь найти). Хммм.

One Solution collect form web for “Два компилятора одной и той же версии ядра: одна загружается, одна не может найти корневое устройство”

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

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

  • Обновление CentOS командой YUM без удаления предыдущей версии
  • Простой способ initrd для загрузки другого ядра с помощью kexec
  • Как отредактировать grub2 для использования kdump?
  • Ядро Linux работает только с использованием физического адреса
  • Сколько контроля над конкретными файловыми системами над кешем inode VFS и кешем буфера?
  • U-Boot зависает в
  • Ограничить размер кеша буфера в Linux
  • Автоматически включать N последних версий ядра в меню GRUB / GRUB2 при обновлении ядра
  • Как ядро ​​Linux обрабатывает входы / выходы клавиатуры?
  • switch_root с systemd: «Слишком много уровней символических ссылок»
  • Все это файл?
  • Как «раскодировать» сокет домена unix?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.