Linux incorporado - mecanismo para implantar atualizações de firmware?

5

Estou pensando em desenvolver no projeto Yocto para um projeto Linux embarcado (uma aplicação industrial) e tenho algumas perguntas para aqueles com experiência com Linux embarcado em geral - Yocto experimenta um bônus. Só precisa ter uma ideia do que está sendo feito normalmente nas atualizações de firmware.

Eu tenho alguns requisitos, que são autenticação, protocolo de comunicações seguras, algum tipo de reversão se a atualização falhar. Além disso, se houver uma maneira de liberar gradualmente o patch na frota de dispositivos, isso também seria interessante, já que eu quero evitar dispositivos em blocos no campo.

Como você implanta atualizações / correções para dispositivos de campo hoje - e quanto tempo demorou para desenvolvê-lo? Há outras considerações que me faltam?

    
por uptime000001 24.07.2015 / 20:06

2 respostas

1

Antes de pensar em canais de comunicação seguros e mecanismos de reversão, acho que você deve investir algum tempo nos seguintes assuntos, que serão muito mais importantes a longo prazo:

  • Versionamento: com o tempo, você terá diferentes revisões de sua plataforma incorporada, nem todas com os mesmos recursos. Seu dispositivo precisa ser capaz de verificar se uma atualização recebida é compatível e pode ser aplicada.

  • Planejar caminhos de atualização: você não sabe como seu sistema fica daqui a 5 anos, mas quer que seu sistema hoje seja capaz de acomodar um firmware que você ainda vai desenvolver. Essa atualização pode exigir várias etapas, que devem ser documentadas.

  • Não se esqueça de downgrades: em algum momento, você introduzirá alterações que impossibilitarão o downgrade. Como você quer lidar com eles?

Aqui algumas ideias para os detalhes técnicos:

  • Canal de comunicação segura e de autenticação: Contanto que o seu dispositivo tenha um mecanismo para validar uma atualização recebida, as propriedades exatas do canal de comunicação serão menos importantes. Essa validação precisa verificar se os dados são consistentes e compatíveis .

  • Reversão: Um mecanismo simples pode ser implementado usando duas partições de tamanho igual para manter o sistema operacional inteiro. É uma boa ideia organizar o SO para trabalhar somente leitura e local e dados que podem ser alterados em uma partição separada.

    O bootloader precisa de um sinalizador de inicialização informando qual partição iniciar. Ele sempre tentará inicializar a partir dessa partição primeiro, e voltará para a outra partição se de alguma forma falhar. Esse sinalizador de inicialização pode ser armazenado em qualquer lugar em que o gerenciador de inicialização tenha acesso.

    Para atualizar seu dispositivo, você copia o novo sistema (uma vez que tenha sido validado) para a partição atualmente inativa, altere o boot-flag e reinicialize. Nos scripts de inicialização do seu sistema, você verifica se foi inicializado a partir da partição esperada. Se isso não aconteceu, algo deu errado e você pode tomar as medidas adequadas.

por 30.07.2015 / 11:10
1

Você pode ver o Wiki de Yocto, há uma seção sobre atualização:

link

    
por 01.03.2017 / 13:26