4.2. 硬件点亮指引
硬件
4.2.1. 硬件点亮基本流程
这一
4.2.1.1. 最小系统准备阶段
在
板级
配置 与 基本 驱动 开发 在 BSP(源码
在 SDK 交付 包 的 board_support_package/platform_source_code.tar.gz)代码 中 新增 板级 配置文件,例如 board_xxx_config.mk(xxx是用户 自定义 的 名称,例如 x5_evb_release),以适配 新 硬件平台。 在 U-Boot 中
添加 新 硬件 的 Board ID。 在 U-Boot 和 Kernel 中
添加 相关 配置文件 和 设备树( DTB),包括 管脚 复用 配置、功能 开关 设置 等。 根据
硬件 设计 完成 低速 总线 外设 驱动(如 UART、 I2C、 SPI、 PWM 等)的 移植,确保 完成 以太网 和 USB 等 的 驱动 适配。 根据
产品设计 需求 规划 分区表。
硬件
设计 检查 与 电压 域 配置 根据
设计 确认 所有 功能模块 的 管脚 电压 域 配置,确保 与 硬件 电路设计 一致。 特别
注意:错误 的 电压 域 配置 可能 导致 芯片 损坏 或 设备 不可 预测 行为,应 格外 重视。
参与
4.2.1.2. 硬件回板检查与调试
硬件
检查 外观
检查 :确保元器件 无漏 贴、错贴 或 焊接 问题。 供电
检查 :上电后,使用万用表 或 示波器 测量 芯片 供电 是否 稳定、符合 设计 要求。
初步
功能 验证 通过
串口 连接 设备,观察 debug 串口 输出 日志: 无
日志 :需重点 检查 供电、复位 信号 及时 钟源 是否 正常。 日志
异常 :根据错误 提示 定位问题 原因。 正常
日志 : 为烧录 系统 镜像 的 硬件,上电 启动 时,正常 会 进入 串口 下载 模式,在 串口 上 连续 打印 C字符。
系统
烧录 烧录
最小 系统 镜像,具体操作 参考 系统 镜像 。烧写 指南
参与
4.2.1.3. 启动异常排查
miniboot 阶段
卡住 检查 DDR 的
型号、容量 是否 识别 正确,确保 参数 Training 成功。 确认 U-Boot 加载
流程 无 异常。
U-Boot 阶段
卡住 检查
硬件 Board ID 是否 识别 正确。 检查 Kernel 加载
参数( bootargs/cmdline)是否 正确。 检查
是否 加载 了 正确 的 设备树。
参数
4.2.1.4. 系统功能摸底
内核
启动 验证 检查
内核 启动 日志,确认 驱动 模块 加载 和 设备 驱动 初始化 无误。 验证
根 文件系统、应用程序( app)、用户 数据 分区( userdata)挂载 是否 正常。
功能
接口 测试 测试
网络接口(如 SSH 登录)、 USB 端口 功能(如 ADB 连接)是否 正常。 硬件
上 有 以太网 的 情况 下,确保 系统 可以 进入 shell 并 完成 基本操作。 硬件
上 有 USB 从 设备 接口 的 情况 下,确保 系统 可以 进入 adb shell 并 完成 基本操作。
参与
4.2.1.5. 系统稳定性测试
压力
测试 对 CPU、 DDR、 BPU 、 eMMC / Nand Flash 等
核心 硬件 进行 高 负载 测试。 根据
具体 产品 需求 测试 特定 功能模块 的 性能 和 稳定性。
参与
4.2.2. 新增板级配置
板级
在
以下device/horizon/x5/board_x5_evb_release_config.mk 的
#!/bin/bash
export HR_TARGET_VENDOR="horizon"
export HR_TARGET_CHIP="x5"
export HR_SECURE_CHIP=y
export HR_TARGET_BIT="64"
export HR_TARGET_MODE="release"
# 板级名称,对应每一个新的硬件型号
export HR_BOARD_TYPE="soc"
# 编译 out 目录
export HR_BUILD_OUTPUT_DIR=${HR_TOP_DIR}/out
# 编译中间文件输出目录,如 uboot、 kernel、 hbre 的编译目录
export HR_TARGET_BUILD_DIR=${HR_BUILD_OUTPUT_DIR}/build
# 产出镜像输出路径,本目录下的镜像文件用于烧录和发布
export HR_TARGET_PRODUCT_DIR=${HR_BUILD_OUTPUT_DIR}/product
# 从 build 到 product 的中间产物,如内核、设备树、根文件系统的原始目录和文件
export HR_TARGET_DEPLOY_DIR=${HR_BUILD_OUTPUT_DIR}/deploy
# 编译日志保存目录
export HR_BUILD_LOG_DIR=${HR_BUILD_OUTPUT_DIR}/build_log
# 板级配置文件存放目录
export HR_BOARD_CONF_DIR=${HR_TOP_DIR}/"device/horizon/${HR_TARGET_CHIP}/board_cfg/${HR_BOARD_TYPE}"
# 配置交叉编译工具链
export ARCH="arm64"
export TOOLCHAIN_PATH=/opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu
export CROSS_COMPILE=${TOOLCHAIN_PATH}/bin/aarch64-none-linux-gnu-
# 使能 ccache,加速编译
export HR_CCACHE_SUPPORT=y
export CCACHE_COMMAND="ccache"
export HR_APPEND_CXX_OPTIONS="-DCMAKE_CXX_COMPILER=\"${CCACHE_COMMAND}\" -DCMAKE_CXX_COMPILER_ARG1=\"${CROSS_COMPILE}g++\" -DCMAKE_C_COMPILER=\"${CCACHE_COMMAND}\" -DCMAKE_C_COMPILER_ARG1=\"${CROSS_COMPILE}gcc\""
export HR_CCACHE_DIR="$HOME/.ccache"
# 构建系统常用的工具软件存放路径,比如 fiptool
export HR_BUILD_TOOL_PATH=${HR_TOP_DIR}/build/tools
# 分区表, mbr, gpt 内容处理的工具软件存放路径
export HR_PARTITION_TOOL_PATH=${HR_TOP_DIR}/build/tools/partition_tools
# avbtools 工具脚本存放路径,在对 kernel 和分区文件系统添加校验信息时需要使用到( mk_system.sh)
export HR_AVB_TOOLS_PATH=${HR_TOP_DIR}/build/tools/android_tools/avbtools
export HR_BD_IMG_TOOLS_PATH=${HR_TOP_DIR}/build/tools/android_tools/build_image
# 分区表配置文件所在目录和文件名
export HR_PART_CONF_FILENAME=${HR_BOARD_CONF_DIR}/x5-soc-release-gpt.json
export BLK_SZ=512
export MMC_UFS_ERASE_SIZE=524288
export NOR_ERASE_SIZE=32768
export HYPER_ERASE_SIZE=262144
# uboot 编译配置文件
export HR_UBOOT_CONFIG_FILE=hobot_x5_auto_defconfig
export HR_ARCH_UBOOT="arm"
# 指定 uboot 源码的输出目录,如果不设置,则在源码目录下编译
export HR_UBOOT_OUTPUT_DIR=${HR_TARGET_BUILD_DIR}/uboot
# kernel 配置
# kernel 编译配置文件
export HR_KERNEL_CONFIG_FILE=hobot_x5_soc_perf_defconfig
export HR_ARCH_KERNEL="arm64"
# 指定内核源码的输出目录,如果不设置,则在源码目录下编译
export HR_KERNEL_OUTPUT_DIR=${HR_TARGET_BUILD_DIR}/kernel
# system 配置
# 指定根文件系统类型和预编译的文件系统路径
export HR_SYSTEM_TYPE="buildroot"
export HR_SYSTEM_DIR=${HR_TOP_DIR}/system/buildroot/prebuilt
# 根文件系统的分区名,需要和分区表配置对应
export HR_SYSTEM_PART_NAME="system"
# system verify method: dm-verity, crypt
export HR_SYSTEM_VERIFY="dm-verity"
# 设置 SDK 版本
source "${HR_TOP_DIR}/device/${HR_TARGET_VENDOR}/${HR_TARGET_CHIP}/dr_release_version.mk"
export HR_BUILD_VERSION="${HR_RELEASE_VERSION}"
# antirollback version
export ANTIROLLBACK_SEC_UPDATE="false"
export ANTIROLLBACK_SEC_VER=0
export ANTIROLLBACK_NOSEC_UPDATE="false"
export ANTIROLLBACK_NOSEC_VER=0
# 环境变量配置标志,用来标识当前 env 环境已经完成了板级配置项的设置
export HR_IS_BOARD_CONFIG_EXPORT="true"
4.2.2.1. 关键配置项解析
目标
硬件 信息 HR_TARGET_VENDOR和HR_TARGET_CHIP定义了 目标 硬件 的 供应商 和 芯片型号。 HR_BOARD_TYPE用于区分 具体 的 硬件 板型。
编译
输出 路径 HR_BUILD_OUTPUT_DIR是所有 编译 产物 的 总目录, HR_TARGET_PRODUCT_DIR用于存放 最终 产出 的 镜像文件。
工具链
配置 使用
CROSS_COMPILE配置交叉 编译 工具链,支持 指定 编译 架构 和 工具 路径。
分区表
选择 使用
HR_BOARD_CONF_DIR、HR_PART_CONF_FILENAME指定使用 的 分区表 配置文件。
模块
配置 包括 U-Boot、 Kernel、系统
分区表 等 模块 的 编译 配置文件 和 路径 设置。
优化
与 工具 支持 启用
ccache可以加速 编译,通过 工具 路径 定义 便于 调用 构建 工具 和 分区 工具。
4.2.2.2. 分区配置
分区表HR_BOARD_CONF_DIR、HR_PART_CONF_FILENAME 关键
# 板级配置文件存放目录
export HR_BOARD_CONF_DIR=${HR_TOP_DIR}/"device/horizon/${HR_TARGET_CHIP}/board_cfg/${HR_BOARD_TYPE}"
# 分区表配置文件所在目录和文件名
export HR_PART_CONF_FILENAME=${HR_BOARD_CONF_DIR}/x5-soc-release-gpt.json
分区表
分区表文件说明
分区表device/horizon/x5/board_cfg/*,文件gpt.json 结尾。
以 device/horizon/x5/board_cfg/soc/x5-soc-release-gpt.json 为例:
{
"gpt": {
"size": "20k"
},
"mbr": {
"size": "4k"
},
"miniboot": "sub_config/miniboot.json",
"misc": {
"size": "4k"
},
"uboot": {
"part_type": "GOLDEN",
"size": "2m"
},
"ubootenv": {
"size": "256k"
},
"vbmeta": {
"part_type": "GOLDEN",
"size": "16k"
},
"boot": {
"part_type": "GOLDEN",
"size": "12m"
},
"system": {
"fs_type": "ext4",
"part_type": "GOLDEN",
"size": "250m"
},
"hbre": {
"fs_type": "ext4",
"part_type": "GOLDEN",
"size": "200m"
},
"app": {
"fs_type": "ext4",
"part_type": "GOLDEN",
"size": "700m"
},
"private": {
"fs_type": "ext4",
"part_type": "GOLDEN",
"size": "256k"
},
"userdata": {
"fs_type": "ext4",
"size": "50m"
}
}
分区
gpt: 此
分区表 镜像 保存 位置,U-Boot 、Kernel 和 用户 态 的 parted、fdisk 工具 会 读取 此 信息 获得 系统 得 分区表。 mbr: 此
分区 存放 ROMCODE 能 解析 的 分区 信息,记录 BL2、DDR 参数、BL3x 等 固件 在 镜像 中 的 存放 位置。 miniboot: 该
定义 是 一个 分区 子集,在 sub_config/miniboot.json文件中 包含 miniboot.img 镜像 内部 的 分区 情况。用户 不 需要 去 修改 它,否则 会 带来 不必要 的 适配 开发 工作。 misc: 在
运行 时此 分区 记录 升级 信息,并 在 AB 分区 模式 下 保存 当前 使用 的 分区 编号。 uboot: miniboot 分区
之后 必须 是 , miniboot 的以 uboot 或者 u-boot 为 前缀 命名 的 分区 名 镜像 的 整体 打包 会 依赖 该 分区 名 做 为 分界线。 ubootenv: 在 U-Boot 下
执行 saveenv 后 会 保存 U-Boot 环境变量 到 该 分区。 boot、system、vbmeta: vbmeta 分区
默认 会 储存 boot、 system 的 avb 验证 信息。如果 开启 安全 启动 功能 的 情况 下,这 三个 分区 需要 同步 更新。如果 用户 想要 修改 这 三个 分区 的 命名,需要 在 uboot 中 修改 对应 的 代码。根 文件系统 里面 需要 修改 hb-fstab 调整 分区 挂载 配置。 其他
分区 : 其他分区 用户 可以 根据 产品 实际 需要 进行 调整。
必选
fs_type: 定义
该 分区 镜像 的 文件系统 类型,必须 提供。可以 选择 以下 之一: raw/null: 表示
原始数据 类型 的 镜像。 ext4/fat32:表示
具体 文件系统 类型。
size: 表示
该 分区 镜像 的 总 占用 空间,必须 提供(单位 为 k、 m、 g)。在 NOR Flash 存储器 上,必须 按照 64KB 对齐;在 eMMC 存储 上,必须 按照 4KB 对齐。确保 分区 镜像 的 总 占用 空间 等于 分区 组件 占用 空间 之 和。
可
part_type: 定义
分区 升级 类型(可 选 属性)。可 选择 以下 之一: AB: 双
分区,用于 A/B 系统 更新。 BAK: 备份
分区,当主 分区 无法 正常 使用 时,会 尝试 从 备份 分区 启动,是 保证系统 稳定性 的 一种 策略。 GOLDEN: 单
分区,用于 常规 系统 更新。 PERMANENT: 永久性
分区,不会 进行 升级 的 分区。若 不 。配置,默认 为本 属性
ota_is_update: 定义
分区 是否 可以 进行 OTA 升级(可 选 属性)。可 选择 以下 之一: true: 支持
进行 OTA 升级。 false: 不
支持 进行 OTA 升级。若 不 。配置,默认 为本 属性
ota_update_mode: 定义
分区 的 OTA 升级 方式( ota_is_update必须为 true)。可 选择 以下 之一: image: 镜像
全量 升级。
medium: 表示
这个 分区 镜像 烧录 的 介质。 fde_type: 定义
用户 分区 的 加密 方式,可 选择 以下 方式: key-file: 使用key文件
直接 加解密 分区,详细 操作 方式 可以 参考 用户 分区 加密: key-file 方案
注意
如果
4.2.2.3. U-Boot 选项配置
板级board_xxx_config.mk 会
# 建议:每次新增硬件时都对应添加一套 HR_BOARD_TYPE、 HR_UBOOT_CONFIG_FILE、 HR_KERNEL_CONFIG_FILE、 uboot 和 kernel 下的 dts 设备树
# uboot 编译配置文件
export HR_UBOOT_CONFIG_FILE=hobot_x5_auto_defconfig
export HR_ARCH_UBOOT="arm"
# 指定 uboot 源码的输出目录,如果不设置,则在源码目录下编译
export HR_UBOOT_OUTPUT_DIR=${HR_TARGET_BUILD_DIR}/uboot
为
配置文件
路径: configs/设备树
文件 路径: arch/arm/dts/
建议
HR_UBOOT_CONFIG_FILE( U-Boot 配置文件)U-Boot 设备树
文件
4.2.2.4. Kernel 选项配置
板级board_xxx_config.mk 会
# kernel 编译配置文件
export HR_KERNEL_CONFIG_FILE=hobot_x5_soc_perf_defconfig
export HR_ARCH_KERNEL="arm64"
# 指定内核源码的输出目录,如果不设置,则在源码目录下编译
export HR_KERNEL_OUTPUT_DIR=${HR_TARGET_BUILD_DIR}/kernel
为
配置文件
路径: arch/arm64/configs/设备树
文件 路径: arch/arm64/boot/dts/hobot/
新增
HR_KERNEL_CONFIG_FILE( Kernel 配置文件)Kernel 设备树
文件
4.2.3. 在 U-Boot 下新增硬件
当
定义新
的 Board ID 为
新 硬件 分配 一个 唯一 的 Board ID,这样 可以 在 系统 中 区分 不同 的 硬件平台。在 X5 平台 上, Board ID 通过 4 个 ADC 通道 来 定义,基于 不同 的 外部 电压 值 进行 硬件 识别。该 Board ID 在 系统启动 时 用于 确定 当前 硬件平台 的 配置,并 据此 加载 相应 的 固件 或 驱动。 有关 Board ID 的
详细信息,请参阅 硬件 Board ID 概述 。 注:在 U-Boot 调试
阶段,用户 也 可以 选择 在 软件 中 强制 定义 Board ID,而 无需 依赖 硬件 的 ADC 通道。这种 方法 可以 方便 地 在 开发 和 测试阶段 进行 硬件 适配 和 调试。 在 U-Boot 中
进行 移植 在 U-Boot 中,需要
根据 新 硬件 的 特性 进行 适配,修改 或 添加 相应 的 配置文件。具体 的 移植 工作 包括: 新增 U-Boot 配置文件。
添加
或 修改 硬件 相关 的 设备树( Device Tree)文件,以 支持 新 硬件 的 外设 和 功能。
通过
4.2.3.1. 硬件 Board ID 概述
在 X5 平台
ADC_VINS0 :主板
类型,即 不同 的 X5 项目 用 不同 的 ID 区分。比如:用户 内部 有 两个 X5 项目 序列,那么 可以 使用 VIN0 外部 配置 不同 分压,以 进行 区分。 ADC_VINS1 :用于
在 某 一 项目 序列 下,区分 不同 的 硬件 版本。比如:第一次 硬件 发板、第二次 硬件 发板。 ADC_VINS2 : DDR 参数
配置,用户 应当 根据 对应 主板 BOM 的 DDR 配置,必须 严格 。按照 官方 硬件 参考 设计 选择 对应 档位 ADC_VINS6 :预留
档位,建议 用户 NC。如 有 ADC 需求,优先 选用 其他 ADC 通道( ADC_VIN )。
硬件 Board ID 的

ADC 外
参考
高
阻值 电阻,会 导致 内部 ADC 采样 存在 明显 的 RC 效应,影响 采样 精度。 高
阻值 电阻 更 容易 引入 噪声。 ADC 在
应用 时,大部分 时候 都 会 在 50K Ω 以内, 100K Ω 以上 应用 很少 见。
如下
| 模拟 |
R1 | R2 | 精度 |
|---|---|---|---|
| 100mV | 16K | 1K | 1% |
| 200mV | 16K | 2K | 1% |
| 300mV | 10K | 2K | 1% |
| 400mV | 23.7K | 6.8K | 1% |
| 500mV | 5.1K | 2K | 1% |
ADC 电压
建议
每
ADC_VINS2 为
X5 平台
支持 的 DDR 规格 为 总位 宽 32 位 ,采用 2 通道设计 ,每通道 位 宽 为 16 位(即 2CH x 16 = 32 位)。 DDR 颗粒 架构 中 的 各个 Die 位 宽 要求 为 x16。在 设计 中需 确保 DDR 的 频率、容量 满足 平台 性能需求,同时 注意 PCB 布线 的 信号 完整性 和 等 长 设计,以 确保 系统 稳定性 和 兼容性。 X5 支持 LPDDR4 和 LPDDR4X 两种
模式;支持 单 Rank 和 双 Rank 两种 模式,需要 通过 ADC_VINS2 区分。 ADC_VINS2 的
档位 无需 体现 DDR 容量, 目前 支持 1GB / 2GB / 4GB / 8GB 容量 的 DDR。 具体
支持 的 型号,请 参考 Approved Vendor List。
特别
ADC 采样

4.2.3.2. 新增 U-Boot 选项配置文件
以som 的
进入 U-Boot 源码
树 首先
进入 U-Boot 的 源码 目录,并 导航 到 configs子目录。复制
基础 配置文件 使用
现有 的 hobot_x5_auto_defconfig作为基础 配置文件,为 新 硬件 生成 专属 配置文件。例如,对于 一个 名为 som的核心 板,可以 按 以下 命令 命名 新 的 配置文件 为 hobot_x5_som_defconfig:cd configs cp hobot_x5_auto_defconfig hobot_x5_som_defconfig
修改
配置 项 根据
新 硬件 的 产品设计 需求,编辑 hobot_x5_som_defconfig文件,调整其中 的 配置 项,例如 启动 参数、存储 接口、外设 支持 等 内容,以 适配 硬件 特性。
4.2.3.3. 新增软件 Board ID 的定义
在
以som 的
修改 Kconfig 文件
在 drivers/horizon/Kconfig 文件choice 项,用于
config HOBOT_X5_SOM
bool "X5SOM"
help
Select this option for Board Type X5 SOM.
该X5 SOM。
修改 Board ID 的宏定义
在 include/dt-bindings/board/hb_board_id.h 文件
新增
软件 Board ID 的 宏 定义 为
新 硬件 分配 一个 唯一 的 ID,例如: #define HOBOT_X5_SOM_ID 0x2000添加
宏 条件 判断 将
新 的 宏 定义 与 对应 的 配置 选项 绑定,确保 系统 在 识别 硬件 时 正确 加载 相应 的 Board ID。示例 如下: #if defined(CONFIG_HOBOT_X5_FPGA) #define HOBOT_X5_BOARD_ID HOBOT_X5_FPGA_ID #elif defined(CONFIG_HOBOT_X5_EVB) #define HOBOT_X5_BOARD_ID HOBOT_X5_EVB_ID #elif defined(CONFIG_HOBOT_X5_SOM) #define HOBOT_X5_BOARD_ID HOBOT_X5_SOM_ID #elif !defined(CONFIG_HOBOT_ADC_BTYPE) #define CONFIG_HOBOT_ADC_BTYPE #endif
避免软件 Board ID 冲突
官方 BSP 中
检查新增内容
使用 git diff 检查
diff --git a/include/dt-bindings/board/hb_board_id.h b/include/dt-bindings/board/hb_board_id.h
index 8ed2b921ee..b12f4b5505 100644
--- a/include/dt-bindings/board/hb_board_id.h
+++ b/include/dt-bindings/board/hb_board_id.h
@@ -13,6 +13,7 @@
#define HOBOT_X5_EVB_ID 0x0201
#define HOBOT_X5_EVB_V2_ID 0x0202
#define HOBOT_X5_RDK_ID 0x0301
+#define HOBOT_X5_SOM_ID 0x2000
#if defined(CONFIG_HOBOT_X5_FPGA)
#define HOBOT_X5_BOARD_ID HOBOT_X5_FPGA_ID
@@ -24,6 +25,8 @@
#define HOBOT_X5_BOARD_ID HOBOT_X5_EVB_ID
#elif defined(CONFIG_HOBOT_X5_EVB_V2)
#define HOBOT_X5_BOARD_ID HOBOT_X5_EVB_V2_ID
+#elif defined(CONFIG_HOBOT_X5_SOM)
+ #define HOBOT_X5_BOARD_ID HOBOT_X5_SOM_ID
#elif !defined(CONFIG_HOBOT_ADC_BTYPE)
#define CONFIG_HOBOT_ADC_BTYPE
#endif
硬件 Board ID 和软件 Board ID 的关系
硬件 Board ID 是
通过 ADC 通道 的 电压 值,读取 的 唯一 标识,用于 启动 时 识别 硬件平台。 软件 Board ID 是
在 开发 和 编译 过程 中 定义 与 硬件 Board ID 有 映射 关系 的 软件 定义。
通过
4.2.3.4. 新增 U-Boot 下的设备树
以som 的
创建设备树文件
进入 U-Boot 的arch/arm/dts,复制x5-soc.dtsi 文件x5-som.dtsi:
cd arch/arm/dts
cp x5-soc.dtsi x5-som.dtsi
在x5-som.dtsi 中
修改
supported-btype节点的 值 为 HOBOT_X5_SOM_ID(在新增 软件 Board ID 的 定义 章节 中 添加 的 定义)。
btype-dev = &board_type;
supported-btype =
<
HOBOT_X5_SOM_ID
>;
把 x5-som.dtsi 文件
中 所有 的 x5_soc替换为 x5_som。
在主设备树文件中添加新文件
将x5-som.dtsi 文件arch/arm/dts/x5.dtsi 中。在
#include "x5-soc.dtsi"
#include "x5-som.dtsi"
修改 board_type 配置
在 arch/arm/dts/x5.dtsi 文件board_type 节点
在
board_type_array中新增 HOBOT_X5_SOM_ID的定义。例如 新增 <51 140 151 240 HOBOT_X5_SOM_ID 5 0 0 1 4>:board_type: board_type { compatible = "hobot,btype"; adc_dev = &adc, &adc; adc_channel = <0 1>; board_type_array = ... ( 省略 ) ... <51 140 151 240 HOBOT_X5_SOM_ID 5 0 0 1 4>, ... ( 省略 ) ... hardware_array = "x5-fpga", "x5-soc", "x5-svb", "X5_EVB_LP4", "X5_EVB_LP4X", "X5-SOM"; ethact_array = "default"; net_eth0_ipaddr = "192.168.1.10"; pmic_type = "dual-pmic", "single-pmic"; board_version = "1_A", "1_B", "V1P2", "V1P3", "V0P1"; };
确保
hardware_array中新增 对应 的 硬件 名称 "X5-SOM":hardware_array = "x5-fpga", "x5-soc", "x5-svb", "X5_EVB_LP4", "X5_EVB_LP4X", "X5-SOM";
board_type_array 中
前 4 个
字节 定义 了 ADC 通道 的 电压 值 范围,用于 硬件 识别: 51 140:对应ADC_VINS0通道的 电压 范围( 51 ~ 140 mV),用于 区分 硬件 类型。硬件 上 的 分压 电路 将 电压 分压 至 100 mV 左右,设置 该 范围 以 适应 可能 的 电压 波动。 151 240:对应ADC_VINS1通道的 电压 范围( 151 ~ 240 mV),用于 区分 硬件 版本。硬件 上 的 分压 电路 将 电压 分压 至 200 mV 左右,设置 该 范围 以 适应 可能 的 电压 波动。
第 5 个
字节 表示 软件 Board ID ( HOBOT_X5_SOM_ID) 硬件
与 软件 Board ID 的 绑定 逻辑 如下: 如果 U-Boot 选项
中 启用 CONFIG_HOBOT_ADC_BTYPE,系统会 通过 hb-btype.c驱动读取 硬件 板卡 的 ADC 通道 电压 值,并 与 设备树 board_type_array中定义 的 电压 值 范围 进行 匹配,以 确定 对应 的 硬件 类型 和 硬件 版本。匹配 成功 后,系统 会 将 硬件 Board ID 映射 为 对应 的 软件 Board ID,用于 后续 的 设备 识别 和 适配。 例如,对于
board_type_array定义<51 140 151 240 HOBOT_X5_SOM_ID 5 0 0 1 4>,当硬件 的 ADC_VINS0通道检测 到 电压 值 在 51 ~ 140 mV范围内,且 ADC_VINS1通道检测 到 电压 值 在 151 ~ 240 mV范围内时,系统 会 识别 当前 硬件 为 HOBOT_X5_SOM_ID。
其他
字 段 含义 从
HOBOT_X5_SOM_ID开始,每个字 段 对应 不同 的 硬件 特性 配置 数组,数字 代表 对应 数组 的 下标: 硬件
型号 命名 ( hardware_array)以太网
配置 ( ethact_array)IP 地址 (
net_eth0_ipaddr)硬件
使用 的 单个 PMIC 还是 双 PMIC ( pmic_type),绝大部分情况 都 只 使用 single-pmic硬件
版本 ( board_version)
例如
<51 140 151 240 HOBOT_X5_SOM_ID 5 0 0 1 4>中的 5 对应 hardware_array 中 的 X5-SOM,其他字 段 同理。
注意事项
字符串
长度 限制 hardware_array 和 board_version 中
的 字符串 会 传递 到 Kernel 的 设备树 中,影响 socinfo 驱动 的 以下 字 段: hw_nameboard_versionhw_info
需socinfo 驱动
必要
调整 如果
字符串 长度 超出 限制,请 同时 更新 Kernel 的 设备树 占位 符,具体 参考 boardinfo 调试 指南 。
4.2.3.5. 在 U-Boot 配置中应用 Board ID
完成CONFIG_HOBOT_X5_SOM 宏为
使用新增的选项配置文件
执行
make ARCH=arm hobot_x5_som_defconfig
make ARCH=arm menuconfig
Location:
│ -> Device Drivers
│ (1) -> Horizon SOC drivers
在 menuconfig 界面Horizon SOC drivers,选择HOBOT_X5_SOM),确保

保存配置
在 menuconfig 界面
# 使用 savedefconfig 保存最小化的配置项
make ARCH=arm savedefconfig
# 对比修改内容(如果使用 git 管理代码,可以跳过此步骤,直接使用 git diff 查看修改)
diff defconfig configs/hobot_x5_som_defconfig
# 确认无误后,将配置覆盖到源文件
cp defconfig configs/hobot_x5_som_defconfig
通过
4.2.4. 在 Kernel 下新增硬件
相对
不
需要 再 定义 Board ID, U-Boot 下 的 定义 会 直接 传导 过来 U-Boot 下
的 设备树 配置 更加 简单,只 需 保证 基本 的 初始化 和 引导 系统启动。 Kernel 负责 操作系统 加载 后 硬件 功能 的 全面 管理,配置文件 和 设备树 更 细致,涵盖 了 完整 的 外设 驱动 支持(如 GPIO、 I2C、 SPI、显示 设备)和 功能模块 的 使 能 / 禁用。 Kernel 下
增加 的 设备树 文件 全都 可以 独立 编译成 DTB 文件,用户 可以 选择 使用。 U-Boot 下 的 设备树 文件 都 包含 在 一个 DTB 文件 中,驱动 根据 硬件 Board ID 完成 匹配。
4.2.4.1. 新增 Kernel 配置文件
进入 Kernel 源码arch/arm64/configs,复制hobot_x5_soc_defconfig 文件hobot_x5_som_defconfig):
cd arch/arm64/configs
cp hobot_x5_soc_defconfig hobot_x5_som_defconfig
根据
4.2.4.2. 新增设备树
Kernel 设备树arch/arm64/boot/dts/hobot,目录
.
├── Makefile
├── pinmux-func.dtsi
├── pinmux-gpio.dtsi
├── x5-evb-lp4-1_a.dts
├── x5-evb-lp4-1_b.dts
├── x5-evb-lp4-v1p2.dts
├── x5-evb-lp4-v1p3.dts
├── x5-evb-lp4-v2p0.dts
├── x5-evb-lp4x-v0p1.dts
├── x5-evb.dtsi
├── x5-fpga.dts
├── x5-md-v0p1.dts
├── x5-md-v0p2.dts
├── x5-memory.dtsi
├── x5-rdk-v1p0.dts
├── x5-rdk.dts
├── x5-rdk.dtsi
├── x5-som.dts
├── x5-svb.dts
└── x5.dtsi
pinmux-func.dtsi:定义各个 PIN 的 功能 组。板级 设备树 .dts文件通过 以下 方式 包含: #include "pinmux-func.dtsi"pinmux-gpio.dtsi:定义 GPIO 组,用户可 直接 引用 具体 GPIO 组( PINGRP)。x5.dtsi:定义 X5 平台上 所有 模块 的 默认 配置,作为 底层 功能 描述,不 建议 用户 修改 里面 配置。 x5-evb.dtsi: 定义了 不同 EVB 硬件 版本 间 的 通用 配置 项,包含 x5.dtsi的默认 配置。 x5-<板级产品>.dts:板级产品 设备树 文件,包含 x5.dtsi的默认 配置,同时 完成 功能模块 的 启用 / 禁用 和 与 硬件 强 相关 外设 的 定义。 EVB 相关 的 dts配置是 包含 x5-evb.dtsi, 然后在 dts里面描述 有 差异 的 配置 项。
以
cd arch/arm64/boot/dts/hobot
cp x5-evb-lp4-1_b.dts x5-som.dts
根据x5-<new_board>.dts 文件
4.2.4.3. 模块默认状态说明
外设
及 显示 相关 模块 默认 不 使 能 图像处理
及其 他 基础 模块 默认 使能 低速
总线 默认 不 使 能,用户 根据 硬件 设计 进行 开启
4.2.4.4. 编辑板级设备树
在x5-< 板级产品 >.dts 中:
引用
所有 :基础 dtsi 文件 设备树
文件 需要 直接 包含 板级 产品 相关 的 所有 dtsi 文件。例如: #include "x5.dtsi"配置
时钟 :源 和 内存 分布 定义
当前 硬件 的 时钟 源 频率、内存 分布。 定义
外设 :和 模块 配置 将
外设 及其 他 模块 的 具体 配置 写入 对应 的 dtsi 文件,并 根据 硬件 设计 需求 调整 启用 状态。
4.2.4.5. 软件 Board ID 与设备树( DTB)的匹配说明
在
配置 its 文件以新增设备树
在fit 包中,需要device/horizon/x5/board_cfg/soc/boot_its/x5-common.its
将
新增 的 设备树 文件(如 x5-som.dts生成的 x5-som.dtb)打包到 boot.img中。 在its文件中 按 以下 格式 添加 设备树 配置 项: /dts-v1/; / { description = "U-Boot FIT for x5"; #address-cells = <1>; images { ... ( 省略 ) ... fdt2 { description = "FDT-SOM"; data = /incbin/("x5-som.dtb"); type = "flat_dt"; arch = "arm64"; compression = "none"; /* hash-1 { algo = "sha1"; }; */ }; ... ( 省略 ) ... }; ... ( 省略 ) ... }在
configurations节中,将 Board ID 与设备树 关联: /dts-v1/; / { description = "U-Boot FIT for x5"; #address-cells = <1>; ... ( 省略 ) ... configurations { default = "boardid-0x0201"; ... ( 省略 ) ... boardid-0xFE01 { description = "x5-som"; kernel = "kernel"; fdt = "fdt2"; }; ... ( 省略 ) ... }; };
注意事项
Board ID 格式:
配置
项中 的 boardid-0x0201对应 U-Boot 中新增 的 Board ID,例如 HOBOT_X5_SOM_ID的值。 boardid-0x0201会在 U-Boot 中 被 解析 为 字符串 形式。 如果 Board ID 中 包含 字母,必须 使用 大写字母 ,如0xff10应写作 0xFF10。
FDT 参数:
fdt字段 需要 对应 新增 的 设备树 配置 项 名称。例如, boardid-0xFE01使用fdt2,即x5-som.dtb。
U-Boot 引导内核流程
在
bootm ${kernel_addr}#boardid-${hb_board_id}
此${hb_board_id} 为its 文件fdt 配置,加载
4.2.5. 调试最小系统
在
芯片
供电 是否 正常 BOOTSEL 管脚
配置 是否 正确 调试
串口 与 PC 终端 软件 波特率 是否 匹配
4.2.5.1. 空片状态下的串口日志
当
SNOTICE: Welcome to Horizon X5 ASIC BOOTROM - V4.1
NOTICE: OTP config:
NOTICE: otp exist: true
NOTICE: test region size: 304
NOTICE: secure region size: 120
NOTICE: none secure region size: 56
NOTICE: Enable MMU
NOTICE: Booting Trusted Firmware
NOTICE: BL1: v2.8(release):
NOTICE: BL1: Built : 17:42:12, Oct 19 2023
NOTICE: Enter eMMC Mode......
NOTICE: USER AREA.
NOTICE: eMMC clk_rate = CLK_12_5M
NOTICE: eMMC emmc_data_width == WIDTH_DATA_1
NOTICE: eMMC emmc_cfg.emmc_clk_latch == CLK_FALLING
NOTICE: Enter media_source_select process(1).
ERROR: horizon_emmc_read_blocks fail!! checksum = 0x0 (0x0) 0x0
ERROR: plat_error_handler 0
... ( 省略部分日志 ) ...
NOTICE: Enter eMMC Mode......
NOTICE: USER AREA.
NOTICE: eMMC clk_rate = CLK_12_5M
NOTICE: eMMC emmc_data_width == WIDTH_DATA_1
NOTICE: eMMC emmc_cfg.emmc_clk_latch == CLK_FALLING
NOTICE: Currtenly use dfu-util to download file
NOTICE: Download file via USB
NOTICE: DFU Start...
4.2.5.2. 系统刷机
确认
若刷
4.2.5.3. 各阶段启动调试
1. miniboot 启动异常
miniboot 负责
镜像
打包 错误 eMMC 或 Nand Flash 无法
正确 识别 或 数据 读写 失败 DDR Training 未
通过 U-Boot 加载
异常
2. U-Boot 启动异常
U-Boot 用于
Kernel 分区
加载 异常 cmdline 参数
配置 错误
调试
确认 USB Device 功能
在 U-Boot 中
Hobot> fastboot 0
select emmc(0) as flash medium
do fastboot usb
3. Kernel 启动异常
若
检查
内核 确认启动 日志: 内核模块 和 设备 驱动 初始化 正常 检查
文件系统 确认挂载: 根 文件系统、 app和userdata分区是否 挂载 成功 检查
终端 确认登录: 系统 可 正常 进入 Shell 终端,并 通过 串口 登录 检查
外设 确认功能: 网络接口 和 USB 接口 工作 正常
4.2.6. 系统稳定性测试
完成