ClickCease ¿Qué distribución de Linux es mejor para el desarrollo integrado?

¿Qué distribución de Linux es mejor para el desarrollo integrado?

Joao Correia

1 de diciembre de 2022 - Evangelista técnico

Si su organización despliega soluciones IoT, sabrá que el desarrollo de sistemas embebidos es un poco diferente del desarrollo estándar de escritorio. El bajo coste de Linux resulta atractivo para los desarrolladores de IoT, por lo que suele ser la opción elegida para el desarrollo de sistemas embebidos frente a los costosos kernels propietarios. No es raro que los desarrolladores trabajen con un entorno similar al dispositivo de destino utilizando una máquina virtual, pero el desarrollo en una VM puede resultar incómodo. En su lugar, los desarrolladores pueden trabajar con distribuciones diseñadas específicamente para sistemas embebidos.

Comparado con los sistemas operativos embebidos propietarios, Linux es de bajo coste; permite múltiples proveedores de software, desarrollo y soporte; tiene un núcleo estable; y facilita la capacidad de leer, modificar y redistribuir el código fuente. Por estas y otras razones, Linux se ha convertido en la opción preferida para los sistemas empotrados.

Pero cuando se trata de desplegar Linux en un dispositivo, existen numerosas opciones. Cuando se construye para dispositivos de escritorio y de nivel empresarial, los desarrolladores suelen optar por una distribución como Ubuntu para imitar mejor el entorno de despliegue, con la ayuda adicional de herramientas como VirtualBox y Docker. Sin embargo, esta configuración es un ajuste incómodo para la programación de sistemas embebidos. El entorno de desarrollo es muy diferente, y el resultado de la compilación debe incluir una imagen de software completa para el dispositivo de destino: el kernel, los controladores de dispositivo, las bibliotecas, el software de aplicación e incluso el gestor de arranque.

Al acercarse a las distribuciones Linux para desarrollo embebido, mucha gente empieza con una distribución de escritorio, como Debian o Red Hat, y elimina los componentes innecesarios hasta que la imagen instalada se ajusta al dispositivo de destino. Esta es una forma natural de proceder, ya que muchos desarrolladores de Linux son usuarios de Linux de escritorio, y pueden acceder a su gama habitual de paquetes de tiempo de ejecución. En realidad, una opción es conectar una pantalla y un teclado al dispositivo de destino, y desarrollar directamente así. Sin embargo, este enfoque puede ser complicado. Las distribuciones de escritorio no están pensadas para sistemas con pocos recursos, y añadir y eliminar paquetes manualmente puede ser un trabajo difícil y propenso a errores.

¿Qué es Embedded Linux?

 

La informática del automóvil, los dispositivos médicos, el Internet de las Cosas (IoT) y la automatización de fábricas son solo algunos de los sistemas embebidos que funcionan con Linux embebido. Sabemos que los ordenadores funcionan con un hardware específico (por ejemplo, CPU, memoria, placa base), y los dispositivos de sistemas embebidos también funcionan con microprocesadores y controladores, pero a menor escala. Estos dispositivos necesitan un sistema operativo que utilice menos recursos, y los desarrolladores deben poder desplegarse en el sistema operativo desde sus escritorios.

Linux integrado suele ser la opción elegida por los desarrolladores de IoT debido a su bajo coste, su código de fuente abierta, sus ligeros requisitos de almacenamiento y su capacidad para funcionar con menos recursos. Es una opción estable, lo que resulta crítico para las organizaciones que despliegan sistemas utilizados por varios consumidores. La preocupación por las caídas del sistema operativo es inexistente. Por ejemplo, el sistema operativo Android está basado en Linux y acapara el 87% de la cuota de mercado mundial, y el SO es muy fiable.

¿Es Linux integrado un RTOS?

 

Un sistema operativo en tiempo real (RTOS) propietario puede ser una alternativa atractiva a Linux embebido, pero conlleva sus propias dificultades. Cuando los desarrolladores buscan plataformas y métodos de desarrollo IoT, se encuentran con las opciones de Linux embebido o un RTOS. Existen claras diferencias entre ambos, por lo que hay que elegir con cuidado antes de casarse con uno u otro.

Los RTOS pueden ser más fáciles de usar para los desarrolladores, pero para las aplicaciones empresariales en las que se desea dar soporte a personalizaciones o integrarse con otros proyectos de desarrolladores, Linux embebido proporciona un entorno de integración más intuitivo. Un RTOS está diseñado para aplicaciones sensibles al tiempo. A menos que tengas un sistema que tenga eventos críticos sensibles al tiempo, un sistema Linux embebido proporciona más flexibilidad para los desarrolladores.

¿Cuál es la diferencia entre Linux y Linux integrado?

 

La mayoría de los desarrolladores saben que hay que compilar el código fuente para el sistema de destino. Al desarrollar para sistemas embebidos, los desarrolladores escriben el código en un ordenador de sobremesa pero lo despliegan en otro entorno utilizando cadenas de herramientas multiplataforma. Las implantaciones de sistemas embebidos son muy diferentes a las de los ordenadores de sobremesa. Los ordenadores de sobremesa utilizan arquitecturas de microprocesador 8086, pero los sistemas embebidos pueden utilizar varios microprocesadores, normalmente ARM, 8051, PIC y AVR.

Otras diferencias entre Desktop Linux y Embedded Linux son las siguientes:

  • Los sistemas integrados consumen menos energía y suelen funcionar con pilas.
  • Los sistemas integrados son mucho más compactos.
  • Muchos sistemas empotrados alimentan dispositivos críticos como sistemas de alerta sanitaria, equipos médicos, maquinaria nuclear y seguridad doméstica.
  • Un sistema Linux embebido contiene sólo los componentes necesarios para funcionar en el procesador de destino, en lugar de todos los controladores y bibliotecas posibles para ejecutarse en una miríada de componentes instalados en un ordenador de sobremesa.

¿Qué es un ejemplo de sistema operativo Linux integrado?

 

El núcleo Linux es de código abierto y permite a cualquiera modificarlo y distribuirlo en su forma alterada. En el mercado existen varias versiones de Linux para ordenadores de sobremesa, al igual que varias versiones de Linux para sistemas integrados. Los desarrolladores son libres de trabajar con su propia versión personalizada de Linux, pero es mucho más cómodo trabajar con una versión ya existente y estable.

Ya hemos mencionado el sistema operativo Android. Android es un sistema Linux embebido desarrollado por Google y publicado bajo licencia de código abierto, lo que permite a otros desarrolladores modificarlo y distribuirlo. Debian es un ejemplo de distribución Linux de escritorio que también tiene una versión integrada en los dispositivos Raspberry Pi. Raspberry es el sistema operativo basado en Debian que se utiliza para alimentar el dispositivo informático compacto Raspberry Pi.

¿Por qué se utiliza Linux en un sistema integrado?

 

Los desarrolladores eligen Linux como sistema operativo de destino para sus sistemas embebidos por varias razones. La primera es que Linux es completamente personalizable. Los desarrolladores pueden tomar libremente el núcleo de Linux y crear su propia distribución del sistema operativo o tomar una distribución existente y añadir pequeños cambios que creen su propia versión.

Linux es gratuito, por lo que tiene un bajo coste inicial para los nuevos desarrolladores que sólo quieren explorar y empezar. Cuantos más desarrolladores trabajen con Linux, más probabilidades habrá de que se integre en los sistemas.

Por último, su uso está muy extendido, lo que lo hace más compatible con desarrolladores externos. Si el objetivo es construir un sistema que otros desarrolladores puedan integrar en sus propios proyectos, Linux será más intuitivo.

¿Cómo elegir un sistema operativo Linux integrado?

 

La elección de un sistema operativo Linux embebido depende en gran medida de sus objetivos, las operaciones del dispositivo de destino, el tiempo de comercialización y la capacidad de respuesta requerida. Muchos desarrolladores se decantan simplemente por Android, porque es ampliamente utilizado y comprendido, pero aquí hay algunas preguntas a considerar para ayudarle a elegir el sistema operativo adecuado:

  • ¿La temporización es crítica? Si tiene una aplicación que necesita una temporización precisa, debe utilizar un sistema operativo en tiempo real. Linux no es un RTOS, pero pueden considerarse extensiones como RTLinux.
  • ¿Están limitados el tamaño de la memoria y la potencia de la CPU? Un kernel Linux típico ocupa 1,5 MB, lo que podría ser demasiado grande para algunos sistemas. Se puede utilizar un kernel Linux personalizado con solo los componentes adecuados para la funcionalidad de la aplicación.
  • ¿Es importante el rendimiento de la red? Las aplicaciones móviles que utilizan Android tienen capacidades de red, pero Android no es necesario si la red es el objetivo principal. Una alternativa construida específicamente para el rendimiento de la red es OpenWRT/LEDE.
  • ¿Habrá interfaz gráfica de usuario? La interfaz gráfica de usuario preinstalada de Android podría ser una buena opción para los sistemas que dependen en gran medida de la interfaz de usuario.
  • ¿El plazo de comercialización es corto? Una distribución Linux más común ayudará a reducir el tiempo de desarrollo. Ubuntu se utiliza habitualmente para lanzamientos más rápidos.

¿Qué distribución de Linux es mejor para el desarrollo integrado?

 

Los desarrolladores necesitan un entorno que facilite la escritura de código y la compilación en el sistema operativo de destino. Podrían utilizar una máquina virtual y configurar la distribución de destino, pero es mucho más práctico y cómodo trabajar con herramientas que se instalan en la máquina local y se despliegan multiplataforma. He aquí algunas distribuciones Linux excelentes para el desarrollo embebido:

 

Yocto 

 

yoctoproject-logo-ffd39db2

Una opción muy popular de distribución Linux para sistemas embebidos es Yocto, también conocida como Openembedded. Yocto cuenta con el apoyo de un ejército de entusiastas del código abierto, algunos grandes defensores de la tecnología y muchos fabricantes de semiconductores y placas. La compilación de un proyecto Yocto incluye los binarios de tiempo de ejecución, la alimentación de paquetes y el SDK de destino. Se amplía fácilmente mediante capas, que añaden funcionalidad y características. La arquitectura modular de Yocto lo hace muy flexible, y proporciona una prioridad de capa bien definida y capacidad de anulación. Aparecen nuevas versiones cada seis meses y la documentación es siempre exhaustiva.* Quizás el único inconveniente de Yocto es que puede resultar complicado de manejar para los novatos.

 

Buildroot 

 

buildroot

Buildroot pretende ser una versión más ligera de Yocto. Buildroot no soporta la gestión de paquetes on-target, y deshabilita todas las opciones de compilación para todos los paquetes. No puedes instalar nuevos paquetes en un sistema en ejecución. Esto deja un sistema pequeño; tan pequeño que mucha gente llama a Buildroot simplemente un generador de firmware (ya que las imágenes son en su mayoría fijas en tiempo de compilación). La construcción de un proyecto Buildroot envuelve la imagen del sistema de archivos raíz y cualquier otro archivo auxiliar necesario para desplegar Linux; el kernel, el cargador de arranque y los módulos del kernel; y la cadena de herramientas utilizada para construir todos los binarios de destino. La principal ventaja de Buildroot es que es bastante fácil de aprender, especialmente porque utiliza Makefiles normales y el lenguaje Kconfig. El principal inconveniente es que la naturaleza mínima de Buildroot dificulta la personalización.

 

OpenWRT/LEDE 

 

fusionar.svg

OpenWRT/LEDE tiene como objetivo producir imágenes binarias para repositorios de paquetes accesibles desde la red. Se utiliza principalmente para firmware personalizado para routers de consumo. Si necesitas un firmware de reemplazo para un dispositivo comercial, especialmente si tu diseño integrado se centra en las redes, OpenWRT/LEDE debería ser tu opción. Sin embargo, impone decisiones políticas significativas e inflexibles en su diseño. Si necesitas una personalización significativa, te recomendamos Buildroot o Yocto.

* Más información sobre las prestaciones: https://www.embitel.com/blog/embedded-blog/why-yocto-is-a-framework-of-choice-for-creation-of-embedded-linux-distributions

¿Cómo aplicar actualizaciones de seguridad a los sistemas integrados (y por qué)?

 

Actualizar sus aplicaciones en sistemas embebidos es complicado. Un parche incorrecto puede hacer que sus clientes se queden sin batería. Las actualizaciones inseguras pueden poner en peligro el dispositivo. Podría confiar en que los usuarios parcheen manualmente el firmware, pero los usuarios rara vez se toman el tiempo o incluso saben que las actualizaciones son importantes. Esto también pone en peligro el sistema. Por ejemplo, los dispositivos IoT sin parches fueron responsables de uno de los mayores ataques de denegación de servicio distribuido (DDoS). De hecho, los ataques Io T han aumentado un 300% en 2019. Está claro que los parches y las actualizaciones son fundamentales para la seguridad del dispositivo y sus usuarios.

Las comunicaciones deben estar siempre cifradas a través de la red, y debe utilizarse una firma digital para garantizar que un atacante no modifique los archivos de los parches. Las comunicaciones cifradas y las firmas digitales detienen los ataques de intermediario y evitan la manipulación. El flujo de trabajo general para desplegar actualizaciones de software es el siguiente:

 

  1. Utilizando un canal seguro, sondear un sistema central para determinar si hay una actualización disponible.
  2. Asegúrese de que la actualización actual es compatible con la versión instalada.
  3. Descargue el parche utilizando un canal seguro para evitar un ataque de intermediario.
  4. Validar que el archivo no está dañado mediante una comprobación de integridad (por ejemplo, suma de comprobación).
  5. Compruebe que la firma digital es válida.
  6. Descifra el archivo.
  7. Extrae todos los archivos comprimidos.
  8. Realice cualquier acción previa a la instalación, como crear copias de seguridad para una reversión.
  9. Instale el parche.
  10. Realice cualquier acción posterior a la instalación, como la limpieza de los archivos de instalación.
  11. Compruebe que la instalación se ha realizado correctamente y, en caso contrario, realice una reversión.

¿Cómo aplicar actualizaciones de seguridad a sistemas integrados sin reiniciar?

 

El flujo de trabajo anterior es estándar para las actualizaciones, pero la mayoría de los parches requieren reiniciar el sistema. Reiniciar un dispositivo interrumpe al usuario y podría cortar sistemas críticos. Por ejemplo, reiniciar un router principal podría provocar graves interrupciones y corrupción de datos en una red empresarial.

En lugar de forzar un reinicio, se puede realizar livepatching. Livepatching resuelve varios problemas con las actualizaciones de los sistemas integrados. Elimina la necesidad de reiniciar y, posiblemente, de bloquear un dispositivo debido a actualizaciones fallidas. Los desarrolladores ya no necesitan crear un servicio de parcheo personalizado para Linux embebido, ni depender de que los usuarios actualicen manualmente las aplicaciones.

Hay tres formas principales de actualizar Linux sin reiniciar: usando la línea de comandos, usando la herramienta kexec , o usando una solución livepatch. Las tres, incluidas las soluciones de terceros y los pasos para parchear, se tratan en esta entrada del blog.

 

Conclusión

 

Para cualquier desarrollador que busque un entorno en sistemas embebidos, Linux es una opción popular con varias soluciones, plataformas, distribuciones y herramientas disponibles. El sistema operativo que elijas determinará muchas de las opciones de tu entorno, pero una cosa está clara: siempre necesitas una forma de parchear y actualizar tus dispositivos. Para evitar que los dispositivos de los clientes se bloqueen y mantenerlos actualizados, la mejor solución es la aplicación de parches en tiempo real. La aplicación de parches en vivo mantiene seguros los sistemas de sus consumidores, al tiempo que les ofrece la flexibilidad de reiniciar cuando lo consideren oportuno.

Obtenga una prueba GRATUITA de 7 días con soporte de KernelCare 

Resumen
Nombre del artículo
¿Qué distribución de Linux es mejor para el desarrollo integrado?
Autor
Nombre del editor
TuxCare
Logotipo de la editorial

¿Está listo para modernizar su enfoque de aplicación de parches de vulnerabilidad con la aplicación de parches automatizada y no disruptiva de KernelCare Enterprise? Programe una charla con uno de nuestros expertos en seguridad Linux.

Hable con un experto

Conviértete en escritor invitado de TuxCare

Empezar

Correo

Únete a

4,500

Profesionales de Linux y código abierto

Suscríbase a
nuestro boletín