欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

了解linux内存映射的!展示你能力的机会来了,请听一道100分的有关问题!

更新时间: 2014-01-05 03:19:39 责任编辑: Author_N1

 

了解linux内存映射的大虾!展示你能力的机会来了,请听一道100分的问题!!!
嘿嘿,其实是小弟在在开发过程中遇到关于内存映射的问题,不知道怎么解决。还请大神帮忙!!

    arm9 + linux 环境,板子RAM大小为256M, 目前有个需求是将内存从后面去掉2M,让系统跑在254M内存上,最后的2M由一个内核ko模块去操作,存放一些打印LOG,设备重启后log不丢失(设备异常重启,RAM不掉电)。

    目前已经成功预留出了2M内存,这2M空间不受内核管理,即系统以为RAM大小只有254M, 但是要在一个自己写的内核ko模块中去操作这2M内存。小弟试过直接由物理地址转换虚拟地址(函数phys_to_virt)然后去访问,但是一访问就会产生缺页异常。
听别人说是因为 这2M内存没有被内核映射,故不能正常访问。那么就要我去手动进行映射。但是具体该怎么去映射呢? 

还请大侠指点一二,小弟将感激不尽!!!
--参考方法--
IOMAP文件中加这几句
这是个例子,具体地址,自己改吧。
#define _BASE          IOMEM(0xFC900000)
#define _PHYS          0xFE000
#define _SIZE          SZ_2M
--参考方法--
保留内存在kernel传递ATAG参数时可以少传入这部分内存,这部分内存还不是被保存了,只是没用告诉kernel这部分内存,kernel中需要使用时ioremap是一种方法(比较简单),但是更好的方式是ion,
--参考方法--
其实网上有篇文章写的是静态映射。具体的网页地址我忘记了。但是确实有这么一片文章,描写的内容和我们现在讨论的问题相关。
静态映射 iotable init
动态映射 ioremap
其实这个量个函数调用的方法不一样,但是目的都是一样的。就是建立以个虚拟到phy的对应关系。
2.再问一句,如果我把这2M当做设备寄存器一样,用ioremap的方式去映射成IO内存去访问,是否合理?
这个可以的。只是:1 调用到ioremap的这个函数你可能自己要写意个module。2 调用的参数和使用的方法有区别,我熟悉所以推荐了静态映射的方法,这个方法当时用过,用在VIDEO的还是什么的一个buffer缓存上。

其实kernel中还有的板子的bsp中有很多类似的用法,学习和借鉴一下别人的用法对自己很有帮助。说实话,我也是经常忘记自己做过什么。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:19:39
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20829/
本文WWW.DOC100.NET DOC100.NET版权所有。