Intenté hacer un sistema operativo en ensamblaje. Fallé. El código era crujiente. Este es mi segundo intento, supongo.
Estoy usando el cargador de arranque limine con el protocolo Stivale.
Dado que este repositorio usa limine como submódulo, deberá clonar este repositorio usando de manera recursiva:
git clone --recursive https://github.com/soumitradev/BruhOS.git
La configuración de un compilador cruzado se recomienda encarecidamente si desea compilar este proyecto. Se incluye un archivo básico toolchain.sh en la raíz de este repositorio que instala un compilador cruzado para la plataforma x86_64 para archivos ELF.
Después de instalar el compilador cruzado, puede ejecutar make run para ejecutar el sistema operativo en QEMU.
A partir de ahora, los siguientes comandos de fabricación están disponibles:
make all : haga el archivo .hdd para el sistema operativo. Eso es todo.make disk : haga el archivo .hdd para el sistema operativo. Eso es todo.make run : Haga el archivo .hdd para el sistema operativo y ejecutarlo en QEMU.make log : haga el archivo .hdd para el sistema operativo, ejecutelo y deje que QEMU genere registros.make logs : haga el archivo .hdd para el sistema operativo, ejecutelo y deje que QEMU genere registros.make debug : haga el archivo .hdd para el sistema operativo, ejecutarlo y adjuntarlo a GDB para la depuración.make clean : limpie el directorio de trabajo y elimine todos los artefactos de construcción. Ejecutar el script toolchain.sh instalará el compilador cruzado en ~/.local/bin/cross_compiler/x86_64/ . Incluye GCC, GDB y binutilos. Los binarios del compilador cruzado tienen el prefijo x86-64-elf- . Entonces, por ejemplo, para ejecutar gcc , tendrá que ejecutar ~/.local/bin/cross_compiler/x86_64/bin/x86-64-elf-gcc . Tenga en cuenta cómo se prepara el prefijo al binario que queremos ejecutar.
Nota: Para hacer este proceso más rápido, deberá establecer el número de subprocesos como una variable, que generalmente es 1 más que el número de subprocesos que tiene su máquina. Mi máquina tiene 8 hilos, por lo que configuré la variable THREADS en el script toolchain.sh a 9. Verifique el número de subprocesos que tiene y cambio esa variable en el script toolchain.sh .
Al escribir, las últimas versiones de GCC, GDB y Binutils son 10.2.0, 9.2 y 2.35 respectivamente. Si desea una versión diferente, reemplace las variables BINUTILSVERSION , GCCVERSION y GDBVERSION en el mismo script toolchain.sh .
Nota: No ejecute este script como superusador. Ejecutar el script requerirá una conexión a Internet estable y una taza de café porque lleva un tiempo;)
Limine es el cargador de arranque más épico que jamás haya existido.
QWORD, ROCK y DRIPOS fueron muy útiles. Este código es más o menos un clusterfuck de su código. Su código está bien escrito, fácil de entender y, en general, es un excelente lugar para comenzar a aprender OSDEV.
El servidor Osdev Discord también es un gran lugar para aprender, hacer preguntas y generalmente es una gran comunidad.
Capturas de pantalla porque simplemente no vale la pena pasar el tiempo para que la cadena de herramientas pruebe un núcleo a medio terminar.


Todos los archivos usan el estándar C ++ 17, no use ninguna biblioteca estándar, excepto libgcc (obvio para el desarrollo del sistema operativo/kernel). Todos los archivos de objetos y los archivos de compilación del kernel deben limpiarse antes de comprometerse usando make clean o eliminar manualmente los archivos. El Gitignore incluye algunos filtros básicos, pero siempre verifica dos veces que no comete ningún artefacto de construcción.
Todos los archivos, excepto el makfile, están sangrados con una sangría con 2 espacios. Sí, me gustan los 4 espacios, pero al tener una experiencia previa, esto puede generar enormes estructuras de árboles, y se ve más limpio con 2 sangrías de espacio. El makfile requiere la sangría de pestaña por definición. Formatearlo hará que se rompa.
Asegúrese de estar utilizando las pautas de formato Google . Esto se puede configurar en el código VS.
No presione ninguna compromiso sin pruebas y se asegure de que funcionen.
Si las características básicas funcionan como están destinadas a ser utilizadas, presione sus compromisos. No espero que previse cada falla de seguridad y lo parche antes de presionar.
Podría agregar un script de verificación previo a la referencia más tarde que se asegura de que su código siga estos estándares.