Posso usar um chroot na minha máquina dev para construir uma aplicação para rodar na instalação do linux embutido?

5

Estou tentando desenvolver um aplicativo para ser executado em uma instalação Linux incorporada. Ele vem com uma versão mais antiga da libc do que na minha máquina de desenvolvimento. Se eu fosse criar um ambiente chroot na minha máquina de desenvolvimento, copiar as bibliotecas do meu dispositivo embutido de tal forma que o ambiente chroot espelhe o dispositivo e, em seguida, construa o aplicativo, seria seguro para executar no dispositivo? Minha máquina dev e o dispositivo são ambos x86 de 32 bits, então eu não acho que preciso cruzar a compilação.

Além disso, se o aplicativo que eu escrevo precisar de links para bibliotecas adicionais (que não estão presentes no dispositivo), é seguro criar essas bibliotecas na máquina dev no chroot e copiá-las para o dispositivo para a implementação do aplicativo? / p>

De todas as leituras que fiz sobre este assunto, parece que a única maneira que posso garantir que tudo se conecte corretamente seria realmente construir o aplicativo no dispositivo, mas isso não é uma opção, pois é uma instalação mínima e não vem com a instalação do gcc.

    
por mathematician1975 13.07.2012 / 13:00

1 resposta

3

Isso geralmente funcionará. Eu tentaria, mas há algumas coisas que você precisa saber:

  • Ao criar, os binários precisam ser criados para a arquitetura da CPU e os recursos de seu destino. Dado que ambos são x86, isso ajudará muito, mas você ainda precisa ter cuidado ao usar recursos do processador como o sse3, etc. Se você construir um binário que aproveite os recursos que estão ausentes em sua instalação de destino, ele ganhará trabalhe.

  • O kernel do seu sistema de compilação pode exercer alguma influência sobre o comportamento do seu ambiente chrooted. Você não pode usar um kernel diferente para um chroot versus o sistema host, então você pode encontrar discrepâncias entre os dois. Os aplicativos geralmente se comunicam com o kernel via libc, o que fornece uma interface padrão que pode ajudar a evitar tais problemas.

  • Sua libc precisa ser compatível com seu kernel, até certo ponto. A libc do seu sistema embarcado pode não ser totalmente compatível com o seu kernel, dependendo das mudanças na interface; no entanto, se a libc for anterior ao seu kernel, é improvável que isso seja um problema (é mais provável que as interfaces de kernel antigas permaneçam em suporte para suportar binários antigos).

  • Os serviços do seu sistema host estarão visíveis para o seu sistema incorporado. Isso é comum a qualquer chroot, já que eles compartilham tabelas de processo, interfaces de rede, etc.

  • Para suas 'bibliotecas adicionais', você pode usar links estáticos para vinculá-los ao seu aplicativo. Em seguida, você pode evitar a implantação das bibliotecas no dispositivo. Sua milhagem pode variar.

Você pode considerar usar uma máquina virtual para fazer isso. Ele não removerá necessariamente todas as preocupações (como recursos / sinalizadores do processador), mas você pode ter um ambiente que corresponda muito mais ao sistema incorporado. Ou seja, você pode usar o mesmo kernel, executar o mesmo processo de boot, evitar a contaminação pelos serviços do host ...

Esteja ciente de que, se você configurar um conjunto de ferramentas de compilação dentro do seu chroot, poderá pensar em como copiará os novos arquivos de volta para o sistema incorporado; você provavelmente não quer copiar os arquivos toolchain (gcc, etc).

Tente configurá-lo e escrever um aplicativo de teste, criar algumas bibliotecas ou qualquer outra coisa e ver como eles funcionam quando movidos para o sistema incorporado.

    
por 13.07.2012 / 15:16