菜单

作者:kaoqi

GOP让屏幕变红

继续上一篇GOP系统表调用,本文章的主要目标是让屏幕变为一片红色。 它基于一条如下的逻辑链条: 1、由main函数传入的EFI系统表中可以找到BS表的指针 2、BS表指针用BS结构体解析后可以从中获得一个LocateProtocol函数,并通过一个GOP专用的GUID的值,找到GOP对应的proto

kaoqi 发布于 2026-08-25

GOP的系统表调用

紧接着上一篇文章,这里开始讲怎么从efi的main函数出发,进行GOP的系统调用。 主要目标是从基本的系统调用表开始,由GUID进行locateProtocol后,直接给一个pixel填满整个屏幕。本文暂时不追求terminal、渲染器这些东西的实现,就追求一个最基本的屏幕染色的功能。 调用主要流程

kaoqi 发布于 2026-08-24

UEFI中的Boot Service表结构

写这个文章是因为BOOT Service这个表实在是太长了,没辙了只好单独开一篇文章来讲数据结构的事情。 BS的struct在GRUB2源代码中/include/grub/efi/api.h文件中存在定义,在UEFI协议原文中亦有定义,只不过前者还可以结合其他部分代码深入解析各部件的结构,文章最后是

kaoqi 发布于 2026-08-21

UEFI的GOP协议

GOP协议文档可以参考: https://uefi.org/specs/UEFI/2.11/12_Protocols_Console_Support.html#graphics-output-protocol GOP是一种UEFI协议规定的统一的图形界面协议 Blt Buffer 这是GOP中最基本

kaoqi 发布于 2026-08-20

GRUB2主函数系统调用流程

之前介绍过一些有关GRUB2的文章: http://kaoqi.xyz/archives/grub2zhu-han-shu-liu-cheng http://kaoqi.xyz/archives/grub2de-mod_initji-zhi 但还是缺乏一个完整介绍GRUB2启动初始化流程的教程,在这

kaoqi 发布于 2026-08-20

UEFI标准程序

UEFI标准文档https://uefi.org/specifications UEFI标准文档包含了很多C代码片段,它们具体定义了很多struct。对于UEFI标准程序的开发来说,实际上是一个输入输出如下的函数: 有关各个变量的具体定义,可以在"2.3.1 Data Types(P.23)"找到:

kaoqi 发布于 2026-08-19

UEFI裸机编程之efi编译过程

经过这么一段时间的学习,再没有什么比搞清楚UEFI裸机程序,调用EFI系统表识别物理内存更重要的事情了。这是一个无论工程上遇到多少困难都寄希望解决的事情(比如笔记本电脑的UEFI隐身问题等等)。完成了裸机编程的相关开发,才可以说真正理解了什么是APB的物理地址映射关系,才对物理地址空间有一个全局的了

kaoqi 发布于 2026-08-19

物理地址空间

在CPU的角度看,似乎物理地址空间永远都是从0一致到最大都可以访问的。比如在UEFI固件阶段枚举总线上设备的时候,总是可以将0x80000000-0xFFFFFFFF映射为某种MMIO的区域。很明显,对于只有区区16G或区区4G的单根内存条来说,这种物理地址如果填满的话,分分钟就超过了内存条本身的性

kaoqi 发布于 2026-08-14

ACPI表的数据表与逻辑块

ACPI协议将所有表分为数据表和定义块表。对于逻辑表来说,基本只有DSDT与SSDT这两个表,而数据表则是针对不同的系统硬件方向指定的。 FADT FACP,Fixed ACPI Description Table:ACPI体系的核心基础表,定义系统固定硬件的通用配置,包括电源管理端口地址、中断控制

kaoqi 发布于 2026-08-14

虚拟内存进程地址空间

进程地址空间(Process Address Space)指进程可寻址空间。在64位处理器中,进程地址空间直接指可寻址256TB的用户态地址空间,每个进程都可以拥有一个完全独立的进程地址空间。在这个空间中,进程可以利用虚拟地址完成程序的段代码映射、数据段映射、用户进程栈、mmap映射、堆映射的数据结

kaoqi 发布于 2026-08-12
上一页 下一页