RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)
**RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配**
- 前言
-
- 1.Openharmony SDK驱动内核编译流程解析
- 2.构建编译思路
- 3.调试实战
- 4.效果演示
前言
上回说到,如果是自己的主板,应该如何适配板级驱动,让openharmony系统在自己的板子上跑起来呢?
1.Openharmony SDK驱动内核编译流程解析
(1)首先,rk3568平台的内核配置和预编译脚本在:device/board/hihope/rk3568/kernel/build_kernel.sh
简单地说,其核心思想是:基于linux-5.10的基础内核,打上rk3568平台的核心补丁kernel.patch后,就可以支持RK3568板级dts配置和基础驱动。然后拷贝内核源码到out目录进行编译。
(2)内核的编译脚本在out/kernel/src_tmp/linux-5.10/make-ohos.sh 中
这里配置了编译工具链,指定的板级dts,config等(没错,这里就是我们需要找的地方)
2.构建编译思路
(1)首先进入内核基础目录kernel/linux/linux-5.10 打上kernel.patch,这样我们就拥有了一份rk3568完整的内核代码
(2) 进入kernel/linux/linux-5.10/arch/arm64/boot/dts/rockchip目录,加入自己的板级dts和相关dtsi配置
(3)修改后生成新的核心补丁kernel.patch,新的kernel.patch替换掉kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch
这样完全编译出的固件,就对应我们自己的主板了。(当然,编译脚本要指定到对应的板级dts,下面会举例)
3.调试实战
调试使用NNEWN NSR3568 开发板:
硬件接口图如下:
正面:
背面:
(1)修改预编译脚本
device/board/hihope/rk3568/kernel/build_kernel.sh
diff --git a/rk3568/kernel/build_kernel.sh b/rk3568/kernel/build_kernel.shindex 4bd1e65..6b0fdf4 100755--- a/rk3568/kernel/build_kernel.sh+++ b/rk3568/kernel/build_kernel.sh@@ -72,7 +72,7 @@ do ;; esac done-eval $make_ohos_env ./make-ohos.sh TB-RK3568X0 $ramdisk_arg ${ENABLE_LTO_O0}+eval $make_ohos_env ./make-ohos.sh NN-RK3568N10 $ramdisk_arg ${ENABLE_LTO_O0} mkdir -p ${2} diff --git a/rk3568/kernel/logo.bmp b/rk3568/kernel/logo.bmpindex 980f44e..b4bc234 100755Binary files a/rk3568/kernel/logo.bmp and b/rk3568/kernel/logo.bmp differdiff --git a/rk3568/kernel/logo_kernel.bmp b/rk3568/kernel/logo_kernel.bmpindex f74ed84..2c7ecdf 100755Binary files a/rk3568/kernel/logo_kernel.bmp and b/rk3568/kernel/logo_kernel.bmp differ
(2)修改内核编译脚本,添加自己的板级dts、dtsi文件
cd kernel/linux
进入内核源码目录:
先打一次rk3568默认补丁kernel.patch,操作如下:
cd linux-5.10/patch -p1 < ../patches/linux-5.10/rk3568_patch/kernel.patch
make-ohos.sh修改如下:
diff --git a/make-ohos.sh b/make-ohos.sh new file mode 100755-index 000000000..4f6b72d23+index 000000000..50fb79a39 --- /dev/null +++ b/make-ohos.sh-@@ -0,0 +1,135 @@+@@ -0,0 +1,137 @@ +#!/bin/bash + +set -e@@ -1665131,7 +1665526,8 @@ index 000000000..4f6b72d23 +BUILD_PATH=boot_linux +EXTLINUX_PATH=${BUILD_PATH}/extlinux +EXTLINUX_CONF=${EXTLINUX_PATH}/extlinux.conf-+TOYBRICK_DTB=toybrick.dtb++#TOYBRICK_DTB=toybrick.dtb++NNEWN_DTB=rk3568-evb-nnewn.dtb +if [ ${KBUILD_OUTPUT} ]; then + OBJ_PATH=${KBUILD_OUTPUT}/ +fi@@ -1665145,6 +1665541,7 @@ index 000000000..4f6b72d23 +model_list=( + "TB-RK3568X0 arm64 0xfe660000 rk3568-toybrick-x0-linux Image rockchip_linux_defconfig" + "TB-RK3568X10 arm64 0xfe660000 rk3568-toybrick-x10-linux Image rockchip_linux_defconfig"++ "NN-RK3568N10 arm64 0xfe660000 rk3568-evb-nnewn Image rockchip_linux_defconfig" +) + +@@ -1665166,7 +1665563,7 @@ index 000000000..4f6b72d23 ++ echo "label rockchip-kernel-5.10" > ${EXTLINUX_CONF} + echo " kernel /extlinux/${image}" >> ${EXTLINUX_CONF}-+ echo " fdt /extlinux/${TOYBRICK_DTB}" >> ${EXTLINUX_CONF}++ echo " fdt /extlinux/${NNEWN_DTB}" >> ${EXTLINUX_CONF} + cmdline="append earlycon=uart8250,mmio32,${uart} root=PARTUUID=614e0000-0000-4b53-8000-1d28000054a9 rw rootwait rootfstype=ext4" + echo " ${cmdline}" >> ${EXTLINUX_CONF} +}@@ -1665234,7 +1665631,7 @@ index 000000000..4f6b72d23 + fi + make_extlinux_conf ${dtb_path} ${uart} ${image} + cp -f ${OBJ_PATH}arch/${arch}/boot/${image} ${EXTLINUX_PATH}/-+ cp -f ${OBJ_PATH}${dtb_path}/${dtb}.dtb ${EXTLINUX_PATH}/${TOYBRICK_DTB}++ cp -f ${OBJ_PATH}${dtb_path}/${dtb}.dtb ${EXTLINUX_PATH}/${NNEWN_DTB} + cp -f logo*.bmp ${BUILD_PATH}/ + if [ "enable_ramdisk" != "${ramdisk_flag}" ]; then +make_ext2_image
dts和dtsi文件自己添加到kernel/linux/linux-5.10/arch/arm64/boot/dts/rockchip/目录
(3)合并生成新补丁,迭代旧的kernel.patch
操作如下:
cd linux-5.10/git add -Agit diff --cached > kernel.patchcp kernel.patch ../patches/linux-5.10/rk3568_patch/git reset --hard 9a1d8aa6829683f690336aaf2741c0b658964aeb
(4)编译验证
编译指令(由于我们默认已经将编译脚本指向了我们自己的dts,所以编译指令不变)
./build.sh --product-name rk3568 --ccache4
4.效果演示
开机logo
开机动画
UI主界面
相机
时钟
音乐播放
屏幕亮度调节
系统版本
附上NSR3568 开发板(购买连接)