Skip to content

平台、内存与 OS 服务 ​

先完成设备仓库解析。阅读设备树绑定、 匹配规则、ArmDTPlatform 和 ArmCpu。

实现后按驱动接入步骤连接初始化调用、归档配方和 OS ABI, 再执行本页对应的硬件验证。

源码与接口 ​

以下链接固定到已核对的源码版本。使用所选 SoC、组件和 OS 版本核对接口; UniXNU-sheng 中的文件提供板级集成示例。

实现部分源码阅读与实现内容
平台匹配ArmDTPlatform.cppArmDTPlatform:ADT 根节点、子设备和 NVRAM 发布
CPU 与中断ArmCpu.cppArmCpu:CPU 注册、计时器/GIC 初始化、次级核入口和 IPI
DMA 转换ArmSmmu4K.h, ArmSmmu4KContext.h页表分配、映射和上下文编程,先匹配目标 SMMU 版本

1. 描述 CPU 和中断资源 ​

记录 CPU MPIDR affinity、启动 CPU、启用的核、PSCI 方法、GIC 版本、distributor/redistributor 范围与步长、定时器频率和中断描述。共享拓扑放在 SoC DTSI,板级启用状态放在设备 DTS。

从主仓库使用已检出的 SoC DTSI 目录和目标板 DTS 编译,先填写下面两个路径:

sh
SOC_DTS=/path/to/UniXNU-soc-common/dts
BOARD_DTS=/path/to/UniXNU-device/dts/board.dts
dtc -I dts -O dtb -i "$SOC_DTS" -o /tmp/board-hardware.dtb "$BOARD_DTS"
dtc -I dtb -O dts /tmp/board-hardware.dtb

检查 reg、ranges、phandle、中断 provider 和禁用节点,再按ADT 转换 生成 OS 所需属性。追踪平台源码中每个属性的读取位置,确保名称、字节序和宽度一致。

预期结果: platform expert 发布预期 nub,启动核收到定时器中断,启用的次级核完成入口并收到 IPI。 使用其他 GIC 或 PSCI 接口时,启用更多 CPU 前核对 ArmCpu 实现。

能效簇与性能簇 ​

SoC 有两类核心时,在板级 DTS 中给每个 CPU 节点加 unixnu,cluster-type = "E" 或 "P"。ADT 随后带上每个 CPU 的 cluster-type,调度器补丁让 XNU 的 Edge 调度器按一个 E 簇和一个 P 簇运行。sheng 参考:

输入sheng 取值
E 簇cpu0 至 cpu2(Cortex-A510)
P 簇cpu3 至 cpu7(Cortex-A715、A710 和 X3)
DTSdts/sheng.dts
调度器补丁patches/xnu/zzyf-sheng-amp.patch

该补丁让 UI 线程留在 P 簇。用 CPU 调频器各频域的忙碌比例检查结果:UI 负载应落在 P 频域。

2. 核对内存和 DMA ​

对照固件 RAM、安全保留区、帧缓冲、DSP/GPU 固件、payload 和内核分配。 硬件 DTS 使用连续交接 RAM 范围;加载器拥有的内存请求有独立大小与对齐约束。 两者都应与实际 UEFI 内存映射一致。

对每个 DMA 设备记录地址宽度、物理地址到 IOVA 的映射、SMMU 实例/stream/context 所有权和缓存策略。 目标匹配其转换模型时阅读 ArmSmmu4K。 GPU、UFS、SPI 和 PCIe 可使用不同 stream 与分配策略。追踪消费端的 MMIO 与映射输入,确认其读取 DTS 属性还是板级常量。

预期结果: 每项交接分配有明确所有者,各外设在提交任务前能访问其 DMA 范围。 随后按 UFS 适配处理存储控制器。

3. 接入块设备和 OS 服务 ​

组件适配工作预期观测
RamBlock匹配 dense/packed Data 格式与 ADT 占位符,为目标存储策略实现 native_ufs_store 持久化回调Data 挂载,写入和重启行为符合选定持久化模式
VirtioMmioBlock提供 VirtIO MMIO 设备、队列、DMA 和中断路由,确认存储 ABI 绑定挂载根卷前确认容量和读取正确
VerifiedRoot提供选定镜像的 owner policy 与信任输入,接入存储策略归档目标镜像通过策略验证
SoftwareAES匹配 XNU AES 辅助接口与 IOCryptoAcceleratorFamily ABI,为 OS profile 构建绑定加密服务发布,需要的卷操作完成
AppleKeyStoreState根据 OS 确认 selector 和状态回调,接入初始化与事件调用方所需状态查询与通知完成
XnuPrelink选择匹配的 XNU、原始 kernelcache、归档绑定和补丁顺序预链接解析选定驱动并生成内核
DarwinBoot将加载器加入固件或 payload,提供 Mach-O、ADT 和所需 sidecar加载器验证输入并报告内核交接
ShengPreflight阅读 sheng 检查,再为目标固件和内存布局编写检查目标固件输入通过对应检查

所需产物见预链接、完整性策略、 payload和 userdata。 根卷 UUID、分区布局、Data 持久化和日志分配保留在设备配置中,OS profile 提供对应版本的 ABI。

4. 检查组装后的选择 ​

从主仓库执行:

sh
./unixnu status --json
./unixnu build kernel

构建前检查依赖顺序、配置片段和补丁序列。每项归档需要对应 OS 输入及初始化调用方。 内核指南说明构建输出和失败处理。

在移植记录中分别记录源码/构建证据与设备结果。 接下来完成存储,再进入显示与亮度。

Released under the BSD-2-Clause-Patent License.