免费注册 查看新帖 |

Chinaunix

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

求助 有关地址映射 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-08 14:34 |只看该作者 |倒序浏览
刚做linux,不是很了解mmu,现在做嵌入式,想把诸如键盘、LCD等硬件设备通过地址映射的方式加到程序中,编译时没报错,但程序运行时崩溃了,后来才知道mmu是不能直接访问物理地址的,可是网上很多说用mmap,或者ioremap就可以了,但是都没有说得很详细,究竟要怎么做才行,望哪位大虾指教一下

论坛徽章:
0
2 [报告]
发表于 2008-07-08 17:49 |只看该作者
看看《LINUX设备驱动程序》吧。里面有一章是讲这个的。。本论坛有下载的。
简单的说一下吧:
对于ioremap,此函数是将物理地址映射到虚拟地址,其原型为:
void *ioremap(unsigned long phys_addr,unsigned long size);   参数1是物理地址,参数2是你要映射的size,返回值就为内核虚拟地址。。成功后,使得phys_addr+size内的地址都可以通过其虚拟地址+相应的偏移来访问。
一般的,在驱动程序中的init函数及probe函数中会调用此函数。解除映射的函数是
void iounmap(void *virt_addr)

对于mmap,记忆中不是用在内核驱动中的,它好像是用在用户空间程序中的,mmap系统调用使进程之间通过映射同一个普通文件实现共享内存。这个不是太清楚,你自己查查。。

另外,内核驱动中,还有一种静态映射,也是将物理地址映射到虚拟地址的。。对于我的s3c2440平台,加入静态映射的位置是在arch/arm/mach-s3c2410/mach-smdk2440文件中smdk2440_iodesc结构体中。你可以看看此文件

评分

参与人数 1可用积分 +15 收起 理由
bitmilong + 15 鼓勵發貼交流

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP