最近在使用小熊派的板子学习openharmony的移植,使用hb set时遇到一些报错,以下分别阐述报错原因及解决办法。
首先简单介绍一下使用hb set后该命令在在后台做的部分工作。
一、hb set背后的部分工作
hb set在使用后会调出在源码工程/ventor下的所有的厂商及产品找出来并进行罗列。
![使用hb set命令后罗列出的部分厂商和产品](https://i-blog.csdnimg.cn/blog_migrate/caff1d94de0c131463a31d63bdfe6d91.png)
产品能被罗列出来的前提是产品目录下有config.json文件。以stm32mp157core这个“产品”为例,其config.json文件的部分配置如下所示:
{
"product_name": "stm32mp157core",
"version": "3.0",
"type": "mini",
"ohos_version": "OpenHarmony 3.0",
"device_company": "st",
"board": "stm32mp157",
"kernel_type": "liteos_m",
"kernel_version": "3.0.0"
}
使用hb set后,其会调用相关函数来读取所有产品的config.json中的“product_name”并返回其路径,再以菜单的形式呈现在菜单上(就和上面那张图一样)。选择产品后,hb set命令会继续调用相关函数来读取所选择产品的config.json中的信息,其中“device_company”和“board”信息会生成搜索路径/device/device_company/board用以搜索单板配置文件,“kernel_type”和“kernel_version”信息则会和该搜索路径下内核的配置文件config.gni中的对应信息进行匹配以确定内核选择。
简单介绍完了hb set做的部分工作,接下来简述以下自己遇到的问题以及解决办法。
二、【OHOS ERROR】invalid path:
该报错如下图示:
OHOS Which product do you need? stm32mp157core
[OHOS ERROR] invalid path: /home/numisp/Desktop/harmony/code-v3.0-LTS/OpenHarmony/device/st/stm32mp157
numisp@ubuntu:~/Desktop/harmony/code-v3.0-LTS/OpenHarmony$
如之前所说,“device_company”和“board”信息会生成搜索路径
/device/device_company/board,以我使用的stm32mp157core为例,config.json的相关信息为
{
"device_company": "st",
"board": "stm32mp157"
}
那么搜索路径应该为:/device/st/stm32mp157core,再看看/device下的目录
![](https://i-blog.csdnimg.cn/blog_migrate/69b950c67cd9b37e0597d8c77ec3ea0c.png)
错误很明显了,搜索路径和实际路径对不上导致出现错误。对config.json下的相关信息进行修改或修改/deivce目录下相关文件夹名即可解决问题。
三、【OHOS ERROR】cannot find xxx(内核名) in:
该报错如下所示:
numisp@ubuntu:~/Desktop/harmony/code-v3.0-LTS/OpenHarmony$ hb set -p
OHOS Which product do you need? stm32mp157core
[OHOS ERROR] cannot find liteos_m_ in /home/numisp/Desktop/harmony/code-v3.0-LTS/OpenHarmony/device/st/stm32mp157core
同样,之前说过,hb set会读取config.json文件中的“kernel_type”和“kernel_version”信息则会和该搜索路径下内核的配置文件config.gni中的对应信息进行匹配以确定内核选择。config.json下的相关配置如下所示:
{
"kernel_type": "liteos_m",
"kernel_version": "3.0.0"
}
/ device/st/stm32mp157core/liteos_m/config.gni下的相关配置如下所示:
# Kernel type, e.g. "linux", "liteos_a", "liteos_m".
kernel_type = "liteos_m"
# Kernel version.
kernel_version = ""
问题很明显了,由于config.gni下的"kernel_version"为空无法匹配config.json中的信息导致出错。将config.gni下的相关信息进行补充即可解决问题。
四、总结
实际遇到的问题都是一些基础但比较细节的问题,个人在平时的学习中时常会忽略此类细节问题导致工作受阻。希望大家在平时的学习工作中一定要对这些问题重视。
本人才疏学浅,讲的一些东西可能有疏漏或错误,欢迎各位大佬批评指正。