Como faço para inicializar o Linux com um rootfs na RAM?

15

O rootfs é uma imagem do squashfs e meu bootloader está carregando em algum endereço no SDRAM. Quais parâmetros eu preciso passar para o kernel para que ele possa montar o rootfs de lá? O suporte ao Squashfs é embutido e já funciona com

root=/dev/mtdblock2 rootfstype=squashfs  

para iniciar a partir do flash.

EDIT: Este é um dispositivo embutido baseado em MIPS, usando um gerenciador de inicialização personalizado. Normalmente, o bootloader extrai o kernel comprimido do flash para o SDRAM e, em seguida, o kernel monta / dev / mtdblock2 como o rootfs. Eu estou tentando melhorar o bootloader para que ele possa baixar uma imagem para sua RAM e inicializar sem gravar no flash.

Eu não consigo descobrir como fazer o Linux montar uma imagem do sistema de arquivos na RAM como o rootfs.

    
por Atilla Filiz 21.12.2011 / 10:39

3 respostas

9

Eu usaria um initramfs. ( link )

Muitas distribuições Linux usam um initramfs (não confundir com um initrd, elas são diferentes) durante o processo de inicialização, principalmente para poder iniciar programas do 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 de memória RAM. A principal diferença aqui é que, para um initrd, você deve pré-alocar todo o espaço para o sistema de arquivos, mesmo se não for usar todo esse espaço. Então, se você não usa o espaço do sistema de arquivos, você desperdiça memória RAM, o que, em um dispositivo incorporado, geralmente é um recurso escasso. Tmpfs é um sistema de arquivos que fica sem memória RAM, mas usa apenas o mesmo valor que o usado atualmente no sistema de arquivos. Então, se você excluir um arquivo de um tmpfs, esse RAM será liberado imediatamente.

Agora, normalmente, um initramfs é temporário, usado apenas para executar alguns programas extremamente cedo no processo de inicialização. Depois que esses programas são executados, o controle é direcionado 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 ficar sem o initramfs indefinidamente.

    
por 30.06.2012 / 20:13
0

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 :

root=/dev/ram0 rw initrd=0x87000000,8M 
    
por 02.03.2012 / 12:46
0

Eu uso o driver phram para este propósito: 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 você irá queimar no flash real. A mágica necessária na linha de comando do kernel seria algo como

phram.phram=rootfs,0x100000,9Mi root=/dev/mtdblock0 memmap=9M\0000

Note que você também precisa do argumento memmap para se certificar de que o kernel não tente usar essa memória por si mesmo. 9MB é o tamanho do meu rootfs (ou era). O \ before $ é necessário no meu bootloader, pode não estar no seu. O endereço que eu escolhi lá é arbitrário, porque eu não sei como a memória física é colocada no seu dispositivo, então escolha um que faça sentido para você. Eu presumo que você tenha usado tftp ou algo para carregar seus rootfs naquele endereço

  • link descrição da opção de configuração do kernel
  • link Mais detalhes sobre como eu fiz isso para meu dispositivo
por 13.07.2018 / 13:56