一、参考资料
截至目前,瑞芯微官方的npu驱动最新为 0.9.8,该压缩包在 rknn-llm 源码下:
针对驱动的更新说明,在 rkllm 的手册中有步骤说明:
sudo cat /sys/kernel/debug/rknpu/version
查看开发板的npu版本,如果低于 0.9.8,可以继续更新。瑞芯微的新版刚出一周,目前香橙派官网还没有更新,还是0.9.6,自己先尝尝鲜。
二、更新源码
1、覆盖源码
将压缩包解压后,进入文件夹 drivers,进入 rknpu 文件夹,得到驱动源码:
将当前文件夹内的所有文件,复制到源码下 drivers/rknpu 中,覆盖原始文件。
如果担心有问题,可以先备份原始版本。
2、文件修改
由于我使用的内核版本为 5.10,针对目前版本,源码还需要修改,手册中也有提到。如果使用6.1的内核可能不需要修改,还没试过。
打开源码目录下 include/linux/mm.h 文件,添加以下代码:
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_devfreq.c 文件内无法识别函数:
.set_soc_info = rockchip_opp_set_low_length,
这条语句出现在源码237行,属于rk3576的结构体,于是我直接注释,再次执行编译。
没有报错,并且更新内核后能够正常运行:
更新成功。