RK3588NPU驱动版本升级至0.9.6教程

1、下载RK3588NPU驱动

下载地址:https://github.com/airockchip/rknn-llm/tree/main 如下图:

null

null

npu驱动替换后,编译内核会报错,信息如下:

null

2、修改NPU驱动源码

2.0 修改MONITOR_TPYE_DEV写错问题

1、(如果正确就不用改了,我这里的版本原本就时正确的)修改drivers/rknpu/rknpu_devfreq.c将MONITOR_TYPE_DEV写成了MONITOR_TPYE_DEV

把
MONITOR_TPYE_DEV
改为
MONITOR_TYPE_DEV

null

2.1 解决缺少函数rockchip_uninit_opp_table问题

2.1.1、rockchip_uninit_opp_table函数没有,要从github对应的kernel下载进行merge,涉及文件:

  • SDK/kernel/include/soc/rockchip/rockchip_opp_select.h
  • SDK/kernel/drviers/soc/rockchip/rockchip_opp_select.c

2.2.1.1 SDK/kernel/include/sock/rockchip/rockchip_opp_select.h 修改如下

// 在代码
int rockchip_init_opp_table(struct device *dev,
                struct rockchip_opp_info *info,
                char *lkg_name, char *reg_name);
// 之后增加以下代码
void rockchip_uninit_opp_table(struct device *dev,
             				   struct rockchip_opp_info *info);

如下图:
在这里插入图片描述

// 在末尾位置增加以下代码
static inline void rockchip_uninit_opp_table(struct device *dev,
                                             struct rockchip_opp_info *info)
{
}

如下图:
null

2.1.1.2 SDK/kernel/drviers/soc/rockchip/rockchip_opp_select.c 修改如下:

// 在文件末尾,MODULE_DESCRIPTION("ROCKCHIP OPP Select");之前增加以下代码
void rockchip_uninit_opp_table(struct device *dev, struct rockchip_opp_info *info)
{
        struct opp_table *opp_table;

        if (info) {
                kfree(info->opp_table);
                info->opp_table = NULL;
                devm_kfree(dev, info->clks);
                info->clks = NULL;
                devm_kfree(dev, info->volt_rm_tbl);
                info->volt_rm_tbl = NULL;
        }

        opp_table = dev_pm_opp_get_opp_table(dev);
        if (IS_ERR(opp_table))
                return;
        dev_pm_opp_of_remove_table(dev);
        if (opp_table->prop_name)
                dev_pm_opp_put_prop_name(opp_table);
        if (opp_table->supported_hw)
                dev_pm_opp_put_supported_hw(opp_table);
        dev_pm_opp_put_opp_table(opp_table);
}
EXPORT_SYMBOL(rockchip_uninit_opp_table);

如下图:
null

2.2 解决缺少函数vm_flags_set、vm_flag_clear的问题

vm_flags_set,vm_flag_clear这两个函数没有,参考0.9.3的方式直接对vma->vm_flags复制,涉及文件:

  • SDK/kernel/drivers/rknpu/rknpu_gem.c

2.2.1 vm_flags_set具体修改如下
参考如下方式修改:

//vm_flags_set(vma, VM_MIXEDMAP);		//注释这行
vma->vm_flags |= VM_MIXEDMAP;			//增加这行

有以下几个地方

  • static int rknpu_gem_mmap_pages
    null
  • 938行左右
    null
  • 989行左右
    在这里插入图片描述

2.2.2 vm_flag_clear具体修改如下
参考如下方式修改:

//vm_flags_clear(vma, VM_PFNMAP);			//注释这行
vma->vm_flags &= ~VM_PFNMAP;			//增加这行
  • vm_flag_clear只出现了1次,在991行左右
    null

2.3 内核编译成功

sudo ./build.sh kernel

此时再次编译内核就成功了!

2.4 重新构建系统

重新构建系统

sudo ./build.sh

重新烧写系统后,查看rknpu驱动版本

cat /sys/kernel/debug/rknpu/version

如下图:
在这里插入图片描述

3、注意事项

转换rkllm内存至少需要16G,从https://huggingface.co/Qwen/Qwen-1_8B-Chat下载所有文件

4、其他问题处理

1、执行文件出错时,加大文件打开数量限制

ulimit -HSn 102400

运行

./llm_demo qwen.rkllm
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值