Não sei o que você está fazendo agora com a sua "partição do sistema de arquivos". Mas você pode colocar um initrd no seu armazenamento não-volátil que se parece com a RAM, e depois fazer com que o seu bootloader diga ao Linux para usar o initrd.
A maioria dos initrds faz alguma configuração e então tenta montar novamente um sistema de arquivos raiz em um dispositivo de bloco. No seu caso, o seu initrd seria o seu verdadeiro sistema de arquivos raiz e você precisaria estar colocando utilitários como shells, etc. no initrd.
Ao inicializar o ARM usando o U-Boot, basicamente os comandos boot carregam o kernel e initrd de um dispositivo de armazenamento em um local fixo de RAM, e o endereço do initrd é passado para o kernel como um parâmetro de linha de comando, especificando o endereço.
Bem, o driver MTD pode pegar uma seção de RAM (há uma opção "Physical System RAM" no driver MTD em make menuconfig
) e transformá-lo em um dispositivo de bloco, se você realmente precisar de um dispositivo de bloco legível / gravável . Ele pode ser usado para montar a RAM da placa de vídeo como uma pequena partição de troca, por exemplo. Veja isto .
Acho que o comando para fazer isso seria modprobe phram phram=0x00100000;256MiB
, se você tiver um sistema de arquivos de 256MByte no local de memória 0x00100000. Então modprobe mtdblock
, que então faz /dev/mtdblock0
. Você pode então fazer coisas como mount /dev/mtdblock0
e tal. Então, você precisaria de um script pequeno em um initrd que faça o acima, em seguida, fsck /dev/mtdblock0
e, em seguida, inicia seu init
ou qualquer que seja seu processo 1.
Você pode até mesmo ser capaz de especificar tudo isso na linha de comando do kernel de alguma forma, mas não tenho certeza se isso é suportado. Você pode querer usar um initrd pequeno mesmo assim para ser flexível.