Mi primer sistema operativo alimentado por cafeína.
Este es un proyecto de aprendizaje, veremos hasta dónde llega. Cuando digo "alimentado por cafeína", literalmente quiero decir cafeína, no algún nuevo marco de construcción del sistema operativo. Pero ese sería un nombre bastante bueno para un marco de construcción del sistema operativo.
Estoy ejecutando este proyecto en Ubuntu18.04 LTS. Estoy usando una compilación remota usando Visual Studio en PC, pero puede usar el File Make directamente en una máquina Ubuntu. Mi sistema operativo se ejecuta actualmente en una VM en Ubuntu. No recomendaría ejecutar este "sobre metal" porque los errores pueden ladrar la computadora al alterar permintalizan los datos de BIOS y ROM. Los siguientes son los paquetes que instalé para poner en marcha este proyecto:
MakeFile producirá un archivo ISO en la misma ubicación con el mismo nombre cada vez que se ejecuta. En Virtualbox, hice una VM llamada Caffeineos con 512 MB de RAM, sin VDK/VMDK y con los medios ópticos apuntando al archivo ISO y la casilla "CD en vivo" marcada.
Incluso aunque el archivo ISO cambiará con cada compilación, la VM siempre irá a la misma ubicación para encontrar el ISO y arrancar desde él.
Ahora mismo tengo un kernal de arranque. No hace nada más que imprimir el nombre del sistema operativo. Hasta ahora he seguido los totoriales, pero muy pocos cubren cualquier cosa más allá de este punto. Ninguno que encontré use C ++, solo C.
Estoy investigando cuál es la próxima parte del núcleo que debo construir a continuación. Mi suposición es la memoria dinámica. Actualmente estoy logrando la salida usando una dirección VGA para escribir texto en la pantalla. Todavía no he descubierto la entrada. Como dije, los tutoriales realmente no superan el sistema operativo "Hola mundo".
He detectado la RAM y obtuve valores que hacen que Sence (Mem ~ = 640kb, bajo+HI ~ = 512MB), así que estoy muy feliz. También pude obtener una cadena del gestor de arranque lanzando un UINT32_T en una matriz constante de constante* en el puntero. He estado usando la especificación Multiboot.h del sitio GNU.org. El archivo MultiBoot.h contiene declaraciones de Structy Structy y Typedef que coincide con los bloques de la información que el cargador de arranque (Grub2.02) envía a través del multiboot_info_t*. Al conocer los bloques, puedo colocar los punteros en los datos que necesito desde el gestor de arranque.