Como o título indica, estou trabalhando em um aplicativo incorporado simples que lê algumas informações da porta serial e as registra em arquivo, além de exibir um pouco de status no monitor.
Agora estou no estágio em que o log parece estar em execução e estou tentando configurar o sistema e tenho algumas perguntas.
O sistema destina-se a registrar dados em um dispositivo USB FAT32, que pode ser desconectado, reconectado ou substituído a qualquer momento. Qual é o método preferido de montagem automática de qualquer armazenamento em massa USB inserido em um diretório fixo? O pacote usbmount parece quase fazer isso, mas a falta de manutenção torna um pouco cauteloso.
Não posso garantir a fonte de alimentação e executar desligamentos limpos. Felizmente, os únicos arquivos a serem gravados, além das informações internas do sistema operacional, devem ser os logs. Um sistema de arquivos diário para o sistema operacional me salvará de mim mesmo ou devo montar o sistema somente leitura ou mexer em discos RAM?
O sistema de arquivos FAT no pendrive sobreviverá e se recuperará de falta de energia e ejeção repentina? Devo criar um novo arquivo de log cada vez que ele é montado?
Configurei o servidor X para iniciar automaticamente e mexi nos scripts de inicialização automática do LXDE para iniciar a exibição do status e desativar o gerenciador de janelas / protetor de tela. Existem outras dicas para manter uma exibição contínua?
O criador de logs não terá acesso à Ethernet e precisa de um relógio preciso. O módulo RasClock é uma opção adequada?
Desculpe pela postagem longa e várias perguntas semi-relacionadas.
Estou acostumado a lidar com dispositivos embarcados simples para os quais tenho controle total sobre o software, e a tarefa de configurar corretamente um sistema operacional real está me deixando um pouco ansioso. Por outro lado, desconfio que não sou o único (ab-) usando o Pi para esse tipo de aplicativo, por isso espero que as perguntas não sejam muito específicas para minha situação específica.
fonte
Respostas:
O desconectado parte disso é problemática. AFAIK, nenhum sistema de computador em qualquer lugar promete a você o direito de puxar um pendrive sem aviso prévio a qualquer momento, sem problemas em potencial. Então você terá que pensar em como contornar isso.
Mais uma vez, cortar repentinamente a energia (praticamente) de qualquer sistema de computador é arriscado. Ele geralmente acaba tudo bem (que não tenha feito isso um monte de vezes, por acidente, devido à falta de energia, etc?), Mas parece haver uma quantidade incomum de pessoas relatando a corrupção cartão SD com a pi. Portanto, se você quer dizer "Principalmente o sistema não será desligado corretamente", é necessário repensar, porque essa será uma estratégia sem saída. Observe que é possível acionar um desligamento sem um teclado ou conexão de rede. Você também pode usar um método semelhante para desencadear uma desmontagem limpa do pendrive.
Você pode adicionar a
sync
opção/etc/fstab
para restringir o cache, masman mount
observe:Isso inclui cartões SD, embora, desde que você se lembre de testar intermitentemente (e substituir, quando apropriado) sua mídia, possa valer a pena. Isso impactará um pouco o desempenho geral, eu acho.
Portanto, tente evitar puxar o plugue ou o pendrive da melhor forma possível e certamente não crie uma configuração que dependa disso. Por exemplo, não diga a si mesmo ou a outros usuários: "Não há problema em desconectar o pen drive quando quiser", porque não está e você não pode fazê-lo.
Fazer
sync
chamadas apropriadas em seu aplicativo (por exemplo, quando ocioso ou após uma gravação significativa) é uma boa idéia.Depois de ter tudo que você quer instalado e configurado , você pode potencialmente montar o sistema de arquivos raiz só de leitura, se você criar partições separadas para
/var
,/run
e/tmp
e montar os rw; você também pode criar uma partição montada e vincular os diretórios rw a ela.Em um pi raspbian, você não precisa se preocupar
/run
, pois já é tmpfs (RAM);/sys
e/proc
também estão na RAM (mas não os use para nada, exceto para o que eles se destinam). Se o sistema é para uma única finalidade e todos os seus dados vão para o pendrive, esse/var
é o único problema, mas acho que não.fonte
Em uma vida anterior, trabalhei em drivers de dispositivos que liam / escreviam cartões de memória. Eles poderiam ser puxados no meio de qualquer operação, para que nem a energia da bateria ou do capacitor fizesse backup. Com base nas especificações de formatação dos chips, deduzi o comportamento necessário para que o dano mínimo fosse causado pela remoção e inserção "quentes".
Basicamente, o que você precisa fazer é garantir que, se você for cortado no meio da gravação de um bloco de dados (ou se os contatos forem escassos), possa reconhecer o fato. basicamente adicione os dados com um número de bloco (e tamanho, se não for tamanho fixo), e adicione um número de bloco crc e (o mesmo) no final.
A primeira gravação que você faz é no final, com um valor que NÃO é o próximo número de bloco. Dessa forma, se sua gravação não for concluída, haverá uma incompatibilidade de número de bloco e esse bloco de dados será conhecido como lixo. Em seguida, escreva seu bloco de dados com o número do bloco real, seguido pelo comprimento, seguido pelo seu CRC gerado pelo seu algoritmo favorito e o número do bloco real novamente. (O CRC é para proteger contra contatos estranhos que corrompem seus dados).
Quando a energia for restaurada ou o cartão de memória for inserido novamente, aceite apenas blocos sequenciais até o ponto em que os números de seqüência de início e término do bloco não coincidam ou o CRC está incorreto. Remova esse bloco e retome o log.
Isso é coisa de baixo nível. Fazer isso através de um sistema de arquivos é outra história.
O que você realmente precisa é de cópias redundantes do seu FAT e faça uma coisa semelhante em torno da mesa do FAT. O número seqüencial indicará qual é a mais recente e a correspondência frente / verso e o CRC garantirão a integridade.
Já passou da minha hora de dormir, então espero que isso esteja claro o suficiente.
fonte
Quanto ao relógio preciso, existem muitos módulos GPS baratos disponíveis. Difícil de encontrar um relógio mais preciso do que isso.
fonte