Sistema operativo en tiempo real (RTOS): ¿Cómo implemento un núcleo de plataforma cruzada que se dirige tanto a la arquitectura de brazo como a la de imagen?

Interesante, también estoy tratando de lograr el mismo objetivo. Por lo que yo entiendo, tienes que usar la compilación condicional. Puede lograr esto usando una combinación de tres elementos básicos:

  1. Un diseño de software inteligente donde las partes independientes de la arquitectura están aisladas de las partes específicas de la arquitectura.
  2. Compilación condicional usando #define #if #else
  3. Compilación condicional usando selección de archivos en Makefiles

Para decirlo en términos simples, no hay nada teórico complicado en hacer esto, se trata de trabajar mucho para identificar lo que puede hacer en ambas arquitecturas y cómo abstraer sus especificidades. El diseño es la parte importante. Pregúntese:

  • ¿Cuáles son las abstracciones que proporciona el sistema operativo?
  • ¿Qué abstracciones estoy usando para implementar el sistema operativo?
  • ¿Cómo puedo implementarlos para las arquitecturas A, B, …?
  • ¿Qué tienen en común?

Puede intentar construir un diseño genérico / perfecto desde el principio. O puede intentar comenzar con un diseño simple que considere lo suficientemente genérico. Luego intente adaptarlo a una nueva arquitectura, mejorar el diseño, etc. Este es un tipo de proceso iterativo.

Tenga en cuenta que estoy usando ideas de ingeniería de software aquí. Desarrollo ágil contra no ágil. tú decides.

Finalmente, puede echar un vistazo a los sistemas operativos relativamente pequeños que ya lograron ese hito: el sistema operativo de código abierto para Internet de las cosas, el sistema operativo amigable para Internet de las cosas. O, si se siente valiente, puede echar un vistazo a Linux, FreeBSD, Plan9 y el gran NetBSD (su objetivo es exactamente eso, poder ejecutar en la mayor cantidad de plataformas posible)

¡¡¡Buena suerte!!! Siempre es agradable encontrar a otras personas tratando de construir su propio sistema operativo

Ya hay muchas respuestas excelentes aquí, así que el único mensaje que quiero hacer eco es: la abstracción es tu amiga.

Si tiene su propio núcleo personalizado, los siguientes pasos serían segmentar el código en unas pocas capas diferentes: la capa de abstracción de hardware / paquete de soporte de placa, las capas de núcleo (internas) del núcleo y las funciones API de nivel superior.

Escribir un código como este significa que solo debe cambiar el nivel más bajo, el nivel de interfaz de hardware, del kernel para que se ejecute en una nueva plataforma. Teóricamente , si reescribe la capa de interfaz de hardware para una nueva plataforma y se ajusta a las especificaciones de la interfaz de la capa intermedia, debería poder ejecutar el núcleo en la nueva arquitectura sin más cambios de código.

Desde mi punto de vista tiene una respuesta simple,

Simplemente vaya al siguiente enlace y obtendrá su respuesta,

SDCC: compilador de dispositivos pequeños C

Cómo hacerlo: programar PIC utilizando Linux

Espero que estos artículos ayuden,

Aclamaciones…

Debería ver cómo se organiza el kernel de Linux para obtener algunos consejos sobre cómo hacerlo. Debe separar las partes comunes del núcleo de las cosas específicas de la plataforma. Cualquier código que sea específico del ensamblado debe residir bajo x86 o arm, etc. Luego, reescriba los bits de ensamblaje para su arquitectura. El código C debería funcionar porque usará un compilador para esa arquitectura, por ejemplo, gcc-arm en lugar de gcc-x86.

Escribe envoltorios o adaptadores para el código abstracto de hardware específico. Por lo general, esto se llama paquete de soporte de placa (bsp)