LINUX内存池实现

在LINUX应用程序中,业务需求上需要利用DMA来进行数据搬移的操作,但由于LINUX应用程序中访问的都是虚拟地址,且这个虚拟地址对应的物理地址并不一定是连续的。而DMA的操作是针对物理地址来实现的,且必须是连续的物理地址,来满足突发数据的传输。这就涉及到如何来处理虚拟地址与DMA操作之间的关系了。

       实现虚拟地址和DMA地址之间的统一性,可以利用如图1所示的方法:

       1在DDR上先预留160M内存给DMA使用,将160M内存的首地址(物理地址)通过地址映射,得到虚拟地址,此虚拟地址就是这160M内存的起始地址对应的物理地址,应用程序可以通过访问虚拟地址来实现对这160M内存的读写。

       2对这160M的连续物理地址的内存需要进行管理,保证用户在使用DMA时,通过在这160M的空间中申请内存,来保证DMA操作的可行性。

在LINUX应用程序中,业务需求上需要利用DMA来进行数据搬移的操作,但由于LINUX应用程序中访问的都是虚拟地址,且这个虚拟地址对应的物理地址并不一定是连续的。而DMA的操作是针对物理地址来实现的,且必须是连续的物理地址,来满足突发数据的传输。这就涉及到如何来处理虚拟地址与DMA操作之间的关系了。

       实现虚拟地址和DMA地址之间的统一性,可以利用如图1所示的方法:

       1在DDR上先预留160M内存给DMA使用,将160M内存的首地址(物理地址)通过地址映射,得到虚拟地址,此虚拟地址就是这160M内存的起始地址对应的物理地址,应用程序可以通过访问虚拟地址来实现对这160M内存的读写。

       2对这160M的连续物理地址的内存需要进行管理,保证用户在使用DMA时,通过在这160M的空间中申请内存,来保证DMA操作的可行性。

图1. 虚拟地址与DMA地址的统一性方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值