Considere usar o Buildroot para criar seu sistema de arquivos raiz de destino. Este projeto aproveita a configuração do kernel do Linux e cria o fluxo de trabalho para todo o sistema de arquivos do sistema embarcado.
Estou pensando em projetar um sistema para um projeto usando algum computador de placa única (RaspberryPi, CubieTruck etc) que executa o Linux.
Meu principal requisito é manter a complexidade do cartão SD inicializado ao mínimo - minha visão é algo como:
/
boot.txt
settings.txt # DHCP /ifconfig data etc.
error.log # optional
OS.tar.gz # the OS Omni-file
Kernel.img # If it can't fit with the Omni-file
O SO não precisa modificar seus arquivos, exceto possivelmente por algum log de erros.
Meu melhor palpite até agora é inicializar a partir de um ISO real usando easy2boot , mas o layout não é trivial o suficiente (e parece um bocado para trás).
Existe alguma opção de projeto / inicialização que possa me ajudar a alcançar meu objetivo?
update
Eu descobri dispositivos de loop , que se parecem com o que eu preciso - um FS dentro de um arquivo.
Eu consegui formatar e montar, como:
losetup /dev/loop0 /tmp/disk.img
mkfs -t ext2 /dev/loop0
losetup -d /dev/loop0
mkdir /tmp/disk-mount
mount /tmp/disk.img /tmp/disk-mount -o loop
touch /tmp/disk-mount/bla
umount /tmp/disk-mount
Existe alguma documentação para iniciar a partir de tal dispositivo?
Considere usar o Buildroot para criar seu sistema de arquivos raiz de destino. Este projeto aproveita a configuração do kernel do Linux e cria o fluxo de trabalho para todo o sistema de arquivos do sistema embarcado.
Se eu entendi corretamente, você precisa de uma ferramenta para criar um sistema de arquivos raiz personalizado. Uma das ferramentas com as quais trabalhei é o link no entanto, não sei se configurar o bootloader para rodar no Ri seria uma tarefa fácil.
Além disso, considere que alguns dos arquivos que você definiu no seu exemplo precisariam de alguma forma de daemon para preenchê-los, e que o deamon é um binário localizado em algum lugar na hierarquia do sistema de arquivos.
Então, quando você diz The OS doesn't have to modify its files, except possibly for some error log.
, o aplicativo modificando é provavelmente um deamon de espaço de usuário localizado em algum lugar no rootfs (por exemplo /usr/bin
).
Após sua pergunta secundária ("atualização") sobre o uso do dispositivo de loop: Por mais que eu esteja familiarizado com o fluxo de inicialização, você precisa primeiro inicializar em um ramdisk inicial (initrd) - uma imagem FS raiz mínima embutida na imagem do kernel que contém apenas conteúdo suficiente para montar o FS raiz principal como dispositivo de loop. Depois de montar o FS raiz principal, "chroot" do initrd na imagem raiz completa (loop) montada.
Tags boot arm loop-device linux