1. 问题背景
在 RK3568J 平台上进行深度学习推理时,RGA(Raster Graphic Acceleration,光栅图形加速单元)是常用的硬件加速模块,用于图像缩放、格式转换、旋转等操作。很多推理框架(如 RKNN-Toolkit2、OpenCV 等)在底层会调用 RGA 来加速图像预处理。
然而,默认情况下 RGA 设备节点的权限受限,普通用户无法直接访问。这就导致了一个常见问题:不使用 sudo 运行时,RGA 调用会报错,程序自动回退到 CPU 处理,推理性能大打折扣。
2. 问题现象
在未做任何权限配置的情况下,直接以普通用户运行推理程序,通常会出现类似以下现象:
- 程序日志中提示 RGA 初始化失败或打开设备失败;
- 图像预处理耗时明显增加,推理整体延迟上升;
- 使用
sudo运行时一切正常,性能符合预期。
这是因为 RGA 设备节点(如/dev/rga)的默认权限不允许普通用户读写。
3. 解决方案:通过 udev 规则设置设备权限
Linux 的 udev 机制允许我们为设备节点自定义权限规则。我们可以创建一个规则文件,为 RGA 设备设置0666权限,使所有用户都能直接访问。
3.1 创建 udev 规则文件
首先,创建一个新的规则文件/etc/udev/rules.d/99-rga.rules:
sudovim/etc/udev/rules.d/99-rga.rules3.2 写入规则内容
在文件中添加以下内容:
KERNEL=="rga", MODE="0666"这条规则的含义是:对于内核名为rga的设备节点,将其权限模式设置为0666,即所有用户均可读写。
说明:系统中其他硬件设备(如某些 USB 设备、GPU 设备等)也常通过类似的 udev 规则来设置
0666权限,从而允许普通用户直接访问。我们参考这种做法为 RGA 设备进行设置。
3.3 重新加载并触发 udev 规则
保存文件后,需要重新加载 udev 规则并触发使其生效:
sudoudevadm control --reload-rulessudoudevadm trigger执行完上述命令后,RGA 设备节点的权限即已更新。
4. 验证效果
完成上述配置后,无需使用sudo,直接以普通用户运行推理程序即可正常调用 RGA 硬件加速:
# 普通用户直接运行,不再需要 sudopython3 your_inference_script.py此时程序应能正常使用 RGA 进行图像预处理,推理性能与使用sudo运行时一致。
5. 注意事项
安全性:
0666权限意味着所有系统用户都能访问 RGA 设备。在单用户开发板或专用推理设备上通常可以接受,但在多用户共享的服务器上请评估安全风险。设备节点名称:不同内核版本或驱动配置下,RGA 设备节点名称可能不同(如
/dev/rga、/dev/rga0等)。如果规则未生效,请先确认实际设备节点名称:ls/dev/rga*然后根据实际名称调整规则中的
KERNEL匹配值。重启后是否生效:udev 规则在系统启动时会自动加载,因此重启后配置依然有效,无需重复设置。
6. 总结
通过创建 udev 规则并为 RGA 设备设置0666权限,我们成功解决了 RK3568J 平台上普通用户无法使用 RGA 硬件加速的问题。现在无需sudo即可正常运行深度学习推理程序,充分发挥 RGA 的图像处理加速能力,提升整体推理性能。