Yaos es un sistema operativo integrado para dispositivos de Internet de las cosas (IoT), específicamente para un procesador de un solo núcleo sin virtualización de MMU. Está diseñado para la eficiencia energética y el desarrollo independiente de hardware.
Consulte /Documentation para obtener más información, como compilar, portarse, API, etc.
Cualquier comentario es bienvenido a [email protected] . Y avíseme si alguno de ustedes está interesado en portarse a un nuevo MCU para poder darle una mano.
git clone git://github.com/onkwon/yaos
Obtenga uno desde aquí si aún no tiene uno instalado. O puede compilarlo del código fuente poniendo más esfuerzo, lo que no se recomienda, pero aún vale la pena intentarlo.
make clean
make stm32f1 (or specify your board. e.g. mango-z1)
make
make burn
Las tablas compatibles en este momento son:
- mango-z1
- mycortex-stm32f4
- NRF52
- STM32F429I-DISCO
- STM32F469I-DISCO
- stm32-lcd
- UST-MPB-STM32F103
- stm32f1-min
En caso de recibir mensajes de error, algo como undefined reference to __aeabi_uidiv , especifique la ruta de la biblioteca cuando make en el camino a continuación:
make LD_LIBRARY_PATH=/usr/local/arm/lib/gcc/arm-none-eabi/4.9.2
El camino depende de su entorno de desarrollo.
Permítanme poner un ejemplo de parpadear un LED para que pueda probar cómo se ve el código.
Las tareas de usuario se colocarían en /tareas (por ejemplo, tareas /my-first-task.c):
void main()
{
int fd, led = 0;
if ((fd = open("/dev/gpio20", O_WRONLY)) <= 0) {
printf("can not open, %xn", fd);
return;
}
while (1) {
write(fd, &led, 1);
led ^= 1;
sleep(1);
}
close(fd);
}
REGISTER_TASK(main, 0, DEFAULT_PRIORITY, STACK_SIZE_DEFAULT);
Se manejan dos tipos de tareas: tareas normales y en tiempo real. Programador de remolinos redondos para tareas normales, mientras que el programador de prioridad para tareas en tiempo real. Cada tarea recibe una prioridad que se puede cambiar dinámicamente con set_task_pri() . Para las tareas en tiempo real, una tarea de mayor prioridad siempre se adelanta a las tareas de menor prioridad, mientras que las mismas tareas de prioridad tienen lugar a su vez bajo la programación de redondeo. El programador se puede detener para reducir incluso la sobrecarga de programación en caso de una tarea crítica de tiempo. Por otro lado, las tareas normales tienen la oportunidad de ejecutar por un programador justo simplificado, eso elige el valor mínimo de tiempo de ejecución para la próxima tarea para ejecutarse.
Las tareas siempre están en uno de los cinco estados: correr, parar, esperar, dormir o zombie. Y se puede crear una tarea tanto estática como dinámicamente en el tiempo de ejecución.
El recurso del sistema es accedido por la interfaz de llamadas del sistema que ingresa el modo privilegiado a medida que una tarea de usuario se ejecuta en el modo de usuario (sin invitar).
Se implementa el concepto del sistema de archivos virtuales (VFS). La ROM Flash incrustada en SOC se puede montar como el sistema de archivos raíz (incrustación) mientras un RAMFS se monta como un DEVFS para un nodo de dispositivo.
La memoria flash vacía es registrada como InScEDFS para que el usuario pueda usarlo al igual que el sistema de archivos normal.
La página es la unidad de gestión de memoria, pero se puede utilizar alternativo Memory Manager en dicho sistema de escasez de memoria.
Se implementan el asignador de amigos y el asignador de primer ajuste.
Softirqs evitará cualquier trabajo, excepto la respuesta a una interrupción real, ya que se ejecutan con una alta prioridad. De hecho, Softirq es solo una tarea de núcleo que se ejecuta con interrupciones habilitadas y puede dormir, pero tiene la más alta prioridad entre las tareas de ejecución.
Primitivas de sincronización como semáforo, spinlock, etc.