赞
踩
上回说到,如果是自己的主板,应该如何适配板级驱动,让OpenHarmony系统在自己的板子上跑起来呢?
(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等(没错,这里就是我们需要找的地方)
(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,下面会举例)
调试使用NNEWN NSR3568 开发板:
硬件接口图如下:
正面:
背面:
(1)修改预编译脚本
device/board/hihope/rk3568/kernel/build_kernel.sh
diff --git a/rk3568/kernel/build_kernel.sh b/rk3568/kernel/build_kernel.sh index 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.bmp index 980f44e..b4bc234 100755 Binary files a/rk3568/kernel/logo.bmp and b/rk3568/kernel/logo.bmp differ diff --git a/rk3568/kernel/logo_kernel.bmp b/rk3568/kernel/logo_kernel.bmp index f74ed84..2c7ecdf 100755 Binary 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 -A
git diff --cached > kernel.patch
cp kernel.patch ../patches/linux-5.10/rk3568_patch/
git reset --hard 9a1d8aa6829683f690336aaf2741c0b658964aeb
(4)编译验证
编译指令(由于我们默认已经将编译脚本指向了我们自己的dts,所以编译指令不变)
./build.sh --product-name rk3568 --ccache4
开机logo
开机动画
UI主界面
相机
时钟
音乐播放
屏幕亮度调节
系统版本
附上NSR3568 开发板(购买连接)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。