主题 : 驱动编写中操做寄存器用 IOREMAP ? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 28010
精华: 0
发帖: 35
金钱: 175 两
威望: 35 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-09-04
最后登录: 2013-12-01
楼主  发表于: 2012-09-22 22:57

 驱动编写中操做寄存器用 IOREMAP ?

韦东山视频 12课本 2.3 中讲到. 驱动编写中操做寄存器要用 IOREMAP

gpfcon = (volatile unsigned long *)ioremap((0x56000050, 16)

这是为何?  为何不能直接对地址操做???
级别: 新手上路
UID: 28010
精华: 0
发帖: 35
金钱: 175 两
威望: 35 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-09-04
最后登录: 2013-12-01
1楼  发表于: 2012-09-24 22:54

 回 楼主(wangdake) 的帖子

原因可能是, LINUX 内核在 3G 到 4G. 对于 3G 以下地址无法直接访问.
是这样吗?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2012-09-25 09:24

 回 1楼(wangdake) 的帖子

0x56000050是IO物理地址,在ARM上通过内存映射方式映射成虚拟地址才能被CPU处理。关于这方面的信息,可以Google“Linux IO物理地址”。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."