> 文档中心 > RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)

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
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)
简单地说,其核心思想是:基于linux-5.10的基础内核,打上rk3568平台的核心补丁kernel.patch后,就可以支持RK3568板级dts配置和基础驱动。然后拷贝内核源码到out目录进行编译。

(2)内核的编译脚本在out/kernel/src_tmp/linux-5.10/make-ohos.sh 中
这里配置了编译工具链,指定的板级dts,config等(没错,这里就是我们需要找的地方)

RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)

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 开发板:
硬件接口图如下:

正面:
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)
背面:
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)

(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
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)
开机动画
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)
UI主界面
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)

相机
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)

时钟
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)
音乐播放
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)
屏幕亮度调节
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)
系统版本
RK3568 OpenHarmony V3.2 Beta5 开发之板级驱动适配(二)
附上NSR3568 开发板(购买连接)