系统基础

启动过程(简要)

  1. 上电 → BootROM(SoC 固件):读取 RCW、初始化最小硬件、加载 BL2 到 SRAM
  2. BL2(ATF early):初始化 DDR,加载 BL31(ATF runtime)和 BL33(通常为 U‑Boot)
  3. BL31(ATF runtime):设置安全环境后跳转 U‑Boot
  4. U‑Boot:初始化外设,加载 Linux 内核与设备树

此流程适用于常见 Arm SoC 的多阶段引导;具体实现随平台而异。

文件加载路径

传统路径:磁盘 → DMA → 内核页缓存(page cache)→ copy_to_user → 用户缓冲区

零拷贝优化:磁盘文件 → 页缓存 → 直接映射到用户虚拟地址(避免额外内存拷贝)。

原因与优点:

  • 零拷贝:减少一次内存复制,提升性能
  • 按需分页:只在访问时加载页面,节省内存
  • 虚拟地址映射:允许映射超大文件以便用户态直接访问

kdump(核心转储)

kdump 使用 kexec 启动一个最小化内核(crash kernel),并通过 ELF 等描述将崩溃内核的物理内存映射成 /proc/vmcore。用户态工具可像读文件一样转储系统内存用于分析。

UIO vs VFIO

方案 作用 优缺点
UIO 用户态访问设备寄存器 简单、适合调试;不提供安全 DMA/隔离,风险较高
VFIO 通过 IOMMU 提供安全 DMA 与设备直通 安全、支持高性能网卡与 DPDK;适合生产和虚拟化

页表与多级页表的由来

CPU 的 MMU 要求一级页表是可直接索引的连续数组;单级页表对 64 位地址空间过大,多级页表通过分层索引实现稀疏映射,节省内存并支持按需分配。

系统硬件

特性 ARM/嵌入式 x86/PCIe
硬件发现 写死,需 DT 或 platform_data 自描述,扫描 PCI 配置空间
驱动匹配 compatible / platform_device VendorID/DeviceID
硬件信息 DT 或手工提供地址、中断、时钟 PCI 配置空间提供资源和中断
驱动初始化 probe() 读取资源 probe() 读取 PCI 配置空间资源
可移植性 需修改 DT 基本通用