​OH3.1从Hi3516到RK3568编译失败问题分析报告

鸿蒙使小强 2023-03-13 17:53:07

1 关键字

编译失败;Hi3516;RK3568; 切换

2 问题描述

设备型号:Hi3516,RK3568

系统版本:OpenHarmony 3.1 Release

代码版本:OpenHarmony-v3.1-Release

问题现象:先编译Hi3516 后再编译RK3568 或者先编译RK3568 再编译Hi3516 ,会出现编译失败问题。

3 问题原因

3.1 正常机制

同一套代码可以编译Hi3516 也可以编译RK3568, 应互不影响。

3.2 异常机制

先编译Hi3516 后再编译RK3568 或者先编译RK3568 再编译Hi3516 ,会出现编译失败问题。

4 解决方案

手动解决这个问题的办法:

编译rk3568时,把 //device/board/hihope/rk3568/cfg/ramdisk_resource_config.ini 文件拷贝并替换掉 //build/ohos/images/mkimage/ramdisk_resource_config.ini【做好备份】,再去编译rk3568即可。

然后编译Hi3516时,又会报错,这时候再将原先备份的ramdisk_resource_config.ini替换回去,再去编译Hi3516即可。

附1: Hi3516的配置文件ramdisk_resource_config.ini

# current path: "out/ohos-arm-release/"

# Modification and deletion of section name is not allowed

# fstab.required path config, The fstab is device related

[fstab_required_path]

source_path = ./fstab.required

target_path = ./packages/phone/ramdisk/etc/fstab.required

# dtc_419 path config

[dtc_419_path]

source_path = ../../out/KERNEL_OBJ/kernel/src_tmp/linux-4.19/scripts/dtc/dtc

target_path = ../../third_party/e2fsprogs/prebuilt/host/bin/dtc

# dtc_510 path config

[dtc_510_path]

source_path = ../../out/KERNEL_OBJ/kernel/OBJ/linux-5.10/scripts/dtc/dtc

target_path = ../../third_party/e2fsprogs/prebuilt/host/bin/dtc

# mkimage path config

[mkimage_path]

source_path = ../../device/board/hisilicon/hispark_taurus/uboot/prebuilts/mkimage

target_path = ../../third_party/e2fsprogs/prebuilt/host/bin/mkimage

附2: rk3568的配置文件ramdisk_resource_config.ini

# current path: "out/ohos-arm-release/"

# Modification and deletion of section name is not allowed

# fstab.required path config, The fstab is device related

[fstab_required_path]

source_path = ./fstab.required

target_path = ./packages/phone/ramdisk/etc/fstab.required

# dtc_419 path config

[dtc_419_path]

source_path = ../../out/KERNEL_OBJ/kernel/src_tmp/linux-4.19/scripts/dtc/dtc

target_path = ../../third_party/e2fsprogs/prebuilt/host/bin/dtc

# dtc_510 path config

[dtc_510_path]

source_path = ../../out/kernel/src_tmp/linux-5.10/scripts/dtc/dtc

target_path = ../../third_party/e2fsprogs/prebuilt/host/bin/dtc

# mkimage path config

[mkimage_path]

source_path = ../../device/board/hisilicon/hispark_taurus/uboot/prebuilts/mkimage

target_path = ../../third_party/e2fsprogs/prebuilt/host/bin/mkimage

[board]

boot_type = two_stages

source_path = ../../out/kernel/src_tmp/linux-5.10/make-boot.sh

target_path = ./packages/phone/make-boot.sh

5 定位过程

5.1 问题现象

在源码库编译Hi3516之后再编译 rk3568 或者编译rk3568之后再编译Hi3516, 均会出现如下类似错误:

图片1:

img

或者如下错误

图片2:

img

​ 总结起来就是:FAILED: ramdisk.img。

5.1 问题原因

编译系统对ramdisk_resource_config.ini的使用,有点奇怪,系统中有四个:

【1】//build/ohos/images/mkimage/ramdisk_resource_config.ini

【2】//device/board/hisilicon/hispark_taurus/linux/images/ramdisk_resource_config.ini

【3】//device/board/hihope/rk3568/cfg/ramdisk_resource_config.ini

【4】//out/hi3516dv300/packages/imagesconf/ramdisk_resource_config.ini

默认情况下【1】就是对应的Hi3516板子的配置,直接编译Hi3516不会出问题;直接编译rk3568 时,BUILD.gn 会把【3】copy 到【1】 也不会出以上问题。

1) 假如先编译了Hi3516, 再去编译rk3568, 这时【1】对应的配置依然是Hi3516的,在编译的过程中涉及到ramdisk.img 的地方总是去找Hi3516的目录,编译会失败。

2) 假如先编译了rk3568, 再去编译 Hi3516, 这时【1】对应的配置依然是 rk3568的,在编译的过程中涉及到ramdisk.img 的地方总是去找rk3568 的目录,编译会失败。

**两种配置文件的差异如下(左边Hi3516,右边rk3568)**

图片3:

img

6 知识分享

OH3.1的源码库在编译环境配置完备的情况下,可同时编译Hi3516 、rk3568 等不同的版本,编译输出分别对应 out/Hi3516DV300 和 out/rk3568 两个目录,这两个目录完全是互相独立且没有任何依赖。但是依然可能会出现编译Hi3518 后再编译rk3568 或者编译完rk3568 再编译hi3516 ,编译失败的问题。 问题原因只在于ramdisk_resource_config.ini 这个配置文件的配置会不同。

...全文
113 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

506

社区成员

发帖
与我相关
我的任务
社区描述
OpenHarmony开发者社区
其他 企业社区
社区管理员
  • csdnsqst0025
  • shewaliujingli
  • BaoWei
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧