OrangePi5pro更新npu驱动
编辑部署环境
CPU:RK3588s
内存大小:8G
使用
emmc
作为存储,额定大小 32GLinux 版本:Debian11
Linux 内核:
Linux 6.1.43-rockchip-rk3588
RKNPU driver: v0.9.6
kllm-runtime version: 1.1.4
此外,另外需要一台电脑运行 Ubuntu22.04,当然可以使用 VMware!
步骤
检查 NPU 驱动!
目前 RKNPU driver: v0.9.8
经过测试,kllm-runtime version: 1.1.4
可以完美运行。截至目前,官方给出的镜像里 RKNPU driver: v0.9.6
经过验证,不能兼容,运行出错!
sudo cat /sys/kernel/debug/rknpu/version
应当出现
orangepi@orangepi5pro:~$ sudo cat /sys/kernel/debug/rknpu/version
[sudo] password for orangepi:
RKNPU driver: v0.9.8
编译新内核
如果你的驱动版本在 kllm-runtime version: 1.1.4
支持的 v0.9.8,则不需要这一步,直接跳下一步!
这一步我们需要重新在另一台电脑 Ubuntu 编译 Linux 内核,并把它安装到 orangePi 上。
在 Ubuntu 主机上:lsb_release -a
查看 Ubuntu 版本;
切记!orangePi 给出的编译库及工具链仅支持 22.04. 我尝试就在 debian 上编译结果出错了
安装编译内核库及工具链 Linux sdk:
sudo apt-get update
sudo apt-get install -y git
git clone https://github.com/orangepi-xunlong/orangepi-build.git -b next
orangepi-build 第一次运行的时候会去下载交叉编译工具链、u-boot 和 linux 内核
源码,成功编译完一次 linux 镜像后在 orangepi-build 中可以看到的文件和文件夹有
a. build.sh: 编译启动脚本range Pi 用户手册
深圳市迅龙软件有限公司版权所有
492
b. external: 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序
的源码,编译镜像过程中缓存的 rootfs 压缩包也存放在 external 中
c. kernel: 存放 linux 内核的源码,里面名为 orange-pi-5.10-rk35xx 的文件夹
存放的就是 RK3588/RK3588S 系列开发板 legacy 分支的内核源码,内核源
码的文件夹的名字请不要手动修改,如果修改了,编译系统运行时会重新下
载内核源码
d. LICENSE: GPL 2 许可证文件
e. README.md: orangepi-build 说明文件
f. output: 存放编译生成的 u-boot、linux 等 deb 包、编译日志以及编译生成的
镜像等文件
g. scripts: 编译 linux 镜像的通用脚本
h. toolchains: 存放交叉编译工具链
i. u-boot: 存放 u-boot 的源码,里面名为 v2017.09-rk3588 的文件夹存放的就
是 RK3588/RK3588S 系列开发板 legacy 分支的 u-boot 源码,u-boot 源码的
文件夹的名字请不要手动修改,如果修改了,编译系统运行时会重新下载
u-boot 源码
j. userpatches: 存放编译脚本需要用到的配置文件
之后:
cd ./orangepi-build
运行 bash 脚本
sudo ./build.sh
选择 Kernel package,然后回车
接着选择开发板的型号
按需选择是否更改内核参数,这里我就不改
开始第一次编译!(等下还要重新再来一次)
编译时间因 Ubuntu 主机的 cpu 决定!
编译完成后进入输出目录 output
可以发现已经有几个镜像文件了
a.linux-dtb-legacy-rockchip-rk3588_1.0.6_arm64.deb 包含内核使用的 dtb 文件
b. linux-headers-legacy-rockchip-rk3588_1.0.6_arm64.deb 包含内核头文件
c. linux-image-legacy-rockchip-rk3588_1.0.6_arm64.deb 包含内核镜像和内核模块
删掉!由于编译的内核版本还是 0.9.6,我们需要更换驱动文件,重新编译 -
找到 npu 的最新驱动文件压缩包
该压缩包在 rknn-llm 源码下。/rknn-llm/drivers
解压缩替换内核驱动!
找到编译后 /linux-rockchip-rk3588-legacy
的 drivers 文件夹,将解压后的新驱动 rknpu
文件夹替换掉原来的即可。
注意!
在 0.9.8 下(截至目前测试),我们还需要对其它几个驱动文件进行修改!
打开编译源码目录下
include/linux/mm.h ,
在 include 引用下面添加:static inline void vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags) { vma->vm_flags |= flags; } static inline void vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags) { vma->vm_flags &= ~flags; }
新的 rknpu 驱动文件里
rknpu_devfreq.c
:注释掉:
//.set_soc_info = rockchip_opp_set_low_length,
取消同步
orangepi-bulid 编译系统编译 linux 内核源码时首先会将 linux 内核源码和 github 服务器的 linux 内核源码进行同步,所以如果想修改 linux 内核的源码,首先需要关闭源码的更新功能(需要完整编译过一次 linux 内核源码后才能关闭这个功能,否则会提示找不到 linux 内核的源码,如果是从百度云盘下载的源码压缩包,则没有这个问题,因为 linux 的源码都已缓存好了),否则所作的修改都会被还原
将 userpatches/config-default.conf
中的 IGNORE_UPDATES
变量为“yes”
Ok,不出意外,不漏步骤的话,可以重新编译了
cd /your/path/orangepi-build
sudo ./build.sh
重新按照源步骤选择即可。
一顿输出,会得到
a.linux-dtb-legacy-rockchip-rk3588_1.0.6_arm64.deb 包含内核使用的 dtb 文件
b. linux-headers-legacy-rockchip-rk3588_1.0.6_arm64.deb 包含内核头文件
c. linux-image-legacy-rockchip-rk3588_1.0.6_arm64.deb 包含内核镜像和内核模块
d.linux-image-legacy-rockchip-rk3588_deg_1.0.6_arm64.deb
安装新内核
1. 用 sftp 或者 rz
命令上传到 OrangePi 板子上
2.cd
到上传到的文件夹 : cd /your/path
3.4 个 deb
包都在一个文件夹的话, 直接安装 deb 内核;
sudo dpkg -i *.deb
大功告成!
重启!
sudo reboot
之后你可以重新查看内核版本,是否已经更新:
sudo cat /sys/kernel/debug/rknpu/version
- 3
- 1
-
分享