O rootfs é uma imagem squashfs e meu carregador de inicialização está carregando em algum endereço no SDRAM. Quais parâmetros eu preciso passar para o kernel para que ele possa montar os rootfs a partir daí? O suporte ao Squashfs é incorporado e já funciona com
root=/dev/mtdblock2 rootfstype=squashfs
para inicializar a partir do flash.
EDIT: Este é um dispositivo incorporado baseado em MIPS, usando um gerenciador de inicialização personalizado. Normalmente, o carregador de inicialização extrai o kernel compactado do flash para a SDRAM e, em seguida, monta / dev / mtdblock2 como rootfs. Estou tentando melhorar o gerenciador de inicialização para que ele possa baixar uma imagem em sua RAM e inicializar sem gravar no flash.
Não consigo descobrir como fazer o Linux montar uma imagem do sistema de arquivos na RAM como rootfs.
Respostas:
Eu usaria um initramfs. ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )
Muitas distribuições Linux usam um initramfs (para não serem confundidas com um initrd, elas são diferentes) durante o processo de inicialização, principalmente para poder iniciar programas no espaço do usuário muito cedo no processo de inicialização. No entanto, você pode usá-lo para o que quiser.
O benefício de um initramfs sobre um initrd é que um initramfs usa um sistema de arquivos tmpfs enquanto um initrd usa um dispositivo de bloco ram. A principal diferença aqui é que, para um initrd, você deve pré-alocar todo o espaço do sistema de arquivos, mesmo que não utilize todo esse espaço. Portanto, se você não usar o espaço do sistema de arquivos, desperdiçar memória RAM, que em um dispositivo incorporado, geralmente é um recurso escasso. O Tmpfs é um sistema de arquivos que fica sem RAM, mas usa apenas o máximo de RAM atualmente em uso no sistema de arquivos. Portanto, se você excluir um arquivo de um tmpfs, essa ram será liberada imediatamente.
Agora, normalmente, o initramfs é temporário, usado apenas para executar alguns programas extremamente precocemente no processo de inicialização. Após a execução desses programas, o controle é transferido para o sistema de arquivos real em execução em um disco físico. No entanto, você não precisa fazer isso. Não há nada que o impeça de executar o initramfs indefinidamente.
fonte
As opções rd_start e rd_size são suficientes?
Parece que a porta ARM pode ter uma sintaxe para a opção initrd :
fonte
Eu uso o
phram
driver para esse fim: ele emula um dispositivo MTD usando memória física, o que significa que você pode usar exatamente a mesma imagem rootfs para teste / desenvolvimento que posteriormente será gravada no flash real. A mágica necessária na linha de comando do kernel seria algo comoObserve que você também precisa do
memmap
argumento para garantir que o kernel não tente usar essa memória por si só. 9MB é o tamanho dos meus rootfs (ou era). O \ before $ é necessário no meu carregador de inicialização, pode não estar no seu. O endereço que eu escolhi lá é arbitrário, porque não sei como a memória física é distribuída no seu dispositivo, então escolha um que faça sentido para você. Eu suponho que você já usou tftp ou algo para carregar seus rootfs nesse endereçofonte