OpenHarmony标准系统上实现对rk系列芯片NPU的支持(驱动移植) 原创
1.将RKNPU驱动移植到Openharmony内核
本文以rk3568为例,将RKNPU驱动移植到Openharmony使用的kernel 5.10中
开发环境
- DAYU200 rk3568开发板
- OpenHarmony 4.1 Release 64位系统
文档约定:
4.1r_3568为OpenHarmony标准系统源码根目录
1.0 环境准备
1.搭建OpenHarmony标准系统开发环境:https://forums.openharmony.cn/forum.php?mod=viewthread&tid=897
2.hdc工具:https://forums.openharmony.cn/forum.php?mod=viewthread&tid=1458
1.1 移植准备:得到一份完整的kernel代码
OpenHarmony标准系统4.1r使用的是kernel 5.10的内核,在此基线基础上,回合CVE补丁及OpenHarmony特性,作为OpenHarmony Common Kernel基线。针对不同的芯片,各厂商合入对应的板级驱动补丁,完成对OpenHarmony的基线适配。
所以要把npu驱动移植到kernel 5.10,首先得有一份完整的rk3568 kernel5.10代码。所以我们需要手动把4.1r_3568/kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch打进/4.1r_3568/kernel/linux/linux-5.10内核中
2.然后注释掉/4.1r_3568/device/board/hihope/rk3568/kernel/build_kernel.sh中的patch -p1 < ${KERNEL_PATCH}
然后就可以在4.1r_3568/kernel/linux/linux-5.10中得到一份完整的rk3568 kernel 5.10代码,在此内核代码基础上进行修改,移植npu的驱动.
1.2 内核移植
1.获取npu驱动源码:https://github.com/rockchip-linux/kernel 选择5.10分支,NPU驱动位于:drivers/rknpu
本样例使用的npu驱动,请查看本目录rknpu
2.修改//kernel/linux/config/linux-5.10/rk3568/arch/arm64_defconfig文件,添加RKNPU的CONFIG配置
3.将驱动代码drivers/rknpu移植到4.1r_3568/kernel/linux/linux-5.10/drivers目录中
4.修改drivers目录下的Makefile文件,添加如下内容
5.修改drivers目录下的Kconfig文件,添加如下内容
6.修改kernel/linux/linux-5.10/drivers/iommu/rockchip-iommu.h,修改好的rockchip_iommu.h位于本目录下:rockchip_iommu.h
7.修改kernel/linux/linux-5.10/include/soc/rockchip/rockchip_iommu.c,修改好的rockchip_iommu.c位于本目录下:rockchip-iommu.c
8.修改kernel/linux/linux-5.10/drivers/soc/rockchip/rockchip_opp_select.c,修改好的rockchip_opp_select.c位于本目录下:rockchip_opp_select.c
9.修改kernel/linux/linux-5.10/include/soc/rockchip/rockchip_opp_select.h,修改好的rockchip_opp_select.h位于本目录下:rockchip_opp_select.h
10.kernel/linux/linux-5.10/drivers/rknpu/rknpu_drv.c中将MONITOR_TYPE_DEV
改为MONITOR_TPYE_DEV
11.修改kernel/linux/linux-5.10/drivers/rknpu/rknpu_devfreq.c
12.在kernel/linux/linux-5.10/arch/arm64/boot/dts/rockchip/rk3568.dtsi设备树文件中将npu注释打开
改为
1.2 npu移植简单验证
1.编译arm64的带有npu驱动的rk3568镜像
2.编译好的镜像位于/out/rk3568/packages/phone/images下
3.使用RKDevTool工具烧录镜像到DAYU200后,查看开机内核打印,有如下输出则内核npu驱动移植成功。
内核打印太多,通过hdc shell dmesg | grep "RKNPU"
可能看不到以下输出
学习了