Por que inicializar a partir do cartão SD com o resultado do meu kernel personalizado em “VFS: Não é possível abrir o dispositivo raiz”?

1

Estou usando uma placa embarcada ARM9 SAM9G25. Eu quero arrancar a partir do cartão SD.

Quando eu construo um kernel Linux com um rootfs integrado (initramfs) ele é inicializado.

Eu quero separar o kernel do rootfs e gerou um rootfs.squashfs.

A linha de comando do kernel é:

console=ttyAT0,115200 root=/dev/mmcblk0 ro rootfstype=squashfs

Quando inicializo meu sistema, o seguinte pânico do kernel ocorre:

VFS: Cannot open root device "mmcblk0" or unknown-block(0,0) Please append a correct "root=" boot option; here are the available partitions: Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

Regressão

Acredito que o particionamento não leve à solução, já que a inicialização com as mesmas configurações, mas com um initramfs, é possível.

Ao inicializar com a imagem initramfs $ ls /dev não lista mmcblk ou sdb .

$ dmesg
mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0 timing 0
atmel_mci atmel_mci.0: Atmel MCI controller at 0xf0008000 irq 12, 1 slots 
mmc_host mmc0: card is not present 
mmc1: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0 timing 0 
atmel_mci atmel_mci.1: Atmel MCI controller at 0xf000c000 irq 26, 1 slots
mmc_host mmc1: card is not present

(Sim o cartão está no slot;)

Então, o que eu acho que acontece agora é que o U-Boot pode ler o dispositivo SD, mas o kernel não. Como um initramfs é inicializável, um único kernel pode ser carregado também, mas o rootfs, aberto do kernel, não pode ser encontrado. Em make linux menuconfig já ativei

Device Drivers

  • <*> MMC/SD/SDIO card support

    • <*> MMC block device driver
    • <*> MMC host test driver
    • <*> Atmel SD/MMC Driver (Atmel Multimedia Card Interface support)
    • [ * ] Atmel MCI DMA support (Exp.)
    • Secure Digital Host Controller Interface support

mas ainda com essa configuração, parece que ele não pode usar o dispositivo SD.

Estou um pouco sem noção a essa altura, alguém pode me dar uma dica?

    
por user3085931 12.02.2014 / 12:52

3 respostas

0

Descobri que o driver usa pinos diferentes (no arquivo de cabeçalho da placa, dos drivers de dispositivo) do que o hardware real do dispositivo SD. Obrigado pela sua ajuda, achei que era um erro mais genérico

    
por 19.05.2014 / 08:11
1

Inicialize seu sistema usando o kernel de trabalho conhecido e o initramfs e, em seguida, faça um lsmod para ver quais módulos são carregados. Eu apostaria que uma delas é algo que precisa e que não está embutido no seu kernel. Eu sei que você pode passar opções de linha de comando para módulos quando insmod ing - talvez haja alguma opção de linha de comando que o initramfs passa que você não está passando da linha de comando do kernel.

Verifique também se o suporte ao squashfs também está embutido no seu kernel.

    
por 12.02.2014 / 13:34
0

Deve ser ..

console=ttyAT0,115200 root=/dev/mmcblk0<partition number of rootfs> ro rootfstype=squashfs
    
por 16.05.2014 / 17:31