免费注册 查看新帖 |

Chinaunix

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

如何申请4M以上的Physical Memory_Liner [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-04 17:39 |只看该作者 |倒序浏览
order定义最大值为14.最多也只能有4MByte的内核空间可用。
我现在的Driver可能需要大段连续内存,怎么办? 我的Chip要用物理地址来做DMA传送,必须要用
Physical Memory。Linus建议最好用vmalloc,这当然行,只是不连续后,数据在内核空间速度就
就很慢了,而我的Chip FIFO相当一个大的数组,怎么Buffer呀?最好笑的是,当我的应用程序较少
时,free看到的物理内存较多,这时可以用__get_free_pages,当我启用X后,只剩余4MBytes。
这时加载Driver就死呆呆了。在init 1/init 3下,还有120Mbytes,这可以成功的。关键是我申请
pages不成功时,程序会自动退出呀,为什么要死哟??
用vmalloc时,这时可以加载,只是工作就不行了。

是不是只能用MEM=(Max Memory - Reserved Memory)呀,这可以预留一部分,然后remap进来。
这对同步网络可麻烦了。但我的内核设定有HIMEM和SMP(32),这怎么办?

有没有朋友,在2.6.14以上做过同类的东东呀,敬请指教!
relayfs我看过,其实用的是kmalloc,也是用的物理内存,是多Channel,不可能用这个方式来拼成
几个通道吧。晕哟......

obrire@gmail.com

论坛徽章:
0
2 [报告]
发表于 2006-04-05 10:30 |只看该作者
>>Linus建议最好用vmalloc,
vmalloc可以用来做DMA??

论坛徽章:
0
3 [报告]
发表于 2006-04-05 16:55 |只看该作者
用裸内存应该可以。也就是说,划一段内存不要纳入操作系统的管理,当然平时这段内存就牺牲掉了。

论坛徽章:
0
4 [报告]
发表于 2006-04-05 21:32 |只看该作者
设计得有问题吧, FIFO 为什么要那么大的buffer?
rs232 fifo 才16字节,都可以跑256kbps以上。

论坛徽章:
0
5 [报告]
发表于 2006-04-05 22:31 |只看该作者

有没有更好的办法???

原帖由 albcamus 于 2006-4-5 10:30 发表
>>Linus建议最好用vmalloc,
vmalloc可以用来做DMA??


他建议vmalloc进行大块内存分配,并不是说这可以进行DMA传送.
vmalloc在这里是不可行的.他采用的是虚存管理机制,不可能保证
得到线性物理地址.

曾经有朋友也遇到过这样的问题, 目前没有回应.KenerlTrap站,
他的物理内存比较大,好像有1G.

至于有人说到FIFO和QUEUE问题, 一个QUEUE要求256KBytes,
如果多通道怎么办?我的有128 Connection. 可以接32路同步信号.
如果是RS232, 不用这么麻烦了, 试想一下, 如果是64Way E1/T1/J1
怎么办???

如果真不行, 只好采用保留物理内存, 不被内核映射进内核空间.
低速串行或异步就好办了,同步是比较麻烦.VxWorks中,就可以用malloc
直接分配就行.

论坛徽章:
0
6 [报告]
发表于 2006-04-06 09:47 |只看该作者
原帖由 obrire 于 2006-4-5 22:31 发表


他建议vmalloc进行大块内存分配,并不是说这可以进行DMA传送.
vmalloc在这里是不可行的.他采用的是虚存管理机制,不可能保证
得到线性物理地址.

曾经有朋友也遇到过这样的问题, 目前没有回应.KenerlTrap站 ...


明白了,谢谢。(刚一看吓一跳,以为linus大侠说“错”了^_^)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP