RK3308 5.10 SDK开启HWID

在项目迭代中,底板和相应功能会做调整,但大部分会和原来保持一致,为了降低软件的维护成本。没有必要每次迭代硬件后,都生成新的固件版本。所以想到能否将固件统一起来,一个固件适配不同的硬件版本。经过检索RK3308 官方SDK(5.10 kernel),发现sdk支持该功能,sdk中提供了两种实现方式,一种是通过GPIO识别硬件版本,一种是同过ADC识别,也可以通过更改代码实现两种方式的组合。以下以ADC识别硬件版本的方式介绍如何使用已经启动过程。

启动过程:

RK3308上电后经过SOC启动阶段进入uboot,uboot通过adc识别硬件版本,选择不同的设备树进行初始化(uboo初始化阶段),再使用这个设备树进入kernel阶段。

两个问题:
  • 不同的设备树放到哪里?
  • adc值与设备树的索引关系?
功能实现:
  • 打开uboot硬件识别功能,CONFIG_ROCKCHIP_HWID_DTB=y
  • 将不同的设备树打包到resource.img,resource.img会被打包到boot.img。uboot启动后会将adc与resource.img中设备树的文件名做匹配。
    • 修改kernel目录下scripts/mkmultidtb.py,根据参考规则写入自己的板子。
    • 修改kernel目录下scripts/mkimg,249 250行:
    • # scripts/resource_tool ${DTB_PATH} ${LOGO} ${LOGO_KERNEL} >/dev/null
      # echo "  Image:  resource.img (with ${DTB} ${LOGO} ${LOGO_KERNEL}) is ready"
      scripts/mkmultidtb.py [自定义的名称]
    •  修改kernel目录下arch/arm64/boot/dts/rockchip/Makefile,参考规则让kernel编译自定义dtb。删除的这个makefile中不需要的设备树,只保留自己需要的。
    • 修改device/rockchip/common/scripts/mk-kernel.sh,do_build函数
    • do_build()
      {
      	check_config RK_KERNEL_DTS_NAME RK_KERNEL_CFG RK_BOOT_IMG || return 0
      
      	run_command $KMAKE $RK_KERNEL_CFG $RK_KERNEL_CFG_FRAGMENTS
      
      	if [ "$1" = modules ]; then
      		run_command $KMAKE modules
      		return 0
      	fi
      
      	run_command $KMAKE
      	
      	run_command $KMAKE "$RK_KERNEL_DTS_NAME.img"
      
      	# The FIT image for initrd would be packed in rootfs stage
      	if [ -n "$RK_BOOT_FIT_ITS" ] && [ -z "$RK_ROOTFS_INITRD" ]; then
      		run_command "$SCRIPTS_DIR/mk-fitimage.sh" \
      			"kernel/$RK_BOOT_IMG" "$RK_BOOT_FIT_ITS" \
      			"$RK_KERNEL_IMG"
      	fi
      }

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值