接上一篇,搭建完环境,找个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.netimport("//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.netimport("//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目录,有好几个配置文件,内容有点多,重新开文章继续写吧。