免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4123 | 回复: 13
打印 上一主题 下一主题

如何分配物理上连续的线性地址空间?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-09 23:32 |只看该作者 |倒序浏览
请教:
如何分配物理上连续的线性地址空间??
如何在用户空间获取线性地址空间对应的物理地址>>>???
感谢了!!

论坛徽章:
0
2 [报告]
发表于 2009-12-10 02:02 |只看该作者
如何分配物理上连续的线性地址空间??

kmalloc

如何在用户空间获取线性地址空间对应的物理地址>>>???

如果是x86 32位,那么一般 phyaddr = virtaddr - 0xc000,0000

论坛徽章:
0
3 [报告]
发表于 2009-12-10 08:35 |只看该作者
不好意思,我想我说得不是很准确. 我想问的是在用户空间
在用户空间,如何分配物理上连续的线性地址空间??
在用户空间,如何在用户空间获取线性地址空间对应的物理地址>>>???
非常感谢了!!

论坛徽章:
0
4 [报告]
发表于 2009-12-10 11:58 |只看该作者
如果在用户空间, 如果是分配的内存小于4K,那么物理上连续的可能性还是比较大的,但是纯粹碰运气。

我不知道有什么方法可以保证分配出物理连续的地址。也许要自己写个分配函数?

LZ为啥要分配物理连续的内存呢?

论坛徽章:
0
5 [报告]
发表于 2009-12-10 13:38 |只看该作者
其实,我就是想问 有没有什么glibc 提供的接口,可以分配连续物理空间的线性地址.


因为,目前  解码硬件代码放在用户空间,
而解码硬件 需要 物理地址.(或者因为是解码时候需要DMA传输,而DMA传入的地址不能是线性地址).

各位大牛,有什么办法解决啊.
自己写一个驱动???
mmap 的返回的线性地址空间, 怎么保证物理是连续的??>
并且如何获取返回的 线性地址对应的物理地址??

感谢了!!

论坛徽章:
0
6 [报告]
发表于 2009-12-11 01:19 |只看该作者
如果自己写一个驱动,应该是可以做到的. MMAP好像很强大,不是很熟悉.
最土的办法是自己写个特殊的应用程序和内核模块的接口(比如一个专门的IOCTL),在内核里分配好物理内存,翻译出物理地址( VIRT_TO_PHYS OR VIRT_TO_BUS). 然后再传给用户程序.

论坛徽章:
0
7 [报告]
发表于 2009-12-11 11:07 |只看该作者
还又没有什么好的办法呢>?>
.感谢了!

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
8 [报告]
发表于 2009-12-11 11:36 |只看该作者
我也是用6楼的办法,这个貌似没啥好办法了
对了,除非能用DMA

用户空间往物理空间写数据会有问题,所以,必须由kernel代劳,这个是必需的,没办法绕过的
上面是我觉得的,不排除有高手可以绕过

论坛徽章:
0
9 [报告]
发表于 2009-12-11 11:42 |只看该作者

回复 #5 kendyke 的帖子

为嘛不把硬件解码的代码写成driver呢,不就剩得麻烦了

论坛徽章:
0
10 [报告]
发表于 2009-12-11 17:19 |只看该作者
那看来要做的 是修改 MMAP,通过传入特殊的 flag,
然后,在内核分配物理连续的,线性地址空间,
mmap返回线性地址空间.
最后,通过ioctl 传入线性空间地址获取物理空间地址

不知道这样可行不??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP