Duas compilações da mesma versão do kernel: uma é inicializada, uma não é possível localizar o dispositivo root

3

Eu tenho duas compilações da mesma versão do kernel (4.0.5 + patches do gentoo). Um inicializa corretamente, mas não possui vários flags CONFIG do kernel.

Adicionar esses sinalizadores e executar make all && make install me dá um erro "não é possível localizar o dispositivo root / dev / sda4".

Eu tenho um padrão% pântano/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

A inspeção dos finos Googles sugere que isso seja devido a alguma configuração no initramfs, que é ... interessante (e difícil de depurar, até onde eu sei!).

Estou usando o Grub 1 com a seguinte configuração:

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

Observe que a primeira entrada é a compilação de inicialização e a segunda é a compilação que não é de inicialização.

A minha suspeita é que o kernel + initramfs possui um requisito de correspondência binária, e a nova compilação altera os locais binários, fazendo com que o firmware seja descarregável.

Se alguém tiver alguns links para a documentação autoritativa sobre a interação do kernels / initramfs / dispositivo root ou uma resposta autoritativa que seria bem-vinda.

Edit: Passando algum tempo estudando isso, acontece que UUID=<uuid> também não ajuda. No entanto, parece que no boot disfuncional, caindo no shell initramfs demonstra que /dev/sda<1-4> não existe (que é o que eu estou tentando encontrar). Hmmm.

    
por Paul Nathan 18.10.2015 / 05:02

1 resposta

3

Você parece estar usando os mesmos initramfs para ambos os kernels. O initramfs contém módulos do kernel que podem precisar ser carregados a partir daí, e dependendo das diferenças de configuração do kernel, isso pode ou não ser um problema.

Geralmente, considero dois kernels "compatíveis" apenas se forem produzidos na mesma árvore de fontes, e os módulos não foram recompilados na segunda compilação do kernel. Assim, habilitar um módulo adicional (que não resulta na recompilação dos módulos existentes) resulta em um kernel "compatível", ao passo que alterar um sinalizador CONFIG que faz com que os módulos existentes sejam recompilados resulta em um kernel "incompatível". Misturar módulos entre kernels incompatíveis pode ser um problema. Portanto, você precisa gerar um novo initramfs para alterações de configuração de kernel incompatíveis. Além disso, ter dois kernels incompatíveis com a mesma cadeia de versão instalada na mesma máquina ao mesmo tempo pode causar problemas, pois /lib/modules/<version> seria um único local para os módulos de ambos os kernels - mas você pode colocar os módulos de apenas um deles lá ... Você pode adicionar uma string na raiz Makefile da árvore do kernel depois de EXTRAVERSION= para tornar a sua versão do kernel única.

    
por 27.10.2015 / 05:02