免费注册 查看新帖 |

Chinaunix

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

ioremap和S3C24XX_VA_GPIO有联系没有啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-16 11:40 |只看该作者 |倒序浏览
今天搞了个字符驱动,里面使用到了ioremap,
va=(unsigned long)ioremap(0x56000010,32);    0x56000010为寄存器的物理地址,va的结果为rGPBCON的虚拟地址,最后用writel(0,va)来写寄存器rGPBCON寄存器,结果都很正确。后来我用linux自带的宏定义
writel(0,S3C2410_GPBCON)来写寄存器,发现结果页正确。

后来我查看regs-gpio头文件发现有如下的宏定义:
#define S3C2410_GPBCON           S3C2410_GPIOREG(0x10)
#define S3C2410_GPIOREG(x) ((x) + S3C24XX_VA_GPIO)
#define S3C24XX_VA_GPIO           S3C2410_ADDR(0x00E00000)  map.h
#define S3C2410_ADDR(x)          ((void __iomem *)0xF0000000 + (x))
最后的S3C2410_GPBCON的值为0xf0e00010,也就是rGPBCON寄存器的虚拟地址。但是我用printk打印va的值,发现va的值是0xc481e010为什么va和linux自带的宏定义的虚拟地址值不一样呢,linux通过宏定义的虚拟地址怎么同物理地址为 0x56000010寄存器联系起来的,是对应物理地址加上一定的偏移值得到的还是怎么的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP