
Un exokernel moderno
Antes de hablar sobre el sistema de construcción escrito a mano, necesito mencionar Esque.toml. Este es un archivo de configuración con una gran cantidad de opciones disponibles para la personalización. Configurar esto tomó mucho tiempo, por lo que ahora es el estándar para construir el sistema operativo ESQUE.
cargorustcddmtools (McOPY, MMD, ...)dosfstools (mkfs.vfat)python >= 3python.tomlpython.xbstrap$ sudo apt install cargo rustc binutils mtools dosfstools python3 python3-pip ; pip install --user xbstrap toml y.py es una utilidad inspirada en x.py de Rustc. Puede configurar el kernel utilizando el archivo Esque.toml que se puede encontrar en el sistema de este directorio. Este archivo ofrece muchas opciones, échale un vistazo antes de construir.
Puede construir el proyecto simplemente usando
./y.py build
Este sistema es muy configurable. Simplemente escriba
./y.py --help
para ver todas las opciones.
Primero, debe ingresar Esque.toml y cambiar enable-kvm a falso.
No se recomienda construir en ventanas. Soy un usuario de Linux desde hace mucho tiempo y todo el proceso de compilación está diseñado para mí, sin embargo, es posible construir con winy.ps1 , pero no optimizado.
En Windows, solo ciertos comandos y.py se pueden ejecutar de la misma manera que en Linux (ejemplo: ./y.py Build ejecuta dd para crear un archivo IMG). Por lo tanto, se le presentan dos opciones
Esta puede ser una opción preferida para algunos. En este escenario, ejecuta todos los comandos excepto ./y.py run usando WSL.
Esto requiere todas las dependencias enumeradas anteriormente en la sección Dependencies (On Linux)
winy.ps1 es un guión de PowerShell que decide qué ejecutar de forma nativa y qué no. El uso es igual a ./y.py Eg ./winy build ./winy run ejecuta el núcleo y.
Atención Esto requiere que tenga su ejecución para que se baje. Puede cambiar temporalmente esto abriendo un host de comandos con privilegios de administrador y escribiendo
Set-ExecutionPolicy Bypass Esto requiere todas las dependencias enumeradas anteriormente, excepto la carga y RustC en WSL. Requiere carga, RustC y un binario tar en las ventanas. Dichas dependencias se pueden instalar fácilmente utilizando el rustup binario de rustup.rs
Ejecute el siguiente comando en WSL (asume Ubuntu):
$ sudo apt install binutils mtools dosfstools python3 python3-pip ; pip install --user xbstrap tomlUn sistema operativo debe estar cerca de estar libre de dependencia. Desafortunadamente, este sistema depende de un total de 2 cajas:
bitflags
spin
Más de 10+ de nuestras propias dependencias se mantienen dentro de las crates/ subdirectorio. Estas dependencias incluyen un cargador de alquitrán y mucho más.
std::sync::{Mutex,...} . Esta es una caja increíblemente útil que se usa en casi todos los principales proyectos de OSDEV. Esta caja podría ser eliminada en el futuro. Si bien puede producir binarios más grandes, digamos, C, todavía produce pequeños después de desnudar. El núcleo actual tiene solo ~ 300k de tamaño, lo cual es aceptable para mí. El gestor de arranque es de aproximadamente 270k grande, debido a su enorme dependencia de 'UEFI'.
Esque es un núcleo que busca unir aspectos de Linux y Windows, mientras que es un sistema similar a Exokernel. Un exokernel es un núcleo que proporciona solo las cosas básicas y las cosas adicionales (como las pilas de red) se cargan a través de módulos.
Debido a la gran disponibilidad de software en Linux, ESque tiene como objetivo ser algo compatible con él. Logra la compatibilidad del sistema de archivos debido al uso de una fake-root . Hay dos mayores. La verdadera raíz y la raíz falsa . Un ejemplo de una ruta falsa sería /home/user/ o /bin/* . Una ruta de raíz real comienza con el dispositivo: esquema de ruta . Ejemplos: initramfs:/myfile , C:/Binaries/* , B:/BOOT/EFI/BOOTX64.EFI , C:/Users/User/ o proc:/CpuInfo .
Las syscalls de Linux se encuentran en su ubicación real (0, 1, 2, 3, 4 ...), mientras que las syscalls de Esque se encuentran en (SYS_NUM + 0x1000)
Sí, y no. En Esque, hay tres 'espacios' virtuales diferentes para aplicaciones. Solo dos de ellos son reales. Hay
Entiendo que no muchos están dispuestos a usar su tiempo en un núcleo como este. Con mucho gusto agradeceré cualquier contribución, sin importar cuán grande o pequeño sea. Lea el archivo de contribuciones y eche un vistazo a los archivos en el directorio de documentación
En los initramfs, a partir de ahora, no se admiten directorios. Puede crear un nuevo initRAMFS simplemente colocando archivos en el initramfs/ subdirectorio. Luego, usando ./y.py initramfs los initramfs terminados se encontrarán en build/initramfs.tar . El gestor de arranque espera que este archivo se encuentre en la partición raíz.
Todos los archivos que terminan con .system serán cargados por el initRAMFS. Se espera que uno de dichos archivos .system cargue el sistema de archivos.
Si bien es cierto que un sistema operativo sin código inseguro es imposible, intenté limitarlo aquí. En cualquier momento,
./y.py count-unsafe
Se puede invocar, que mostrará información sobre el inseguro del código. Al momento de escribir, se produce la siguiente salida:
A total of 52 occurences have been found (1641 LOC, 0.* percent Percent)
alloc