概述
Board ID是J5 DTS中根节点下属性board_type的值,此board_type 属性顾名思义,它是为了区分不同J5板级差异的标记。当需要增加内核DTS与产品Board ID映射关系时,需要根据本文档描述流程进行修改,以保证启动时能根据读取到的Board ID找到期望的DTB文件。
定义
内核程序中根据board_type决定使用哪一份DTS文件,各个DTS文件描述板级之间存在差异的J5 Board。目前我们使用J5芯片的两路ADC电压范围(具体详情请见原理图)来区分不同单板,分别是VS0_IN1与VS1_IN5,通过读取ADC_SENSOR_0和ADC_SENSOR_1的通道电压值来选择对应的Board ID。针对board_type的节点在J5系统软件分为Uboot和Kernel两部分。以下通过J5 EVM DTS文件举例说明。
Uboot 部分节点说明
代码说明如下:
使用adc_sensor_0的通道1与adc_sensore_1的通道5获取电压值,单位mv。
如果J5从adc_senesor_0读取到的电压值在651mv至740mv,adc_sensor_1读取到的电压值在 251mv至340mv,则赋值该板子的Board ID = J5_EVM2_EP_BOARD_ID。
其中宏J5_BOARD_ID定义请参考以下。
代码路径:uboot/include/dt-bindings/board/hb_board_id.h
代码路径:uboot/arch/arm/dts/hobot-j5-evm.dtsi
代码说明如下:
btype-bus驱动会根据support-btype适配当前单板boardid,如果匹配上则根据该节点下配置进行驱动初始化。
Kernel 部分节点说明
model = "Horizon Robotics Journey 5 EVM2 RC";
board_type = <0x524>;
};
...
代码说明如下:
在内核启动过程中,会依次校验DTB中board_type内容,如果与当前单板匹配则选择该DTB 启动。
实现方法
复用旧有Board ID
如果复用现有的Board ID,只需要修改Uboot下电压与Board ID对应关系。例如当前单板电压 为VS0_IN1:500mV,VS1_IN5:400mV,复用J5_EVM2_EP_BOARD_ID,则只需要将uboot/arch/arm/dts/hobot-j5-evm.dtsi中以下:
修改成为:
修改完成后重新编译与刷写即可生效,具体流程请参考开发手册编译镜像一节。
使用新增Board ID
- 修改Uboot下uboot/arch/arm/dts/hobot-j5.dtsi数组board_type_array。
如当前单板电压为VS0_IN1:500mV,VS1_IN5:400mV,使用Board ID为 J5_SAMPLE_BOARD_ID, 则需要在uboot/arch/arm/dts/hobot-j5-evm.dtsi中新增以下:并在uboot/include/dt-bindings/board/hb_board_id.h中新增,以数值0x999為例:
注意:新增的J5_SAMPLE_BOARD_ID值不能与已有Board ID相同
- 增加Kernel之DTS并同步修改Board ID值。
在下述路径增加对应DTS文件,例如增加hobot-j5-sample.dts:添加完DTS文件后,在下述文件中增加所需编译选项:
以hobot-j5-sample.dts为例,增加:
在hobot-j5-sample.dts中board_type需要与新增boardid匹配,如下:
- 当前系统进程启动脚本根据hardware而有差异,需要编译镜像与硬件对应的Board ID匹配。
如build/device/horizon/$sample/debug-env.sh中的编译选项BOARD_TYPE:以及uboot/board/hobot/j5/j5_fpga_common.c的hb_boot_hardware_get接口返回值如下:
验证方法
hobotboot.hardware
使用以下命令读取console打印之hobotboot.hardware值,确认可否读取hardware:
dmesg
在系统中通过dmesg查阅内核log寻找Machine model的值。
hrut_boardid
使用hrut_boardid此工具来获取与验证Board ID,显示为十进制。
