菜单

作者:kaoqi

stdio实现printf函数过程

stdio本身是C标准库中最核心的格式化输出函数,可以从用户接口层、格式化引擎层、系统调用层三个方面来描述这一printf实现的过程。 1、用户接口层 printf在stdarg.h中进行结构体定义 int printf(const char *format, ...) { va_list_ar

kaoqi 发布于 2026-07-31

EFI_BLOCK_IO_PROTOCOL简介

这个protocol可以向你解释为什么内核能够读取磁盘扇区。 Protocol是依赖于UEFI协议诞生的技术,其主要在DXE以及BDS阶段生效,主要作用就是实现各类硬件驱动的基本实例化。 因此,Protocol先天依赖于PEI与DXE阶段所提供的Boot Services服务表,也即由UEFI固件提

kaoqi 发布于 2026-07-31

UEFI的PEI和DXE阶段

PEI Pre-EFI Initialization阶段:在内存未就绪环境下初始化内存控制器,检测物理内存,构建HOB链表传递硬件信息至下一阶段。 DXE Driver Execution Environment阶段:加载驱动程序全面初始化芯片组、总线以及外设,构建Boot Services与Run

kaoqi 发布于 2026-07-31

Protocol结构体

在EDK2项目中,Protocol结构体可以在/MdeModulePkg/Core/Dxe/Hand/Handle.h中找到: typedef struct { UINTN signature; // 魔术字 LIST_ENTRY ALLEntries; // 全局协议链表节

kaoqi 发布于 2026-07-31

PCIE配置空间struct——pci.h

本文主要解析PCIE在配置地址空间、LTP包转发、MSI中断描述三个方面中配置空间的struct。 具体来说就是,解析如下几个头文件中的源代码: /include/linux/pci.h——核心PCI设备结构体 /include/linux/pci_regs.h——配置空间寄存器 /include/

kaoqi 发布于 2026-07-30

PCIE的基本结构

PCI(Peripheral Component Interconnect,外部不见互连标准)总线是个人电脑中使用的最多的总线。目前笔者主要关心三个方向:(基于ARM架构的) 1、由PCIE总线连接网卡,形成网卡驱动 2、由PCIE总线连接显卡或NPU,并关心通过显卡或NPU的进一步互连,如到显示器

kaoqi 发布于 2026-07-28

PCI驱动在kernel初始化中的调用栈

PCI驱动是一个很优雅的东西,比起微软丑陋的ACPICA项目来说,顺眼的不止一点半点。 PCI驱动在start_kernel函数的末尾, arch_call_rest_init() ==》 rest_init() ==》 kernel_thread(kernel_init, NULL, CLONE_

kaoqi 发布于 2026-07-27

MSI中断

MSI中断的意思是,硬件设备通过向特定内存地址写入数据来通知系统处理中断,目前MSI-X是MSI的升级版本(Message Signaled Interrupts Extended)。 MSI是从设备写一个特殊的地址,导致CPU接收到一个中断。传统上说,基于针脚的PCI中断通常在几个设备之间共享。为

kaoqi 发布于 2026-07-27

ACPI框架

这里讨论的是在linux的kernel中ACPI的实现机制(来源于微软的ACPICA项目),可以很明显的观察到ACPI的driver中函数实现主要依赖acpica的文件功能。而acpica的文件中,又旗帜鲜明的分为10个不同的系列。 系列名 文件名

kaoqi 发布于 2026-07-24

ACPI的namespace结构体

严格意义上说,NameSpace的这种结构在很多代码环境中都可以存在,这里主要是讲kernel或者efi这种轻量级环境中的数据结构体。 命名空间提供了虚拟化的一种轻量级形式,使得我们可以从不同的方面来查看系统的全局属性。该机制类似于Solaris中的Zone或者FreeBSD中的jail。 正是由于

kaoqi 发布于 2026-07-24
上一页 下一页