¿Puedo usar un chroot en mi máquina de desarrollo para crear una aplicación que se ejecute en una instalación integrada de Linux?

¿Puedo usar un chroot en mi máquina de desarrollo para crear una aplicación que se ejecute en una instalación integrada de Linux?

Estoy intentando desarrollar una aplicación para ejecutarla en una instalación integrada de Linux. Viene con una versión de libc anterior a la que tengo en mi máquina de desarrollo. Si tuviera que crear un entorno chroot en mi máquina de desarrollo, copiara las bibliotecas de mi dispositivo integrado de tal manera que el entorno chroot refleje el dispositivo y luego compilara la aplicación, ¿sería seguro ejecutarla en el dispositivo? Mi máquina de desarrollo y el dispositivo son x86 de 32 bits, por lo que no creo que necesite realizar una compilación cruzada.

Además, si la aplicación que escribo requiere vinculación a bibliotecas adicionales (que no están presentes en el dispositivo), ¿es seguro crear estas bibliotecas en la máquina de desarrollo en el chroot y luego simplemente copiarlas en el dispositivo para la implementación de la aplicación?

De todas las lecturas que he hecho sobre este tema, parece que la única manera de garantizar que todo se vincule correctamente sería crear la aplicación en el dispositivo, pero esta no es una opción ya que es una instalación mínima y no Viene con instalación de gcc.

Respuesta1

Esto generalmente funcionará. Lo intentaría, pero hay algunas cosas que debes tener en cuenta:

  • Al compilar, es necesario crear archivos binarios para la arquitectura de la CPU y las capacidades de su objetivo. Dado que ambos son x86, esto será de gran ayuda, pero aún así debes tener cuidado al usar funciones del procesador como sse3, etc. Si creas un binario que aprovecha las funciones que están ausentes en tu instalación de destino, ganará. No funciona.

  • El kernel de su sistema de compilación podría ejercer cierta influencia sobre el comportamiento de su entorno chroot. No puedes usar un kernel diferente para un chroot y para el sistema host, por lo que puedes encontrar discrepancias entre los dos. Sin embargo, las aplicaciones generalmente se comunican con el kernel a través de libc, que proporciona una interfaz estándar que puede ayudar a prevenir tales problemas.

  • Su libc necesita ser compatible con su kernel, hasta cierto punto. Es posible que la libc de su sistema integrado no sea totalmente compatible con su kernel, dependiendo de los cambios en la interfaz; sin embargo, si la libc es anterior a su kernel, es poco probable que esto sea un problema (es más probable que las interfaces del kernel antiguas se mantengan para admitir binarios antiguos).

  • Los servicios de su sistema host serán visibles para su sistema integrado. Esto es común a cualquier chroot, ya que comparten tablas de procesos, interfaces de red, etc.

  • Para sus 'bibliotecas adicionales', puede utilizar enlaces estáticos para vincularlas a su aplicación. Entonces puede evitar implementar las bibliotecas en el dispositivo. Su experiencia puede ser diferente.

En su lugar, podría considerar utilizar una máquina virtual para hacer esto. No necesariamente eliminará todas las preocupaciones (como características/indicadores del procesador), pero puede tener un entorno que coincida mucho más con su sistema integrado. Es decir, puedes usar el mismo kernel, ejecutar el mismo proceso de arranque, evitar la contaminación por los servicios del host...

Tenga en cuenta que si configura una cadena de herramientas de compilación dentro de su chroot, es posible que desee pensar en cómo copiará los nuevos archivos a su sistema integrado; probablemente no quieras copiar los archivos de la cadena de herramientas (gcc, etc.).

Intente configurarlo y escribir una aplicación de prueba, crear algunas bibliotecas o lo que sea, y ver qué tan bien funcionan cuando se trasladan al sistema integrado.

información relacionada