Neptune OS es una personalidad de Windows NT para el SEL4 Microkernel. Implementa lo que Microsoft llama el "Ejecutivo NT", la capa superior del kernel de Windows NTOSKRNL.EXE , como un proceso de usuario bajo el SEL4 Microkernel. El Ejecutivo de NT implementa la llamada API nativa de NT, la interfaz de llamadas del sistema nativo de Windows sobre la cual se construye la API Win32 más familiar. Estos están expuestos al modo de usuario a través de funciones Stub en NTDLL.DLL con nombres como NtCreateProcess . El Ejecutivo de NT también es responsable de exponer una interfaz de programación a los controladores de dispositivos. Dicha interfaz incluye funciones como IoConnectInterrupt y IoCallDriver . Nuestra arquitectura permite a los controladores de dispositivos ejecutarse en procesos separados del espacio de usuario y comunicarse con el proceso ejecutivo de NT a través de primitivas estándar de SEL4 IPC.
El objetivo final del proyecto Neptuno OS es implementar suficiente semántica NT de modo que una tierra de usuario de Reactos pueda ser portada bajo el sistema operativo Neptuno, así como la mayoría de los controladores de núcleos Reactos. En teoría, deberíamos poder lograr la compatibilidad binaria con los ejecutables nativos de Windows siempre que nuestra implementación de la API nativa NT sea lo suficientemente fiel. También deberíamos poder lograr un alto grado de portabilidad del código fuente con los controladores de dispositivos de Windows y los controladores del sistema de archivos, aunque no apuntamos a la compatibilidad completa del código fuente de línea por línea debido a las diferencias arquitectónicas con Windows/Reactos que hacen que este objetivo sea no realista. Consulte la sección de documentación para obtener más información.
El estado actual del proyecto es que hemos implementado suficientes componentes ejecutivos de NT para admitir una pila de sistema de archivos razonablemente completa con soporte de almacenamiento en caché de requisito de lectura y retroceso, que incluye el controlador FAT12/16/32 del sistema de archivos fatfs.sys y un controlador de controlador fdc.sys . También tenemos una pila básica del controlador de teclado, que incluye el controlador de clase de teclado kbdclass.sys y el controlador de puerto PS/2 i8042prt.sys . Estos nos permiten ejecutar un símbolo del sistema básico ntcmd.exe , tomado del proyecto Reactos, que admite la mayoría de los comandos de shell comunes, como pwd , cd , copy , move , del , mount y umount . También incluimos un controlador beep.sys que hace un sonido molesto en el altavoz de PC.
Todo el sistema se ajusta en un disquete y se puede descargar desde la versión v0.2.0002. Puedes ver una breve demostración en YouTube. También puedes construirlo tú mismo. Vea la sección sobre edificio.
Para el próximo lanzamiento, planeamos transferir la pila de controladores ATA/AHCI de Reactos para que podamos apoyar la mayoría de los discos duros PATA/SATA. También planeamos escribir/portar una suite de referencia de disco para que podamos demostrar que un diseño de microkernel no conduce a sanciones de rendimiento inaceptables.
Para sistemas i386 (probablemente debería llamarse i686):
enable_paging en sel4/src/arch/x86/32/head.S ).Para sistemas AMD64:
fsgsbase habilitada. Esto solo es compatible con Ivy Bridge y más tarde. Para ejecutar AMD64 se basa en CPU anteriores, puede deshabilitar la instrucción FSGSBASE en private/ntos/cmake/sel4.cmake . También requerimos CMPXCHG16B, que está disponible desde Nehalem, y posiblemente antes (los procesadores Core 2 anteriores pueden necesitar una actualización de microcódigos). Para las máquinas amd64 , ThinkPad X230 ha sido probado para trabajar.
Deberá construir en Linux (SEL4 no se construye bajo ningún otro sistema operativo). Necesitará las siguientes dependencias de Python, y probablemente más.
jinja2
future
ply
setuptools
six
lxml
También necesitará cmake , clang , llvm y lld como una cadena de herramientas básica. clang es un compilador cruzado nativo que puede generar objetivos ELF y PE. El GCC no es compatible, pero en teoría se puede hacer que funcione. Necesitará una cadena de herramientas ELF y una cadena de herramientas PE (y probablemente una tonelada de paciencia) si desea que el GCC funcione. También necesita el windmc , que es el compilador de recursos de mensajes PE de mingw . Eche un vistazo a build.sh para el script de compilación. La versión de Clang preferida es 15, pero las versiones recientes deberían funcionar. También necesita la utilidad cpio para construir el initcpio. Finalmente, para el disquete de arranque y el ISO de arranque necesitará las siguientes herramientas: syslinux (para el floppy de arranque), grub y xorriso (para Boot ISO) y mtools (para ambos).
Se recomienda utilizar un IDE habilitado para el servidor de idiomas para explorar el código fuente. La configuración probada es el paquete lsp-mode en emacs con clangd como servidor de idiomas. El script build.sh generará el archivo compile_commands.json para clangd . Deberá instalar JQ para este propósito.
Clon el proyecto primero (asegúrese de usar git clone --recurse-submodules ya que incluimos el núcleo SEL4 como submódulo) y luego ejecutar
./build.sh [amd64] [release]
Si no especifica amd64 , entonces es una compilación i686 . Si no especifica release , entonces es una construcción de depuración. Para crear floppies de arranque, escriba
./mkfloopy.sh [amd64] [release]
Para crear ISOS de arranque, escriba
./mkiso.sh [amd64] [release]
Para simular usando qemu, ejecute
./run.sh [direct|iso|uefi] [amd64] [release] [extra-qemu-args]
Si especifica direct , QEMU cargará el kernel Sel4 y la imagen NTOS directamente (usando -kernel y -initrd ). Si especifica iso o uefi , cargará el arranque ISO construido por mkiso.sh . La opción uefi también configurará QEMU para cargar el firmware UEFI, que proporciona una buena consola FrameBuffer de alta definición. De lo contrario, se usa el disquete creado por mkfloppy.sh . Se pasan argumentos adicionales a Qemu. Por ejemplo, para ejecutar la compilación de lanzamiento i386 con altavoz PC habilitado en QEMU, puede pasar lo siguiente (esto supone que está utilizando una versión reciente de QEMU y tiene PulseAudio)
./run.sh release -machine pcspk-audiodev=snd0 -audiodev pa,id=snd0
La construcción de depuración podría ejecutarse lentamente, especialmente si activa el registro de puertos serie. Puede desactivar el registro modificando el encabezado maestro del proyecto Ejecutivo NT (ver private/ntos/inc/ntos.h ).
Utilizamos la cadena de herramientas LLVM, por lo que la compilación cruzada en teoría simplemente debería funcionar sin ningún manejo especial. En la práctica, en i386 / amd64 el script de enlazador para el ejecutable final del kernel SEL4 se basa en funciones que solo admite el enlazador GNU LD, por lo que no podemos usar el enlazador LLVM (LLD) para vincular el kernel Sel4. Esto significa que necesitará los reticulantes GNU LD para el objetivo triples i686-pc-linux-gnu y x86_64-pc-linux-gnu instalado en el lugar habitual ( /usr/bin ) para que clang pueda encontrarlos e invocarlos correctamente al vincular el kernel Sel4. La parte de PE de la cadena de herramientas es completamente autónoma y no requiere un manejo especial al compilar (ya es una cadena cruzada porque estamos dirigidos a Windows en un host de Linux).
La compilación cruzada se prueba en Archlinux que se ejecuta en Loongarch64 (procesador Loongson 3A5000) con llvm-14 y parece generar el código correcto. Abra un problema si se encuentra con algún problema.
Tenga en cuenta que si su comida está construida para la plataforma nativa en lugar de i686/amd64, el ISO de arranque generado por mkiso.sh no funcionará ya que grub-mkrescue intentará copiar los archivos de arranque de la plataforma nativa al ISO. Para solucionar esto, construya el paquete GRUB para i686/amd64 (o simplemente ejecute la generación ISO final en un sistema i686/amd64).
Las documentos se encuentran en el directorio docs . Para los desarrolladores y aquellos interesados en comprender el funcionamiento interno del sistema operativo Neptuno, lea el Developer-Guide.md que comienza con una visión general arquitectónica del sistema operativo y procede a explicar las diversas decisiones de diseño de los componentes individuales del sistema operativo. También contiene la guía de portada del controlador para aquellos interesados en portar controladores de Reactos.