Existe uma distro do Linux que irá executar facilmente o “estilo incorporado” em um Raspberry Pi? [fechadas]

9

Eu preciso de uma distro Linux que me dê o seguinte:

  • Executar em um Raspberry Pi
  • Pode sobreviver com segurança à perda de energia (como por meio de um sistema de arquivos somente leitura)

Eu consegui encontrar alguma documentação sobre como mudar uma distribuição regular do Linux para o modo somente leitura. Eu estava esperando que houvesse uma distro já construída que foi projetada para rodar em um ambiente embarcado.

Eu não preciso de muitos pacotes ou drivers, apenas o suficiente para ter o Pi trabalhando com USB / Ethernet. Eu não preciso de nenhuma interface GUI nem nada, isso só vai rodar um serviço customizado construído em C.

Alguém sabe de uma distro que se encaixe?

    
por Dan Harper 12.09.2012 / 05:33

7 respostas

3

A maioria dos sistemas embarcados usa um kernel customizado. Uma ferramenta para facilitar isso é o Buildroot , um conjunto de scripts para construir o toolchain GNU gcc, a biblioteca uClibc no lugar do (enorme) GNU libc, o kernel do Linux, BusyBox e outros utilitários / pacotes para o sistema de arquivos raiz de uma placa embarcada. O RaspberryPi é uma placa relativamente nova, então o suporte a ele no Buildroot ainda está em desenvolvimento, mas aparentemente há um projeto , outro projeto e um trabalho individual . Provavelmente haverá mais à medida que a fabricação de RP aumentar e a distribuição melhorar.

Usando o Buildroot, você pode criar um kernel Linux e um sistema de arquivos raiz exatamente como descreveu na sua pergunta. Dependendo da velocidade da sua conexão com a Internet e das capacidades do seu PC de desenvolvimento, você pode ter os binários em 1 a 4 ou mais horas. A desvantagem é que os binários resultantes não são testados nem garantidos o boot & executar. Um console do sistema é obrigatório para depurar a seqüência de inicialização. Veja minha resposta para Como posso acessar meu mini-pc (RaspberryPi / MK802 / Mele A1000 / VIA APC) via ethernet / wifi sem ter Monitor? Mas, dado que o RaspberryPi foi projetado para ser não vinculável , essa desvantagem não deve ser um impedimento para construir seu kernel personalizado e RFS.

Em relação a "sobreviver à perda de energia": A seleção adequada do sistema de arquivos geralmente pode aliviar essa preocupação. A camada de dispositivo MTD mais um sistema de arquivos de registro no diário (por exemplo, jffs2) mostrou-se bastante robusta a partir da experiência. Para proteção quase absoluta, há o initramfs que usa ramfs (não um ramdisk de tamanho fixo) sem alternar para um sistema de arquivos R / W.

Adendo

Uma introdução de 30 slides sobre os recursos do Buildroot é aqui
No final (# 27) há menção de algumas ferramentas semelhantes e alternativas para construir sistemas embarcados.

    
por 12.09.2012 / 08:55
2

TinyCoreLinux é lido apenas por padrão (a persistência é opcional): link

    
por 03.12.2013 / 13:52
1

Tendo um Seastar Dockstar com acesso ao console, eu instalei o Debian squeeze nele. Como ponto de partida para fazê-lo funcionar em root somente leitura, usei este excelente artigo 1 por Jeff Doozan. A estratégia básica envolve a criação de um script que, a cada inicialização, monte os diretórios graváveis necessários como um tmpfs. Eu cito o roteiro de Jeff 2 aqui (parabéns ao Jeff!)

#!/bin/bash
DIRS="/tmp /var/log /var/run /var/lock /var/tmp /var/lib/urandom /var/lib/dhcp /etc/network/run"
for DIR in $DIRS; do
  echo "Mounting $DIR as tmpfs"
  mount -n -t tmpfs tmpfs $DIR
  if [ -d "$DIR-saved" ]; then
    echo "Restoring $DIR-saved to $DIR"
    tar -C "$DIR-saved" -cf - ./ | tar -C "$DIR" -xpf -
  fi
done

echo "nameserver 4.2.2.1" > /var/tmp/resolv.conf
touch /var/lib/dhcp/dhcpd.leases

exec /sbin/init

Salve as linhas acima como um script chamado / sbin / init-ro em seus rootfs alvo e torne-o executável.

chmod 755 /sbin/init-ro

Para usar este script durante a inicialização, você deve preparar o sistema rootfs um pouco (todos citados no script de Jeff 2 (adapte $ROOT à localização real de seus rootfs montados).

# Configure dhcp-client to write resolv.conf to /tmp instead of /etc
sed -i 's/\/etc\/resolv.conf/\/var\/tmp\/resolv.conf/' $ROOT/sbin/dhclient-script > /dev/null 2>&1
rm $ROOT/etc/resolv.conf
ln -s /var/tmp/resolv.conf $ROOT/etc/resolv.conf


# make /etc/network/run/ a symlink to /tmp/network/
rm -rf $ROOT/etc/network/run
ln -s /var/tmp/network $ROOT/etc/network/run


# Fixes from http://wiki.debian.org/ReadonlyRoot

rm $ROOT/etc/blkid.tab  > /dev/null 2>&1
ln -s /dev/null $ROOT/etc/blkid.tab

rm $ROOT/etc/mtab  > /dev/null 2>&1
ln -s /proc/mounts $ROOT/etc/mtab

rm $ROOT/etc/rcS.d/S12udev-mtab

rm -rf $ROOT/var/log/*

Depois de ter o rootfs preparado como acima, você pode montar o rootfs somente leitura em / etc / fstab (substitua ext2 pelo sistema de arquivos que você está usando ou apenas use rootfs ).

/dev/root  /                 ext2  noatime,ro   0 1

Finalmente, você tem que acrescentar o seguinte aos seus parâmetros do kernel (ou seja, /boot/cmdline.txt no Raspi) para executar o script antes do / sbin / init real . (o seguinte é apenas um exemplo dos parâmetros root e rootdelay . a parte importante que deve ser anexada à linha em cmdline.txt é init=/sbin/init-ro .)

root=/dev/mmcblk0p2 rootdelay=2 init=/sbin/init-ro

Mas esteja ciente de que para qualquer software que exija acesso de gravação no rootfs, você precisa montar os locais tmpfs apropriados ou gravar em um armazenamento externo.

    
por 30.12.2012 / 20:06
1

Meus 2 centavos, é muito mais fácil (e melhor, no final) fazer um backup de bateria confiável para um Pi do que viver com um sistema operacional somente de leitura. Claro, isso significa que você precisará de algum conhecimento básico de eletrônica (e eu quero dizer BASIC; estamos falando de 3-4 componentes). Esse cara fez uma fantasia com apenas mais alguns: link

Se você fizer isso, NÃO use o LiPo; NiCad é o que você quer. O LiPo não pode ser constante durante o carregamento; você foi avisado.

Além disso, você parece estar muito preocupado com algo que, na minha experiência, é uma questão muito pequena. Eu lanço minhas caixas de Linux o tempo todo e um desligamento repentino e não programado é uma coisa óbvia quando não posso ser incomodado. Se você desabilitar os logs, raramente receberá reclamações sobre isso.

Para desabilitar todos os logs, você pode adicionar a seguinte linha como a primeira regra em /etc/rsyslog.conf:

*.* ~

Mesmo quando há um problema, 99,9999% do tempo (ou seja, quase todas as vezes em minha experiência pessoal) esse problema é resolvido quando o disco é examinado na próxima vez. Quando isso acontece, depende principalmente do tempo, o sistema operacional percebeu o que você fez (por mais estranho que pareça). Como um Pi usa cartões SD, imagino que isso aconteça ainda menos em um Pi do que no meu PC.

    
por 14.08.2013 / 23:23
1

Se bem me lembro, um sistema de arquivos somente de leitura não "protegerá" o cartão SD. Eu tenho 10 Pi's rodando em um cliente (tempo de atividade atual acima de 80 dias para metade deles) onde o poder não é tão estável quanto você esperaria / iria querer. Levei um tempo para encontrar fontes de alimentação (carregadores baratos com classificação de 3A e carregadores de iPad 'caros' com classificação de 2.3A) que poderiam realmente manter o Pi funcionando por mais de dois dias, antes disso eu tinha todos os tipos de problemas de corrupção SD , inclusive com um que foi usado apenas como somente leitura IIRC.

Meu problema é resolvido principalmente agora (por causa dos novos suprimentos), mas para projetos futuros eu estou olhando para fazer um sistema de arquivos raiz NFS. Existem muitos tutoriais sobre isso já, principalmente resolvendo em torno das imagens Pi fs normais, mas é bastante fácil fazer um debootstrap mínimo e transformá-lo em um sistema de arquivos raiz somente leitura sobre NFS. Combine isso com o uboot para o Pi e um script inteligente do uboot, e seu cartão SD conterá apenas alguns megas de firmware RPi, imagem do uboot e script do uboot.

    
por 05.11.2013 / 12:15
0

Eu ouvi coisas boas sobre o Puppy Linux para isso. Embora eu deva admitir que não tentei isso.

Pode ser definido para não voltar a escrever no cartão SD.

    
por 05.11.2013 / 13:21
-1

Existem quatro imagens disponíveis na página de download do raspberrypi.org :

  • Debian "wheezy"
  • Debian suave "wheezy"
  • Arch Linux ARM
  • QtonPi

E aqui está o único que é somente leitura por padrão (mas que pode ser alterado se necessário):

Espero que um deles atenda às suas necessidades.

    
por 17.09.2012 / 16:50