Falha inicializando meu kernel personalizado

1

Eu compilei e instalei um kernel Linux customizado usando o Debian kernel-package. Tudo correu bem: arquivos .deb foram criados e custom vmlinuz e initrd.img foram criados em / boot e /boot/grub/menu.lst foram modificados automaticamente. Mas depois que eu inicializo no kernel personalizado, eis o que acontece:

Depois de algum progresso, escreve o seguinte:

Begin: Waiting for root file system

e aguarda um pouco. E então imprime isso:

Gave up waiting for root device. Common problems:
    - Boot args (cat /proc/cmdline)
        - Check root delay= (did the system wait long enough?)
        - Check root= (did the system wait for the right device?)
    - Missing modules (cat /proc/modules; ls /dev)

ALERT! doesn't exist. Dropping to a shell!

/bin/sh
(initramfs)

e pula para shell na RAM. Quando eu tentei mount /dev/hda6 /tmp/hda6 , realmente não há hda6. hda6 é a partição que executa meu Debian e inclui o initrd.img personalizado.

Por favor me ajude, pessoal!

    
por Hennes 22.11.2009 / 16:42

2 respostas

3

Esse problema ocorre quando a linha root= nas opções de inicialização do kernel não corresponde ao hardware.

Provavelmente, seu novo kernel não está fornecendo ao dispositivo de inicialização o nó /dev/hda do dispositivo. Existem algumas possibilidades.

  1. Pode ser que seu dispositivo agora seja /dev/hdb ou algo assim.

  2. Pode ser que o seu kernel agora esteja usando um driver mais recente para o dispositivo, e seu dispositivo de inicialização é agora /dev/sda ou algo assim. Os dispositivos /dev/hd{a..z} usam o driver PATA mais antigo. Isso se tornou predominante para dispositivos SATA, mas interfaces PATA mais antigas também podem ser acessadas dessa maneira. (O Ubuntu, por exemplo, usa isso por padrão, exceto para unidades ópticas PATA.)

A maneira mais fácil de consertá-lo é inicializar o kernel, esperar que ele seja enviado para um shell e verificar /dev/disk/by-uuid ou /dev/disk/by-label para descobrir o dispositivo correto. Então você pode montar o dispositivo, corrigir o argumento root= em sua configuração do Grub e reinicializar.

Considere usar um rótulo de UUID ou de partição no seu argumento root= em vez de um dispositivo específico; Desta forma, as mudanças no driver do kernel que renomeiam seu dispositivo não afetarão a inicialização. Você pode encontrar UUIDs e rótulos com tune2fs -l <device> e pode adicionar um rótulo com sudo tune2fs -L <label> <device> .

Aqui está o argumento root= em cada sentido (note que não há aspas):

root=/dev/sda6
root=UUID=94b1e7d5-9fc5-4f44-b5b1-c776afc808d4
root=LABEL=debian-root-volume-label
    
por 22.11.2009 / 17:14
1

A primeira coisa que você precisa verificar é se seu kernel reconhece seu hardware.

  • Primeiro, verifique o tipo do seu disco rígido e verifique se ele está ativado na configuração do kernel. Esta é provavelmente a causa do seu problema.
  • Eu não me lembro se existe um programa dmesg incluído no initramfs padrão do Debian, mas você pode verificar a saída do debug do seu kernel digitando dmesg | less . Em seguida, tente encontrar linhas relacionadas ao seu disco rígido. Além disso, é útil conhecer o fornecedor ou pelo menos a interface da unidade.
  • Por fim, você pode remover a opção de inicialização quiet da linha de comando do kernel, se houver, e simplesmente percorrer a saída de depuração com as teclas Shift + PgUp / PgDn pesquisando as mesmas informações do parágrafo anterior.

Além disso, provavelmente será uma boa idéia fornecer algumas informações sobre o disco rígido em questões relacionadas ao HD.

    
por 20.01.2010 / 16:29