Introducción
UEFI [Universal Extensible Firmware Interface] es un estándar para la implementación del gestores de arranque y la interfaz entre el gestor de arranque y el sistema operativo. />
Ventajas
- API fijo y ABI
- tipo Extended anotaciones [como, IN / OUT / INOUT de argumentos de la función]. Esta teoría puede ayudar a detectar algunos errores de codificación en tiempo de compilación.
- Proporcionar gama IO y descripciones de IRQ (como ACPI) para sistemas ARM
Desventajas
- Fue diseñado por Microsoft e Intel (por lo tanto, la hinchazón de código innecesario)
- Todo el código se ejecuta en el mismo espacio de direcciones, el acceso MMIO no está protegido por la capacidad o cualquier otra garantía mecanismo. Si bien la situación es la misma con otros gestores de arranque y el uso de la asignación de memoria uno a uno compartido entre todos los componentes [procesos o bibliotecas] permite utilizar el gestor de arranque en los sistemas sin MMU, UEFI fue ideado para proporcionar una cadena segura de fiduciario para el proceso de arranque y
Servicios UEFI
TianoCore EDK2 y UEFI en ARM
TianoCore EDK2 es una implementación de referencia de Intel UEFI. Viene con varios paquetes interesantes y se puede utilizar para construir dos gestores de arranque UEFI y aplicaciones independientes para los sistemas que ya están funcionando UEFI (como, la mayoría de placas de nivel de consumidor y las computadoras portátiles disponibles en el mercado)
- ArmPkg – contiene el cargador de Linux y los controladores para las CPU (Cortex A8, A9, A15) – caché, interrupciones (GIC), Timer
- ArmPlatformPkg – contiene los controladores UART, GPIO y ni de la ARM plataformas de referencia, las rutinas de preparación TrustZone, manejo de excepciones y la pila de código de conmutación
- CryptoPkg – contiene los contenedores para OpenSSL para permitir el uso de criptografía (por ejemplo, para el arranque UEFI Secure)
- DuetPkg – la paquete para probarlo UEFI en un equipo X86
- EdkShellPkg – la cáscara UEFI que permite navegar controlador de almacenamiento masivo, arrancar imágenes personalizadas e interactuar con los conductores a través de las variables de configuración
- MdePkg – contiene el tiempo de ejecución servicios y HAL (Hardware Abstraction Layer) para PCI y otros buses
- NetworkPkg -. contiene el soporte para IPv6, DHCP, TFTP y SCSI (obviamente, para el arranque por red)
- Nt32Pkg – servicios Bootloader de Windows 7 Embedded
- OvmfPkg – Emulación de ACPI y Virtio
- PcAtChipsetPkg – obviamente el soporte x86 -. Timer, PIC, HPET y los controladores de puente PCI
- stdlib – Biblioteca de EFI y tomas de corriente
Creo que esta implementación particular es una mierda. Lo que podía soportar con el código ilegible, el hecho de que tienes que poner todas las definiciones como en tres archivos (plataforma, archivos de mesa y. Ini). Pero. La implementación de referencia sólo funciona para ARM BeagleBoard. Para PandaBoard, el código fuente se establece claramente que «el controlador de pantalla está rota y eliminando el comentario que conduce a la congelación misteriosa». He pasado algún tiempo la piratería en él, pero todavía no me las arreglo para conseguir el funcionamiento de la pantalla. Ni el MMC. En PandaBoard, simplemente no funcionó. El Galaxy Nexus, que comenzó a trabajar después de que yo cambié desde el modo de bloque para el modo de transmisión «no admitido» en el código de host mmc genérico. Weird.
Procesos de Windows RT Bootup
Para Windows RT y Windows Phone 8, el proceso de arranque se inicia con el gestor de arranque UEFI cargar el archivo bootarm.efi. A continuación, intenta leer la tabla (Boot Configuration Data) BCD y montar la partición raíz. No confían en UEFI para la lectura de la unidad en esta etapa. Siguiente, el control se transfiere al núcleo de Windows NT que llama a los ExitBootServices () de rutina y carga el controlador de bloque nativo. Hasta ahora, me las he arreglado para dividir la unidad flash usb correctamente y arrancar el bootarm.efi y hacerla reconocer la partición en qemu emulando el BeagleBoard, pero eso es todo.