Como eu inicializo o [embedded] linux do cartão SD?

6

Eu estou hackeando um sistema Linux embutido em uma placa DM816x evm. Anteriormente, tenho usado TFTP e NFS para carregar meu kernel e sistema de arquivos raiz na placa. Agora estou tentando mudar para carregar tudo de um cartão SD.

Eu tenho meu cartão particionado de tal forma que uBoot e minha imagem do kernel estão em uma partição, e meu rootFS em outra partição. Na inicialização, o Uboot é iniciado corretamente e inicia com êxito o kernel. No entanto, o kernel não consegue montar o sistema de arquivos raiz. Parece que não reconhece nenhum cartão SD (mmc). Dá esta mensagem de erro.

VFS: Cannot open root device "mmcblk0p2" or unknown-block(2,0)
Please append a correct "root=" boot option; here are the available partitions:
1f00             256 mtdblock0  (driver?)
1f01               8 mtdblock1  (driver?)
1f02            2560 mtdblock2  (driver?)
1f03            1272 mtdblock3  (driver?)
1f04            2432 mtdblock4  (driver?)
1f05             128 mtdblock5  (driver?)
1f06            4352 mtdblock6  (driver?)
1f07          204928 mtdblock7  (driver?)
1f08           50304 mtdblock8  (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

Eu sinto que estou sentindo falta de algo fundamental aqui. Por que não reconhece o dispositivo raiz do qual estou tentando carregar?

Aqui está o meu script de inicialização do uBoot que está sendo executado:

setenv bootargs console=ttyO2,115200n8 root=/dev/mmcblk0p2 rw mem=124M earlyprink vram=50M ti816xfb.vram=0:16M,1:16M,2:6M ip=off noinitrd;mmc init;fatload mmc 1 0x80009000 uImage;bootm 0x80009000
    
por Brandon Yates 19.12.2012 / 22:09

2 respostas

5

Vejo que algumas linhas de bootarg de amostra dos EVMs do DM816x têm um rootdelay = 2 até rootdelay = 10. Uma vez que está faltando em seus bootargs, começando na extremidade inferior de 2 pode ser bom ver se você precisa de um pouco de tempo para permitir que o dispositivo mmc fique on-line.

    
por 19.12.2012 / 23:47
2

Sim, o driver do sistema de arquivos raiz deve estar embutido no kernel, não em um módulo. A razão é que os módulos são carregados do sistema de arquivos raiz. Recompilar um kernel não é um problema tão grande. O primeiro par de vezes é complicado, mas definitivamente não é algo que apenas um hacker do kernel possa entender.

    
por 19.12.2012 / 22:36