开发板如何适配OpenHarmony 3.2 精华
简介
OpenAtom OpenHarmony(以下简称“OpenHarmony”) 3.2 Beta5版本在OpenHarmony 3.1 Release版本的基础上,有以下改变:性能上有很大的提升、标准系统应用开发框架增强、标准系统分布式能力增强。
本文介绍诚迈科技基于RK3568设计的HCPAD-100开发板以及基于RK3566设计的中控屏HongzPad2022在OpenHarmony 3.2 Beta5版本上的适配过程。
涉及到开发板的添加/u-boot /linux-5.10/分区表/根文件系统/显示/触摸/USB的移植过程以及OpenHarmony所依赖的驱动特性介绍。
如何添加新的开发板进行编译
参照DAYU200的工程配置文件我们新建自己的编译命令。1)在device/board/目录新建archermind目录,新建rk3568/rk3588/rk3399目录,并添加相关的工程文件。
2)在vendor目录新建archermind目录。新建以下几个目录,并添加相关的工程文件。
3)修改vendor/archermind/hongzos_rk3568/config.json文件,product_name改成hongzos_rk3568,device_build_path改成第一步新建的目录。
通过./build.sh --product-name hongzos_rk3568来编译出我们自己开发板的镜像,编译完后对应开发板的image镜像放在out/rk3568/packages/phone/目录。相关代码放在文章最后的参考链接。
U-Boot移植
U-boot是通过二进制镜像直接放在device/board/hihope/rk3568/loader目录下的,这个目录下涉及到文件如下:
1)下载rk官方发布的uboot源码
2)修改make.sh, 指定RKBIN_TOOLS的路径
3)增加代码读取ramdisk分区到指定的内存位置,修改cmd/pxe.c
4)指定交叉编译器和平台开始编译,编译完成后根目录会生成u-boot.bin
所有相关代码已经放到开源社区,大家可以下载下来直接编译使用,相关代码放在文章最后的参考链接。
Linux-5.10移植
1)内核编译脚本
linux编译脚本的是放在device/board/hihope/rk3568/kernel目录下的build_kernel.sh文件,由于kernel/linux/linux-5.10是公共代码,OpenHarmony编译脚本是通过打补丁的方式来适配不同平台,不同的平台有自己的内核补丁。
编译脚本会先把kernel/linux/linux-5.10拷贝到out/kernel/src_tmp/linux-5.10/,然后打上3568的内核补丁patch -p1 < kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch后编译生成自己的镜像,不利于我们开发,我们自己开发过程中做如下修改,这样方便我们开发过程中的修改。
2)设备树的定制,首先我们需要有自己的板子的设备树例如rk3568-chujue-linux.dts
修改其中的TB-RK3568X0,把rk3568-toybrick-x0-linux改成我们自己的rk3568-chujue-linux.dts,
TB-RK3568X0是在device/board/hihope/rk3568/kernel/build_kernel.sh指定的
这样编程后生产设备树就是我们自己开发板的,设备树如果不对,机器将会无法开机,U-boot也会无法开启。
3)内核config的定制
文件位置kernel/linux/config/linux-5.10/arch/arm64/configs/rk3568_standard_defconfig3.2 显示设备需要打开CONFIG_DRM_PANEL_SIMPLE配置显示才能正常显示
4)启动Logo定制修改device/board/hihope/rk3568/kernel目录的图片即可
5)启动参数的定制
kernel/linux/linux-5.10/ make-ohos.sh
分区表
1)rk3568采样的是GPT格式的分区表,v3.2新增加了三个分区sys_prod, chip-prod,ramdisk通过修改以下文件来修改分区表的配置,我们可以直接使用dayu开发板的分区表。device/board/hihope/rk3568/loader/parameter.txt
device/board/hihope/rk3568/cfg/fstab.rk3568
2)如何修改RKDevTool.exe工具加载的分区表
parameter.txt文件中的CMDLINE字段中有mtdparts=,其中0x00002000@0x00002000(uboot)的括号里面是分区的名字,@后面的0x00002000是分区的开始地址,以4k为单位的偏移地址,@前面是分区的大小,注意修改的时候要注意连续性,不要有重叠的位置。
根文件系统
1)ramdisk从3.1到3.2的变化
3.1中ramdisk.Img是放在out/kernel/src_tmp/linux-5.10/boot_linux/目录下被打包到boot_linux.img中。
3.2的ramdisk.Img是直接放在单独的分区里面,由Boot在开机的模式不同的情况下选择加载不同的根文件系统
2)如何修改ramdisk
在.gn文件里面添加对应的配置文件,生成的文件将会被放到ramdisk镜像里面
显示模块适配
1)Devices tree配置
通过设备树来打开mipi 通道1的配置和hdmi的设备,OpenHarmony 3.2 Beta5 是支持多屏异显的,OpenHarmony 3.1 Release 不支持。
2)内核打开相关的配置
3.2中默认关闭了CONFIG_DRM_PANEL_SIMPLE,但是我们的设备数中字段需要依赖这个配置项,所以需要打开它。
3)HAL层的适配
源码结构
显示HDI需要适配两部分:gralloc 和 display_device。
display device适配
display device模块提供显示设备管理、layer管理、硬件加速等功能。
drm设备节点定义
在//device/soc/rockchip/rk3568/hardware/display/src/display_device/drm_device.cpp文件中,可根据实际情况修改
如开发板不支持硬件合成或是有问题的时候,需要在drm_display.cpp文件中跳过gfx的初始化。
同时在//device/soc/rockchip/rk3568/hardware/display/src//hdi_gfx_composition.cpp文件中修改set_layers方法,全部使用CPU合成显示。
gralloc适配
gralloc模块提供显示内存管理功能,OpenHarmony提供了使用与Hi3516DV300参考实现。drm设备节点定义在
//device/soc/rockchip/rk3568/hardware/display/src/display_gralloc/display_gralloc_gbm.c文件中,可根据实际情况修改
1)Devices tree配置
我们的开发板使用的是gt9XX的触摸屏,所以我们把相关的信息配置进去。
2)内核驱动配置
打开内核配置CONFIG_TOUCHSCREEN_GT9XX=y
驱动源码里面把所有ABS_MT_WIDTH_MAJOR相关的属性去掉。3.2不识别有这个属性的输入设备。
kernel/linux/linux-5.10/drivers/input/touchscreen/gt9xx/gt9xx.c
USB调试适配
1) 调试工具
开发板的USB host是标准的linux驱动架构,OpenHarmony 对这块基本不需要做修改,USB的设备包括鼠标,sdcard都会默认支持。
USB 作为devices,最常用的功能是连接电脑,用电脑端的hdc shell来调试设备,这样我们才能在后续工作中抓取日志分析。
hdc shell “dmesg -Tw” 实时获取kernel 日志
hdc shell “hilog” 获取OpenHarmony 日志
2)USB devices设备的端口选择
init.rk3568.usb.cfg文件中有Usb初始化参数设置,其中最主要的是
sys.usb.controller设置成正确的基地址以及设备类型
总结
至此我们的开发板拥有自己的开发基线,也已经可以进入到桌面,触摸屏,USB鼠标,hdc调试都已经正常工作,我们接下来进行下一阶段的适配工作。
参考链接
以下是源码仓库地址
https://gitee.com/harchermindy/vendor_archermind
https://gitee.com/harchermindy/device_board_archermind
https://gitee.com/harchermindy/uboot-rk-openharmony
https://gitee.com/harchermindy/linux-5.10
每次版本更新总有惊喜
打算尝试适配下树莓派
3.2的改动确实很大
很实用的教程
做了适配,发现vendor/thingstar/sxdrk3568/preinstall-config这个里面的文件都没编到,感觉应该是vendor/thingstar/sxdrk3568/ohos.build这个文件{
"parts": {
"product_rk3568": {
"module_list": [
"//vendor/thingstar/sxdrk3568/default_app_config:default_app_config",
"//vendor/thingstar/sxdrk3568/image_conf:custom_image_conf",
"//vendor/thingstar/sxdrk3568/preinstall-config:preinstall-config",
"//vendor/thingstar/sxdrk3568/resourceschedule:resourceschedule",
"//vendor/thingstar/sxdrk3568/etc:product_etc_conf"
]
}
},
"subsystem": "product_hihope"
}
的问题。最终导到sys_prod.img和chip_prod.img没编出来。系统应用都安装不了。卡在开机动画页面了。楼主知道原因吗?
config.json
{
"product_name": "sxdrk3568",
"device_company": "rockchip",
"device_build_path": "device/board/thingstar/rk3568",
"target_cpu": "arm64",
"type": "standard",
"version": "3.0",
"board": "rk3568",
"api_version": 8,
"enable_ramdisk": true,
"build_selinux": true,
"build_seccomp": true,
"inherit": [ "productdefine/common/inherit/rich.json", "productdefine/common/inherit/chipset_common.json" ],
"subsystems": [
很有帮助