El sistema operativo se ejecuta "en el propio SoC": el SoC tiene una CPU que procesa cualquier código que se le indique. El sistema operativo tiene un gestor de arranque y un kernel que se carga en el espacio de direcciones de la CPU y comienza a ejecutarse en la CPU.
Si desea que sus cosas se ejecuten también, necesita escribir su propio cargador de arranque / kernel para ejecutar su código y luego secuenciar la carga del sistema operativo (básicamente como cargar una máquina virtual), o mucho más simplemente aceptar que Los fabricantes de sistemas operativos ya han hecho el arduo trabajo de lograr que su sistema operativo comparta el tiempo de CPU con los programas que se ejecutan en él.
La forma más fácil de hacer esto es hacer que el sistema operativo cargue su código. Se puede hacer con cualquier programa que integre en el sistema operativo, ya sea el software de modo de usuario (por ejemplo, el intérprete de script Python / Ruby) o un controlador de modo de núcleo.
Parece que estás intentando hacer algo de bajo nivel para ayudar al sistema operativo a ejecutarse en el hardware. Ese es el propósito exacto de los controladores: ayudar al código del sistema operativo a interactuar con el hardware del host. Por lo tanto, debe escribir controladores para su hardware que "cualquiera que desee ejecutar cualquier sistema operativo que desee" podrá instalar.
Si lo piensas bien, cualquier hardware que instales en una computadora requiere un controlador (ya sea que se distribuya con el sistema operativo o se instale por separado). Las "personas" están perfectamente acostumbradas a instalar los controladores para el hardware con el que están trabajando (por ejemplo, los controladores de la tarjeta gráfica) o para descargar distribuciones de sistemas operativos específicamente para un hardware determinado (por ejemplo, Raspbian para RasPi). Debe liberar un controlador para instalarlo en el sistema operativo o liberar distribuciones específicamente para su hardware.