Arm Linux如何预留并使用超大内存

zc_5200 2017-07-03 03:02:01
Hi all,
最近在做一个事情,我们的Linux系统里集成了一个FPGA,系统使用2G内存,我们希望使用后面的1G内存作为FPGA数据存取空间,内核通过DMA读取FPGA数据,请问大家有木有好的思路,如何实现?
已经试过的方式:
1. kmalloc,这种方法我只能最多申请到700多M空间就挂了
2. dma_alloc_coherent,这个我只能申请64M的空间
3. uboot传参mem=1G,这样后面的1G就被reserve了,但是内核里面不知道怎么样使用?

欢迎讨论!
谢谢了:)
...全文
1927 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
花开花落_fzu 2018-08-31
  • 打赏
  • 举报
回复
uboot传参mem=1G

使用这种方法,预留的1G内存使用ioremap内核直接使用,用户态使用mmap使用该块内存
飞翔一生 2018-08-16
  • 打赏
  • 举报
回复
FPGA在这里可以看为外设,虽然理论上说,DMA是可以覆盖4GB的虚拟地址空间,但是这里应该访问的是DMA_ZONE,而DMA_ZONE根据不同硬件配置又不同,一般是256M的居多。
飞翔一生 2018-08-16
  • 打赏
  • 举报
回复
当然,16MB的也有很多。
飞翔一生 2018-08-16
  • 打赏
  • 举报
回复
kmalloc,默认调用2个方向,1个是slab,一个是get_free_page(s),这些都只能映射到物理内存映射区,也就是内核空间的前896M,你要申请700M不出问题就不错了,申请大批量的空间,必然要使用不连续的物理内存,这只能使用vmalloc,使用内核虚拟地址空间。
vlah 2017-08-11
  • 打赏
  • 举报
回复
内核空间中可以用ioremap映射成虚拟地址,用户空间中用mmap映射成虚拟地址。然后像普通内存一样用。 这种情况下,这些内存可能没有被cache,memcpy的速度比正常内存慢。而且fpga写内存时可能与arm 系统读内存存在冲突。
Richsheep_0x00 2017-07-08
  • 打赏
  • 举报
回复
楼主,dma_alloc_coherent我现在只能申请2M下来,有什么办法么,在arm上用
zhxianbin 2017-07-06
  • 打赏
  • 举报
回复
没有具体研究过,这还有一个做法: http://blog.csdn.net/21cnbao/article/details/7309757

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧