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
相关推荐
迅为电子14 小时前
迅为RK3576开发板Android 多屏显示
rk3576
ArmSoM10 天前
ArmSoM RK3588/RK3576核心板,开发板网络设置
rk3588·树莓派·开源硬件·rockchip·rk3576
hedalei24 天前
RK3576 Android14编译OTA包提示java.lang.UnsupportedClassVersionError问题
android·android14·rk3576
|Ringleader|2 个月前
【Unity Bug 随记】unity version control 报 xx is not in a workspace.
unity·bug·版本管理·uvc
炭烤毛蛋5 个月前
RK3576 芯片介绍
arm开发·rk3576
ArmSoM7 个月前
ArmSoM-Sige7/5/1 和树莓派5规格比较
驱动开发·嵌入式硬件·rk3588·rockchip·rk3576·rk3528