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
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)
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?
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.
Deve ser ..
console=ttyAT0,115200 root=/dev/mmcblk0<partition number of rootfs> ro rootfstype=squashfs