Qual é o esquema de nomenclatura das partições MTD listadas no log de inicialização a seguir?
5 cmdlinepart partitions found on MTD device phys_mapped_flash
Creating 5 MTD partitions on "phys_mapped_flash":
0x00000000-0x00080000 : "bootloader"
0x00080000-0x00680000 : "kernel"
0x00680000-0x01680000 : "rootfs"
0x01680000-0x01780000 : "data"
0x01780000-0x017a0000 : "bootload-env"
Em particular, estou perguntando qual esquema de nomenclatura usar para especificar a partição "rootfs" no prompt do U-Boot como um argumento para o comando:
setenv bootargs 'root= ???????'
IMO, preciso especificar o root= porque o log de inicialização mostra que o kernel não sabe qual é o dispositivo raiz.
VFS: Cannot open root device "<NULL>" or unknown-block(0,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
...e também o log de inicialização mostra:
Kernel command line: bootoctlinux 0x2a00200 mtdparts=phys_mapped_flash:512k(bootloader)ro,6M(kernel),16M(rootfs),1024k(data),128k(bootload-env) console=ttyS0,115200
BTW: O sistema de arquivos raiz é armazenado em uma seção incorporada (.init.ramfs) do arquivo ELF do kernel (vmlinux64) como um arquivo cpio compactado e o log de inicialização indica que ele foi carregado na RAM com sucesso:
Loading .init.ramfs @ 0xffffffff806ac000 (0x185ac7 bytes)
Isso está em um sistema embarcado com 32 MB de armazenamento flash somente ( kernel Linux v2.6.21.7 ( Distro: Cavium-Octeon for MIPS64 ) ).
U-Boot 1.1.1 (compilação de desenvolvimento, svnversion: 176)
EDIT:
Algumas pessoas dizem que é MTD1, alguns que MTD2 alguns /dev/MTD1, alguns /dev/mtd1, alguns que é MTDblock1, alguns mtdblock1, alguns mtdblock2, alguns ubi.mtdblock1, alguns ubi:mtdblock1, (por que os dois pontos ?) etc...
Qual é a verdade? Como ele pode ser descoberto apenas no prompt do U-Boot ou no log de inicialização?
root=/dev/mtdblock3
ou algumas opções de UBI. Você não notou que os conselhos diferentes são para sistemas de arquivos diferentes :-). Não sei se/dev/mtd3
é usado para qualquer sistema de arquivos em árvore.Se o sistema de arquivos raiz for uma instância somente leitura de um sistema de arquivos baseado em bloco (não compatível com mtd), use
/dev/mtdblock3
.Se o sistema de arquivos raiz for uma instância do JFFS2, use
/dev/mtdblock3
. Veja https://www.denx.de/wiki/DULG/RootFileSystemOnAJFFS2FileSystem Em geral e para alguns exemplos de outros sistemas de arquivos, você pode conferir http://www.denx.de/wiki/publish/DULG/DULG-enbw_cmc. html#Section_9.5. (mas esta seção não menciona UBI).Se rootfs usa UBI, use algumas opções de UBI. Você não mostrou nenhum detalhe sobre o UBI - deve haver algumas mensagens de inicialização do kernel sobre dispositivos/volumes UBI, antes que você possa
root=
trabalhar com qualquer dispositivo/volume UBI. Veja aqui: http://www.linux-mtd.infradead.org/faq/ubifs.html#L_mount_ubifs Dá um exemplo de opções de UBI:ubi.mtd=0 root=ubi0:rootfs rootfstype=ubifs
. Como sua partição mtd é chamada diretamente de "rootfs", espero que não seja UBI.Eu evitaria usar o
root=mtdblock3
formato, pelo menos se você não tiver certeza. A diferença é que pode não ser suportado por alguns initramfs. Considerando que o kernel entende o formatoroot=/dev/mtdblock3
, quando você usa o kernel para montar o sistema de arquivos raiz e não usa um initramfs.