主题 : ARM端口寄存器到linux虚拟的地址的映射问题? 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 25552
精华: 0
发帖: 64
金钱: 320 两
威望: 64 点
综合积分: 128 分
注册时间: 2010-07-26
最后登录: 2011-01-04
楼主  发表于: 2010-08-17 08:25

 ARM端口寄存器到linux虚拟的地址的映射问题?

如果开发板的B端口的端口控制寄存器的地址为0x56000010,数据寄存器的地址为0x56000014
那我在linux 驱动程序了 能不能这样进行映射:
void __iomem *base_addr;
#define GPB_BASE_ADD 0x56000010
#define rGPBCON   (*(volatile unsigned long*)base_addr +0x00)
#define rGPBDAT    (*(volatile unsigned long*)base_addr + 0x04)

base_add = ioremp(GPB_BASE_ADD,0x10);

然后通过iowrite与ioread类函数对rGPBCON与rGPBDAT进行读写啊???
这样能行吗?如果可以,想问下:用ioremp函数映射地址,物理地址和映射的虚拟地址成线性关系的吗?
春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是UBUNTU好时节。。。。
级别: 侠客
UID: 24947
精华: 2
发帖: 63
金钱: 430 两
威望: 86 点
综合积分: 166 分
注册时间: 2010-07-16
最后登录: 2019-04-27
1楼  发表于: 2010-08-17 09:43
那我在linux 驱动程序了 能不能这样进行映射:
void __iomem *base_addr;
#define GPB_BASE_ADD 0x56000010
.........
base_add = ioremp(GPB_BASE_ADD,0x10);

   能这样单独使用ioremap()函数,但是最好是先使用request_mem_region()向系统申请,否则很有可能导致系统不稳定或崩溃。
   能不能读写那的要看那个寄存器支不支持



想问下:用ioremp函数映射地址,物理地址和映射的虚拟地址成线性关系的吗?


是线性关系,你可以不用ioread 和iowrite函数,可以直接base_add+offset来实现对寄存器寻址。
级别: 侠客
UID: 25552
精华: 0
发帖: 64
金钱: 320 两
威望: 64 点
综合积分: 128 分
注册时间: 2010-07-26
最后登录: 2011-01-04
2楼  发表于: 2010-08-17 10:46

 回 1楼(小荷尖尖) 的帖子

谢了,但是怎么看寄存器支不支持呢?
春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是UBUNTU好时节。。。。
级别: 侠客
UID: 24947
精华: 2
发帖: 63
金钱: 430 两
威望: 86 点
综合积分: 166 分
注册时间: 2010-07-16
最后登录: 2019-04-27
3楼  发表于: 2010-08-17 11:15

 回 2楼(0o龙i魂o0) 的帖子

datasheet   R/W 若为R则表示为可读,W则为可写
本人已死,如遇上网,纯属遇鬼,若要联系,请烧纸钱,若要见面,请下地府!
级别: 新手上路
UID: 24132
精华: 0
发帖: 45
金钱: 235 两
威望: 47 点
综合积分: 90 分
注册时间: 2010-07-02
最后登录: 2012-12-24
4楼  发表于: 2010-08-30 16:54
能不能举个例子?