raspberry pibakery mac img grabar descargar baker apple assembly cpu-architecture osdev efi uefi

assembly - pibakery - Escribiendo un SO con UEFI



raspberry sd (3)

EFI es el precursor de UEFI, que es lo que las personas usan realmente, aunque a veces todavía se refieren a la cosa como EFI. Puede obtener las especificaciones involucradas en uefi.org .

La especificación UEFI define todo lo que un cargador de arranque necesita saber. Las especificaciones PI definen interfaces para que los proveedores de silicio usen para la portabilidad de su código en la industria. Entonces escuchará acerca de un sistema operativo, como Win8, que requiere el cumplimiento de una determinada versión de la Especificación UEFI, como 2.3.1c, para que algunas funciones funcionen, como un arranque seguro. Todo esto implica que EFI no reemplaza la BIOS sino que se convierte en un estándar que la BIOS debe cumplir para admitir algunos sistemas operativos.

El lugar al que debe ir para comenzar (después de obtener una copia de las especificaciones) es el proyecto TianoCore en SourceForge . Uno de los proyectos allí es OVMF , que es un objetivo de máquina virtual para UEFI. También es posible que desee ver el destino de NT32 para ejecutar un símbolo del sistema en Windows. Estas son herramientas realmente geniales para usar cuando se desea diseñar una aplicación, como un cargador de arranque, que se encuentra en la parte superior de las interfaces UEFI.

En cuanto al aprendizaje del montaje, no te recomiendo que empieces allí. Hay mucho que saber, y parte de la razón por la que creamos UEFI es para que los nuevos programadores puedan trabajar en C en lugar de ASM. Hay algunos lugares en UEFI en los que usamos ASM, pero el sistema de compilación maneja los detalles para el empalme, y por lo general no necesita ni el control del estado del procesador ni el rendimiento que obtendría al escribir el ASM La única otra razón por la que lo haría es el tamaño, y dado que el resto de la BIOS estará en C, de alguna forma anula el propósito, a menos que reescriba todo en ASM, lo que nadie va a hacer. Concéntrese en aprender las especificaciones y cómo usarlas para escribir sus propias aplicaciones UEFI.

No he estado programando mucho últimamente debido a la escuela, pero he decidido que quiero empezar a trabajar en el desarrollo del sistema operativo de nuevo. Recientemente, sin embargo, he escuchado cosas sobre EFI como reemplazo de BIOS. Quiero desarrollar un sistema operativo para una plataforma que use EFI en lugar de BIOS. Aunque estoy teniendo problemas para averiguar por dónde empezar. ¿Alguien puede señalarme en la dirección correcta? Quizás explique qué significa EFI para el desarrollo del sistema operativo y tal vez dígame qué entornos de prueba (preferiblemente virtuales) puedo usar. Francamente, no estoy muy seguro de qué es exactamente EFI. ¿También debería invertir tiempo mirando el ensamblaje ARM? Sé que la Asamblea x86, pero siento que eso también se está quedando obsoleto. Estoy realmente perdido y me encantaría escuchar tu opinión.

Gracias


Puede utilizar qemu para realizar algunas pruebas / desarrollo de aplicaciones uefi. Ver this para más información

Aparte de eso, recomiendo encarecidamente familiarizarse con uefi y tratar de hacer algún desarrollo de controlador / aplicación en el modelo uefi. Puede probar cosas como ejecutar la pila de red desde el cargador, la infraestructura de arranque de red, probablemente configurando una GUI pre-OS más nítida. Esto no solo lo hará bueno en uefi, sino que lo ayudará a comprender los detalles específicos de la plataforma.

Es mi opinión, pero es bueno tener en cuenta los comentarios anteriores.


Una respuesta tardía a esta pregunta, pero puedo agregar los siguientes puntos si no los ha descubierto mientras tanto:

Tal vez explique lo que EFI significa para el desarrollo del SO

En realidad, no mucho. Bueno, tal vez un poco. Está bien, vamos a explicar. UEFI proporciona el entorno de firmware para una etapa previa al arranque. También proporciona algunos servicios de tiempo de ejecución para el sistema operativo, sin embargo, se espera que el sistema operativo, no el firmware UEFI, finalmente conduzca el sistema; estos servicios le permiten realizar varias actividades relacionadas con la configuración de arranque, por example .

La ventaja es que si está preparado para usar un gestor de arranque que se ajusta a decir multiboot 2 , en realidad no necesita saber nada acerca de UEFI; Los términos destruyen el entorno de firmware.

Es posible producir un kernel de Linux que tenga un stub de EFI y, por lo tanto, arranque "sin" un cargador de arranque: este blog le muestra cómo . Podría hacer esto para su kernel, simplemente necesita producir un kernel PE / COFF que coincida con el bit de firmware.

y tal vez dime qué entornos de prueba (preferiblemente virtuales) puedo

Si puede pagar VMWare Workstation , esto le ayudará masivamente. Además de contener un código gdb tal que puede depurar cualquier parte de cualquier cosa, también puede editar los archivos de definición de la máquina virtual (* .vmx) para que contengan

firmware="efi"

y listo, VMWare iniciará un entorno UEFI completamente funcional. Funciona con Linux y Windows.

Varias publicaciones en Internet mencionan configuraciones QEMU y, por supuesto, VirtualBox. Nunca he arrancado personalmente con éxito ningún sistema existente en la plataforma EFI de VirtualBox, y no he probado QEMU, aunque creo que los otros emuladores probablemente funcionen.

¿También debería invertir tiempo mirando el ensamblaje ARM?

Eso depende de tus objetivos. Sobre la cuestión del ensamblaje, creo que deberías saberlo para escribir un sistema operativo. No creo que importe para qué plataforma escribes; de hecho, creo que escribir para múltiples te hará apreciar más las diferencias entre las máquinas.

En general, sin embargo, no intentaría escribir un sistema operativo completo en conjunto. La razón principal para esto es el tiempo. Supongo que este es un proyecto de pasatiempo, por lo que obtener un poco de recompensa por su gran esfuerzo será mucho más divertido que arrancarlo tratando de depurar el ensamblaje, especialmente para el que no está familiarizado. Siempre puede, a medida que adquiera más destreza, reemplazar los bits de elección con el ensamblador, especialmente porque tiene suficiente del resto del código para probarlo.