4. 硬件平台认知
BSP 适配的第一步不是写代码,而是"读懂板子"。同一颗 SoC 可以衍生出几十款形态各异的板卡,BSP 工程师必须能区分哪些差异由 SoC 决定、哪些由板级设计决定,并能在原理图、数据手册、内存映射三份材料之间快速建立对应关系。本章围绕这一能力展开。
一、SoC 架构:从内核到外设的层次
现代 SoC 通常由 CPU 集群、互连总线、存储控制器、外设控制器和电源时钟域组成。以典型 ARM64 应用处理器为例,CPU 集群通过 CCI/CMN 等一致性互连接入总线,DDR 控制器、GPU、VPU、显示控制器、USB、PCIe、以太网等作为总线主设备或从设备挂载其上。BSP 关注的核心是:哪些模块由 SoC 内部固定,哪些引脚和时钟可以外引到板级。
SoC 内部还包含大量"软配置"资源:引脚复用控制器(Pinmux)、时钟控制器(CCU/CRU)、复位控制器、电源域控制器(PMU/PD)。这些模块决定了外设能否工作,也是 BSP 中设备树和驱动最常修改的部分。
二、参考板与目标板差异
芯片原厂通常提供一块参考设计板(EVB/Reference Board),其 BSP 已跑通全部外设。目标板(客户板)往往在参考板基础上做了裁剪、替换或扩展。差异主要集中在以下几类:
- 引脚复用差异:同一引脚在参考板上接 UART,在目标板上可能接 I2C,Pinmux 配置必须重写。
- 外设增减:目标板可能去掉 HDMI、增加 CAN 或第二路以太网,设备树节点需增删。
- 器件替换:PHY、PMIC、Flash、WiFi 模组换型号,驱动兼容字符串和时序参数随之变化。
- 电源与时钟:供电轨数量、上电时序、晶振频率不同,直接影响驱动初始化和时钟树配置。
- 内存容量与布局:DDR 颗粒容量、位宽、频率变化,需重新做 DDR 训练参数。
实践中建议先做一张"差异对照表",把参考板与目标板逐项比对,再决定哪些直接复用、哪些必须修改。
| 对比项 | 参考板 | 目标板 | BSP 影响 |
|---|---|---|---|
| 调试串口 | UART2 | UART0 | 修改 stdout-path 与 Pinmux |
| 以太网 PHY | RTL8211 | YT8531 | 更换 PHY 驱动与复位 GPIO |
| DDR 容量 | 4GB | 2GB | 调整内存节点与训练参数 |
| PMIC | RK8xx | 分立 DCDC | 重写 regulator 节点 |
三、原理图与数据手册阅读方法
原理图回答"板子上怎么连",数据手册回答"SoC 内部怎么用",两者必须交叉阅读。推荐流程如下:
- 先看原理图的电源树,确认各路供电电压、上电顺序和使能信号。
- 再看时钟树,确认晶振频率、时钟输入引脚和分频关系。
- 定位目标外设,沿网络标号找到 SoC 引脚编号,记录引脚名与复用功能。
- 打开数据手册的 Pinmux 表和寄存器手册,确认该引脚的复用寄存器位域。
- 核对中断引脚、复位引脚、片选引脚,写入设备树。
阅读时重点关注网络标号命名规律,例如 GPIO1_A2、I2C3_SCL_M0,其中 M0/M1 表示复用组,选错组会导致外设无响应。数据手册中要重点查阅电气特性、时序参数和寄存器基地址。
# 从设备树反查引脚复用状态
cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins
# 查看已注册的 regulator 与电压
cat /sys/kernel/debug/regulator/regulator_summary
# 查看时钟树
cat /sys/kernel/debug/clk/clk_summary
四、内存映射与地址空间
SoC 内部各控制器通过固定物理地址访问,形成内存映射(Memory Map)。BSP 工程师需要区分三类地址:
- DRAM 地址空间:内核、设备树、ramdisk 加载位置,通常由启动参数
bootargs指定。 - 外设寄存器空间:如 UART、GPIO、I2C 控制器基地址,驱动通过
reg = <0x0 0xff1c0000 0x0 0x1000>声明。 - 保留内存:给 TrustZone、VPU、显示 framebuffer 预留的区域,需在设备树
reserved-memory中声明,避免被内核占用。
地址映射错误是 BSP 调试中最常见的故障源之一:寄存器基地址写错会导致读写无响应,保留内存未声明会导致显示花屏或随机崩溃。建议在启动日志中核对 Memory: 行与设备树 memory 节点是否一致。
五、案例:一次以太网不通的排查
某目标板以太网无法识别 PHY。排查路径:先查原理图确认 PHY 地址为 0x1,再查设备树 phy-handle 与 reg 是否匹配,发现设备树仍沿用参考板的 0x0;同时复位 GPIO 引脚号因 Pinmux 变更而错误。修正两处后网络恢复。该案例说明:原理图、数据手册、设备树三者必须闭环核对。
六、复盘与建议
硬件平台认知不是一次性工作,而是贯穿 BSP 全流程的基础能力。建议建立三份文档:板级差异对照表、关键引脚与地址清单、原理图-设备树映射表。每次修改设备树后,回到原理图和数据手册核对一遍,能显著降低"改一处、坏三处"的风险。掌握这套方法后,面对任何新板卡都能快速定位适配切入点。