RK3576 Android14,内存大于4G时UVC应用无法申请内存

最近有个项目需要将Linux虚拟成UVC摄像头,开发过程中遇到一个奇怪的事情,通过V4l2框架接口申请内存时,相同的板子,只是内存一个4G一个8G。4G的内存可以申请成功,8G就不行。提示"内存不足"

内存更大反而内存不足?嗯?玄学?

转念一想,是不是UVC所使用的DMA无法使用4G以外的内存地址导致的?

咨询RK官方答复果然:

可能是超过4G使用了swiotlb buf,这个buf大小只有64M,最在连续块只有256K。

swiotlb据我的理解,应该就是在低于4G的内存空间当中预留一部分空间。当设备分配到高于4G的寻址空间的内存时,将内容拷贝到预留的空间内,供DMA访问。

如下修改后正常。

diff 复制代码
diff --git a/kernel-6.1/include/linux/swiotlb.h b/kernel-6.1/include/linux/swiotlb.h
index 35bc4e281..9f5799d15 100644
--- a/kernel-6.1/include/linux/swiotlb.h
+++ b/kernel-6.1/include/linux/swiotlb.h
@@ -22,7 +22,7 @@ struct scatterlist;
  * must be a power of 2.  What is the appropriate value ?
  * The complexity of {map,unmap}_single is linearly dependent on this value.
  */
-#define IO_TLB_SEGSIZE    128
+#define IO_TLB_SEGSIZE    1024
相关推荐
阿拉斯攀登2 天前
第 11 篇 RK 平台安卓驱动实战 4:I2C 设备驱动开发,以 OLED 屏为例
android·驱动开发·i2c·瑞芯微·嵌入式驱动·rk3576·嵌入式安卓
阿拉斯攀登2 天前
第 9 篇 RK 平台安卓驱动实战 2:中断驱动开发,按键中断的完整实现
驱动开发·嵌入式硬件·rk3568·中断·瑞芯微·rk3576·rk安卓驱动
阿拉斯攀登2 天前
第 18 篇 综合项目实战:基于 RK3568 的安卓智能门禁系统,全栈开发
android·驱动开发·瑞芯微·嵌入式驱动·rk3576·安卓驱动
阿拉斯攀登2 天前
第 10 篇 RK 平台安卓驱动实战 3:PWM 驱动开发,实现 LED 呼吸灯 + 电机调速
驱动开发·嵌入式硬件·pwm·瑞芯微·嵌入式驱动·rk3576·嵌入式安卓
阿拉斯攀登7 天前
【瑞芯微 RK 系列 + 安卓驱动全栈教程】博客系列
嵌入式硬件·安卓·瑞芯微·rk3576·嵌入式安卓·安卓驱动
Suifqwu8 天前
rk3576(2)之添加qt以及添加linux旋转补丁
rk3576
Suifqwu8 天前
rk3576(4)之buildroot添加package以及Qt程序开机自启
qt·buildroot·rk3576
peixiuhui1 个月前
G8701 RK3576 RealTime Linux 测试报告
linux·运维·边缘计算·rk3588·rk3576·rt-linux·实时内核
Industio_触觉智能2 个月前
解锁多路GMSL摄像头输入,基于瑞芯微RK3576的触觉智能硬件方案
瑞芯微·rk3576·ahd·gmsl·rk3576j·多路摄像头·gmsl解串
Industio_触觉智能2 个月前
触觉智能RK3576开发板OpenHarmony开源鸿蒙蓝牙BLE主机实现方案
蓝牙·openharmony·主机·ble·开源鸿蒙·rk3576·从机