Un pequeño sistema operativo de PC X86 de 32 bits basado en un núcleo monolítico con algunas características similares a Unix, escritas en un subconjunto de C ++.
Tenga en cuenta: esta metadocumentación sigue siendo un trabajo en progreso :-)
Un pequeño sistema operativo de escritorio, con características similares a Unix, que está escrita en un subconjunto C ++ comprensible para estudiantes de TI de primer año en Hogeschool Utrecht, de modo que podría usarse en un contexto educativo.
Siempre que sea posible, el rendimiento y las características se sacrifican para reducir la complejidad y aumentar la legibilidad. Esto debería ayudar al software a ser más comprensible para su uso en un contexto educativo. Sin embargo, se deben implementar sujetos importantes de los cursos OS en el Hogeschool Utrecht.
Aunque debe arrancar bien en hardware real, Rikaios se desarrolla con un emulador o una máquina virtual en mente: el hardware compatible está intencionalmente limitado por simplicidad.
Un descargo de responsabilidad obligatorio: el sistema operativo puede derretir su placa base y comer el mouse de su mascota cuando se ejecuta en hardware real, sin garantías, yada yada, lea el descargo de responsabilidad en el archivo de licencia antes de ejecutar esto en la computadora de su familia.
Vea el directorio ./aux. Sin embargo, no esperes nada llamativo, ¡actualmente son capturas de terminal en serie!
El sistema operativo con su conjunto de características actuales se desarrolló en un período de aproximadamente 6 meses de febrero a julio de 2019.
Rikios aún no es un sustituto completo de Linux ;-)
Hay algunas características que necesitan trabajo o se están trabajando actualmente (ver también la sección contribuyente):
grep -ERn 'TODO|FIXME|XXX' src/kernel/src src/kernel/include src/user/Tenga en cuenta que el objetivo de Rikios es seguir siendo pequeño: una pila de red o un controlador USB, por ejemplo, probablemente no se considerará para la implementación.
Necesita este software instalado (en un host Linux-ish) para construir y ejecutar Rikios:
Los números de versión deben ser recientes, especialmente para Clang, LLVM y LLD. Se proporciona un Arch Linux Dockerfile (gracias a @peikos) que incluye versiones compatibles de las dependencias anteriores.
Puede usar GCC en lugar de Clang/LLVM si así lo desea, siempre que tenga una Toolina cruzada GCC para I686-Elf. Consulte src/kernel/Makefile para obtener detalles sobre cómo cambiar las cadenas de herramientas.
| Directorio | Descripción |
|---|---|
/src/boot | Bootloader (Bootsector y Stage2) |
/src/boot/utils | Instalador de gestor de arranque |
/src/kernel | Código de kernel |
/src/kernel/include | Encabezados del núcleo expuestos a Userland |
/src/kernel/include/os-std | OS Standard Library (matemáticas, contenedores, etc.) |
/src/user | Software de tierra de usuarios |
/src/user/libsys | Biblioteca de sistemas de usuarios C ++ |
/src/disk | (FAT32) Sistema de archivos disponible para el sistema operativo |
| Makfile | Descripción |
/src/Makefile | Construye todo, crea discos de arranque y ejecuta emuladores |
/src/boot/Makefile | Construye el gestor de arranque e instalador |
/src/kernel/Makefile | Construye núcleo |
/src/user/Makefile | Construye Userland |
Cada makefile anterior incluye (si está disponible) un archivo Makefile.local en el mismo directorio. Esto le permite anular los nombres y rutas ejecutables de la cadena de herramientas, y opcionalmente agregar objetivos adicionales.
No olvide pasar -j 4 (o más) para aumentar el rendimiento de la compilación en los sistemas multinúcleo.
Esto construye el núcleo y el cargador de arranque y crea un disco de arranque que se ejecuta con el virtualizador / emulador QEMU. Se abre una conexión en serie al sistema operativo en el terminal desde el que ejecuta el comando Make.
hacer disco && hacer ejecutar
Actualmente, el OS Shell y el controlador TTY no tienen capacidades sofisticadas de edición de línea y soporte de historial de línea de comandos. Por conveniencia, puede envolver QEMU con rlwrap para utilizar las instalaciones de edición de línea en el lado anfitrión de las cosas (muy recomendables):
hacer disco && rlrap -a hacer ejecutar
Para ejecutarse en VirtualBox, haga lo siguiente:
vdi :hacer VDI
Entonces:
disk.vdi como un disco IDEAhora debería poder iniciar la VM a través de VirtualBox.
Tenga en cuenta que las E/S en serie pueden ser difíciles de trabajar. La versión actual del sistema operativo no interactúa mucho con la pantalla y el teclado/ratones de forma predeterminada.
Una vez que tenga el sistema en funcionamiento, debe ver un mensaje en el terminal serie (si ha conectado un monitor, también puede aparecer una pantalla de salpicaduras). Puede interactuar con el sistema operativo utilizando el terminal en serie. Para comenzar, pruebe el comando help .
Se proporcionan varios programas de servicios públicos en el disco. Ver programas instalados escribiendo ls bin (suponiendo que todavía esté en el directorio /disk0p1 ). Todos los programas ELF en /disk0p1/bin pueden ejecutarse como comandos sin escribir la ruta completa (piense en ello como un directorio de $PATH implícito). Del mismo modo, cualquier archivo ELF en el directorio de trabajo, como el que forth.elf , se puede ejecutar simplemente escribiendo su nombre.
Para ver cómo funcionan los servicios públicos, o para agregar el suyo, consulte el archivo ReadMe en el directorio src/user de este repositorio.
Al presionar ESC en el teclado (en la ventana de video, no en la terminal de serie) habilitará el Shell del núcleo, una utilidad de depuración incorporada. Esto se puede utilizar para imprimir varias estadísticas e información sobre procesos de ejecución y memoria (consulte el comando de ayuda help cuando esté en kshell).
Puedes depurar el núcleo con QEMU o BOCHS:
Consulte ./src/gdbrc para las opciones de inicio (puede anular esta ruta del archivo en un Makefile.local ).
hacer disco && hacer depuración
Consulte ./Src/BochSRC para las opciones de configuración (puede anular esta ruta del archivo en un Makefile.local ).
hacer disco && hacer bochs
Ld.lld: Error: No se puede encontrar la biblioteca -lclang_rt.builtins -i386
locate clang_rt.builtins )kernel/Makefile.local , con contenido: LD_BUILTIN_DIR += /the/directory/containing/the/clang/lib Entiendo que la documentación pública disponible es actualmente limitada, así que no dude en abrir un problema o enviarme un correo electrónico.
Abra un problema de github / gitlab para que podamos asegurarnos de que no se duplique ningún esfuerzo :-)
Un proceso para esto debe formalizarse en las próximas semanas: hay algunos problemas / características abiertas en las que definitivamente se pueden trabajar, con diversos grados de dificultad / tamaño. Documentaré esto pronto ™.
Este proyecto tiene licencia bajo la licencia Apache 2.0. Consulte./Blicense para obtener más información.
Este sistema operativo fue escrito desde cero, con solo la siguiente excepción: