接上一篇,搭建完环境,找个DEMO能跑,现在我准备尝试从0开始搬砖。
首先把/device和/vendor之前的代码全删除,这个时候用hb set命令看不到任何项目了。
/device目录是硬件设备目录,包括soc芯片厂商和board板级支持代码。
创建目录规则:“device/{芯片厂商}/{芯片开发板}”。
/vendor目录是产品项目定义目录。
创建目录规则:“vendor/{产品模组厂商}/{产品模组名称}”。
参考文档:zh-cn/device-dev/porting/porting-minichip-prepare.md · OpenHarmony/docs - Gitee.com
hb set是扫描/vendor/目录下的config.json,所以我们从这个文件开始。
然后根据报错信息一步一步添加代码。
先依葫芦画飘,写一个最小配置文件,把它放到/vendor/demo/hello目录。
{
"product_name": "hello",
"ohos_version": "OpenHarmony 3.2",
"type": "mini",
"version": "3.0",
"device_company": "demo",
"board": "demo_board",
"target_cpu": "arm",
"kernel_type": "liteos_m",
"kernel_version": "3.0.0",
"subsystems":
[
{
"subsystem": "kernel",
"components":
[
{
"component": "liteos_m",
"features": []
}
]
}
],
"vendor_adapter_dir": "",
"product_adapter_dir": "",
"third_party_dir": "//third_party"
}
这个时候用hb set就能选择hello了。但是会报错:
OHOS Which product do you need? hello
[OHOS ERROR] invalid path: /home/openharmony/device/board/demo/demo_board
没关系因为我们device目录还没有东西,要按照规则创建/device/board/demo/demo_board。
继续报错:
[OHOS ERROR] cannot find liteos_m_3.0.0 in /home/openharmony/device/board/demo/demo_board
是没有找到liteos的目录,但我看官方代码也没有这个liteos_m_3.0.0的目录,
只有liteos_m这个目录,猜测是config.gni里面的kernel_version=3.0.0起了作用。
找来talkweb的配置文件,放进/device/board/demo/demo_board/liteos_m/。
# /home/openharmony/device/board/demo/liteos_m/config.gni
# Kernel type, e.g. "linux", "liteos_a", "liteos_m".
kernel_type = "liteos_m"
# Kernel version.
kernel_version = "3.0.0"
# Board CPU type, e.g. "cortex-a7", "riscv32".
board_cpu = "cortex-m4"
# Board arch, e.g. "armv7-a", "rv32imac".
board_arch = ""
......
这个时候hb set没有报错了,开始编译,看看报什么错:
[OHOS INFO] ERROR at //kernel/liteos_m/BUILD.gn:140:18: Unable to load "/home/openharmony/device/board/demo/BUILD.gn".
OHOS的编译框架是基于gn+ninja的,所以目录下面必须要有BUILD.gn,用来指定文件编译。
照着格式写一个最小配置,指定依赖bsp模块,后面会在bsp目录放启动代码。
# /home/openharmony/device/board/demo/liteos_m/BUILD.gn
# kerndev.blog.csdn.net
import("//kernel/liteos_m/liteos.gni")
module_name = get_path_info(rebase_path("."), "name")
module_group(module_name) {
modules = [
"bsp",
]
}
在bsp目录下面,也要创建一个BUILD.gn,把配置内容控制到最少。
# /home/openharmony/device/board/demo/liteos_m/bsp/BUILD.gn
# kerndev.blog.csdn.net
import("//kernel/liteos_m/liteos.gni")
module_name = get_path_info(rebase_path("."), "name")
kernel_module(module_name) {
}
再次编译,看看报错:
[OHOS INFO] ERROR at //kernel/liteos_m/BUILD.gn:141:18: Unable to load "/home/openharmony/device/soc/BUILD.gn".
[OHOS INFO] configs += [ "//device/soc/$LOSCFG_SOC_COMPANY:public" ]
看来liteos_m编译时,需要去/device/soc目录下面寻找东西。这个路径取决于LOSCFG_SOC_COMPANY的定义。
根据经验去kernel/liteos_m下面执行make menuconfig看一下,果然又报错。
root@86cd4274494f:/home/openharmony/kernel/liteos_m# make menuconfig
warning: <choice> (defined at arch/arm/Kconfig:34) defined with type unknown
warning: <choice> (defined at Kconfig:204) defined with type unknown
warning: <choice> (defined at Kconfig:213) defined with type unknown
warning: <choice> (defined at arch/arm/Kconfig:34) defined with type unknown
warning: <choice> (defined at Kconfig:204) defined with type unknown
warning: <choice> (defined at Kconfig:213) defined with type unknown
make: *** [Makefile:113: menuconfig] Error 1
这是因为Kconfig里面要去找/device/soc/*下面的Kconfig文件,来决定soc和board的宏定义。
看了一下原来的soc/st目录,有好几个配置文件,内容有点多,重新开文章继续写吧。