
Estou trabalhando em um dispositivo embarcado com córtex de braço A9. A versão do kernel é 4.16.0 e é gerada pelo buildroot 2018.05. A memória de armazenamento é um mmc com diversas partições. O U-boot lê o uImage em uma partição e inicia o kernel. O sistema de arquivos está incluído na imagem do kernel e é carregado na inicialização em um initramfs (config: BR2_TARGET_ROOTFS_INITRAMFS).
Quero usar um overlayfs para usar uma pasta (no mmc) como um sistema de arquivos 'usuário', montado em /
.
Eu já tentei sobrepor com sucesso /etc
um diretório chamado /data/etc
adicionando estas linhas ao /etc/fstab
:
/dev/mmcblk0p1 /data auto defaults 1 2
overlay /etc overlay x-systemd.requires=/data,lowerdir=/etc,upperdir=/data/etc,workdir=/data/work/etc 0 0
Isso está funcionando, mas a sobreposição é montada depois que o systemd já iniciou seus serviços. Portanto, a configuração da rede, por exemplo, é a do uImage e não a do meu user
sistema de arquivos. Gostaria de montar a sobreposição antes de iniciar o systemd, logo após /
a montagem.
Entendi que na inicialização o sistema cria um primeiro espaço de memória na RAM e depois extrai a imagem cpio nele. Aí /
é montado lá e o sistema lança o primeiro programa: systemd:/sbin/init
com o PID 1. Meu entendimento está correto?
Eu li muitos artigos e sites de perguntas e respostas, mas ainda não entendi onde devo fazer as alterações para executar minha sobreposição no momento da inicialização. Quais são os arquivos que contém a mount /
operação?
Responder1
Esta operação de inicialização está no initramfs. Você precisa adicionar um script ao seu initramfs/scripts
, provavelmente init-bottom
para (re) montar os sistemas de arquivos conforme desejado e, em seguida, gerar um novo pacote initramfs.
O script é executado antes do seu sistema de arquivos init
, no final do init
processo do kernel. A razão pela qual é confuso é porque o código para a configuração não está em nenhum lugar diretamente no sistema de arquivos, mas sim no seu arquivo initramfs.
Responder2
Você precisa descobrir a localização real da sua sobreposição e inseri-la no arquivo
/etc/fstab
da maneira como você o inseriria em um sistema em execução.
Uma advertência: você precisa adicionar o arquivo ao sistema de arquivos de sobreposição buildroot, para que, ao construir o rootfs, o buildroot inclua a tabela do sistema de arquivos modificada.
Por exemplo, vamos supor que você queira sobrepor/dev/mmc0p0sobre/lar, você seguiria estas etapas, usando MYCOMP e MYBOARD como o nome da sua empresa e do seu conselho:
- create a filesystem structure in a seperate directory, as
specified in the buildroot manual chapter 9.1 "Recommended
directory structure", presumably under /tmp/br_ext
- in this directory you add board/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab
and fill it with this information:
placa/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab:
/dev/mmc0p0 /home ext4 defaults 0 1
Então você constrói o sistema de arquivos na árvore buildroot com:
make BR2_EXTERNAL=/tmp/br_ext menuconfig
make
Após reinicializar o novo sistema de arquivos, a sobreposição deverá estar instalada.