OpenHarmony标准系统上实现对rk系列芯片NPU的支持(驱动移植)

news2024/12/23 13:40:07

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

  • 下载地址:http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist

1.1 移植准备:得到一份完整的kernel代码

OpenHarmony标准系统4.1r使用的是kernel 5.10的内核,在此基线基础上,回合CVE补丁及OpenHarmony特性,作为OpenHarmony Common Kernel基线。针对不同的芯片,各厂商合入对应的板级驱动补丁,完成对OpenHarmony的基线适配。

image.png

所以要把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内核中

cd 4.1r_3568/kernel/linux/linux-5.10

patch -p1 < /home/jiajiahao/OpenHarmony/4.1r_3568/kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch

2.然后注释掉/4.1r_3568/device/board/hihope/rk3568/kernel/build_kernel.sh中的patch -p1 < ${KERNEL_PATCH}

image.png

然后就可以在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

image.png

2.修改//kernel/linux/config/linux-5.10/rk3568/arch/arm64_defconfig文件,添加RKNPU的CONFIG配置

#
# RKNPU
#
CONFIG_ROCKCHIP_RKNPU=y
CONFIG_ROCKCHIP_RKNPU_DEBUG_FS=y
CONFIG_ROCKCHIP_RKNPU_DRM_GEM=y

image.png

3.将驱动代码drivers/rknpu移植到4.1r_3568/kernel/linux/linux-5.10/drivers目录中

image.png

4.修改drivers目录下的Makefile文件,添加如下内容

source "drivers/rknpu/Kconfig"

image.png

5.修改drivers目录下的Kconfig文件,添加如下内容

obj-$(CONFIG_ROCKCHIP_RKNPU)    += rknpu/

image.png

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

static int rk3588_npu_set_read_margin(struct device *dev,
                      struct rockchip_opp_info *opp_info,
                      u32 rm)
修改为
static int rk3588_npu_set_read_margin(struct device *dev,
                      struct rockchip_opp_info *opp_info,
                      unsigned long rm)

12.在kernel/linux/linux-5.10/arch/arm64/boot/dts/rockchip/rk3568.dtsi设备树文件中将npu注释打开

            /* These power domains are grouped by VD_NPU */
            /*pd_npu@RK3568_PD_NPU {
                reg = <RK3568_PD_NPU>;
                clocks = <&cru ACLK_NPU_PRE>,
                     <&cru HCLK_NPU_PRE>,
                     <&cru PCLK_NPU_PRE>;
                pm_qos = <&qos_npu>;
            };*/

改为

            /* These power domains are grouped by VD_NPU */
            pd_npu@RK3568_PD_NPU {
                reg = <RK3568_PD_NPU>;
                clocks = <&cru ACLK_NPU_PRE>,
                     <&cru HCLK_NPU_PRE>,
                     <&cru PCLK_NPU_PRE>;
                pm_qos = <&qos_npu>;
            };

1.2 npu移植简单验证

1.编译arm64的带有npu驱动的rk3568镜像

./build.sh --product-name rk3568 --ccache --no-prebuilt-sdk--target-cpu arm64

2.编译好的镜像位于/out/rk3568/packages/phone/images下

3.使用RKDevTool工具烧录镜像到DAYU200后,查看开机内核打印,有如下输出则内核npu驱动移植成功。

内核打印太多,通过hdc shell dmesg | grep "RKNPU"可能看不到以下输出

image.png

[    7.675214] RKNPU fde40000.npu: Adding to iommu group 0
[    7.676593] RKNPU fde40000.npu: RKNPU: rknpu iommu is enabled, using iommu mode
[    7.677428] RKNPU fde40000.npu: can't request region for resource [mem 0xfde40000-0xfde4ffff]
[    7.679266] [drm] Initialized rknpu 0.8.2 20220829 for fde40000.npu on minor 1
[    7.679856] RKNPU fde40000.npu: Failed to get npu_leakage
[    7.682441] RKNPU fde40000.npu: avs=0
[    7.683024] RKNPU fde40000.npu: l=0 h=2147483647 hyst=5000 l_limit=0 h_limit=0 h_table=0
[    7.683835] RKNPU fde40000.npu: failed to find power_model node
[    7.683881] RKNPU fde40000.npu: RKNPU: failed to initialize power model
[    7.683912] RKNPU fde40000.npu: RKNPU: failed to get dynamic-coefficient

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows11 + Ubuntu 24.10

我在win11安装Ubuntu主板:华硕主板Z790 DARK HERO,进入安装,所以文章中bios系统设置为华硕的bios系统。 一、确认系统信息-BIOS为UEFL 备注:UEFL优于MBR,具体可以查询问ai。如果BIOS模式中不是UEFL,建议为UEFL 1、 win+R 输入 msinfo32,打开系统信息,可以看到…

printf详解

printf("hello \nworld\n")&#xff1a;将hello word打印到屏幕上&#xff0c;在使用printf函数时可以多次使用换行符\n&#xff0c;想在哪里加都可以 int main() {printf("hello \nworld\n");return 0; } 占位符&#xff1a;在printf中&#xff0c;占位…

delphi制作漂亮的农历窗体(IntraWeb+Layui的完美结合)

delphi制作漂亮的农历窗体&#xff08;IntraWebLayui的完美结合&#xff09; 不需要安装服务器&#xff0c;Apache和IIS都不需要&#xff0c;自带企业级服务器。 运行exe服务器就架好了&#xff0c;直接打开手机浏览器或者电脑浏览器&#xff0c;网页就出来了&#xff0c;如果…

AI驱动TDSQL-C Serverless 数据库技术实战营-颠覆传统分析模式:智能体与TDSQL-C结合实现人才的可视化数据分析

文章目录 前言云数据库的对比传统云数据库&#xff1a;TDSQL-C Serverless: 智能体与TDSQL-C的结合思路 算力服务器与数据库服务器申请与部署购买 TDSQL-C Mysql Serverless 实例购买HAI高算力服务器 准备工作准备数据下载依赖 案例开发创建数据库开启智能体与TDSQL-C结合 总结…

智能新宠:BabyAlpha A2开启家庭机器人新时代

具身智能领域的“疯狂”&#xff0c;已经迈入了全新的阶段&#xff01;让我们一起来看看这段视频&#xff1a;一个人形机器人在前面奔跑&#xff0c;一群机器狗紧随其后&#xff1b;接着是人追赶机器狗&#xff0c;随后机器狗又追逐人……视频最后&#xff0c;那个机器人似乎还…

【Python】Daphne:Django 异步服务的桥梁

Daphne 是 Django Channels 项目的一部分&#xff0c;专门用于为 Django 提供支持 HTTP、WebSocket、HTTP2 和 ASGI 协议的异步服务器。Daphne 是一个开源的 Python 异步服务器&#xff0c;它可以帮助开发者运行异步应用程序&#xff0c;并且非常适合与 Django Channels 一起使…

回家啦回家啦

耒阳也有茶颜月色了&#xff0c;没忍住喝了一杯&#xff01; 衡阳卤粉&#xff0c;想出来的味道&#x1f445;&#xff0c;一般般 但一个粉店能做到24小时不打烊&#xff0c;应该也还行哈 银行竟然支持扫脸取钱了&#xff01;&#xff01;

【微服务即时通讯系统】——etcd一致性键值存储系统、etcd的介绍、etcd的安装、etcd使用和功能测试

文章目录 etcd1. etcd的介绍1.1 etcd的概念 2. etcd的安装2.1 安装etcd2.2 安装etcd客户端C/C开发库 3. etcd使用3.1 etcd接口介绍 4. etcd使用测试4.1 原生接口使用测试4.2 封装etcd使用测试 etcd 1. etcd的介绍 1.1 etcd的概念 Etcd 是一个基于GO实现的 分布式、高可用、一致…

通过OpenScada在ARMxy边缘计算网关上实现数字化转型

随着工业4.0概念的普及&#xff0c;数字化转型已成为制造业升级的关键路径之一。在此背景下&#xff0c;边缘计算技术因其能够有效处理大量数据、减少延迟并提高系统响应速度而受到广泛关注。ARMxy边缘计算网关&#xff0c;特别是BL340系列&#xff0c;凭借其强大的性能和灵活的…

--杂项2--

将之前实现的顺序表、栈、队列都更改成模板类 #include <iostream> #include <string.h> using namespace std;template <typename T> class Stack { private:T* a;int top;int size1;public:Stack(int c) : a(new T[c]), top(-1), size1(c) {}~Stack() { de…

IDEA 系列产品 下载

准备工作 下载 下载链接&#xff1a;https://www.123865.com/ps/EF7OTd-mbHnH 仅供参考 环境 演示环境&#xff1a; 操作系统&#xff1a;windows10 产品&#xff1a;IntelliJ IDEA 版本&#xff1a;2024.1.2 注意&#xff1a;如果需要其他产品或者版本可以自行下载&#xff0…

ArcEngine C#二次开发图层处理:根据属性分割图层(Split)

需求&#xff1a;仅根据某一属性&#xff0c;分割图层&#xff0c;并以属性值命名图层名称保存。 众所周知&#xff0c;ArcGIS ArcToolbox中通过Split可以实现图形分割一个图层&#xff0c;以属性值命名图层&#xff0c;如下图所示。 本文仅仅依据属性值&#xff0c;将一个shp…

Android界面控件概述

节选自《Android应用开发项目式教程》&#xff0c;机械工业出版社&#xff0c;2024年7月出版 做最简单的安卓入门教程&#xff0c;手把手视频、代码、答疑全配齐 控件是Android界面的重要组成单元&#xff0c;Android应用主要通过控件与用户交互&#xff0c;Android提供了非常…

YUView:YUV查看工具

文章目录 引言安装步骤使用YUView查看YUV数据播放与分析功能亮点注意事项 YUView的架构设计 引言 本文将介绍如何在Ubuntu 20.04上安装YUView&#xff0c;并分享其基本使用方法。 安装步骤 安装依赖项 在开始安装YUView前&#xff0c;先确保安装了所有必需的依赖包。打开终…

VGA/HDMI/DP接口和USB、串口通信协议

1、视频接口 开始之前我们先聊一聊数字信号和模拟信号&#xff0c;模拟信号和数字信号的不同之处在于它们所传输的信息的形式。模拟信号是一个连续的信号&#xff0c;可以以在无限小的时间内进行测量。数字信号则是以离散的形式进行传输&#xff0c;它的数值只能是离散的、有限…

每日一题学习笔记

给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&#xff0c;提示&…

Unity中的GUIStyle错误:SerializedObject of SerializedProperty has been Disposed.

一运行就循环打印这个报错&#xff0c; 解决办法&#xff0c;每次改参数之后在HIerarchy中手动保存&#xff0c;就会停止循环打印&#xff0c;style中的字体也显示出来了&#xff0c; 或者 直接换个低版本的

如何使用C语言接入Doris数据库

如何使用C语言接入Doris数据库 一、环境准备1. 安装MySQL C API2. Doris数据库环境二、编写C语言接入代码1. 包含必要的头文件2. 编写连接和查询函数3. 编译和运行程序三、注意事项1. 安全性2. 错误处理3. 性能优化4. 兼容性5. 调试和日志记录四、结论Doris(之前称为Palo或Apa…

SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句

最近做一个需求&#xff0c;关于SQL高可用优化&#xff0c;需要优化项目中的SQL&#xff0c;提升查询效率。 SQL高可用优化 一、优化SQL包含distinct场景二、优化SQL中Where条件中索引字段是否为NULL三、代码验证1. NodeMapper2. NodeService3. NodeController4.数据库数据5.项…

《西安交通大学学报》

投稿须知 感谢你对本刊的信任和支持。为了更好地为你服务&#xff0c;保证你的稿件能够顺利通过专家审稿&#xff0c;乃至及时录用发表&#xff0c;现将向本刊投稿时需要注意的事项罗列如下。   &#xff08;1&#xff09;本刊面向国内外公开征稿&#xff0c;校外作者的稿件要…