主题 : 请问有关ioremap函数的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 1347
精华: 0
发帖: 19
金钱: 190 两
威望: 69 点
综合积分: 38 分
注册时间: 2008-08-20
最后登录: 2017-09-13
楼主  发表于: 2008-10-23 11:30

 请问有关ioremap函数的问题

我在编写linux2440的AD驱动时,想对S3C2410_ADCCON寄存器进行读写,利用
readl(S3C2410_ADCCON)函数时,系统报错:
unable to handle kernel paging request at virtual address 0x00000000  ,
如果我自己定义#define S3C2410_ADCCON  (0x5800000),则报错:
unable to handle kernel paging request at virtual address 0x5800000

驱动包含头文件 <asm-arm/arch-s3c2410/regs-adc.h> ,在regs-adc.h中有定义:
#define S3C2410_ADCREG(x) (x)

#define S3C2410_ADCCON  S3C2410_ADCREG(0x00)

后来我用ioremap重新映射了S3C2410_ADCCON,在调用 readl  函数时没有报错了,但是读出来的数据是错的,我想请教各位高手,是否遇到过这种问题?该怎么解决?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2008-10-24 07:58
1. 确保ioremap()映射的物理地址是正确的
2. 在CLKCON寄存器里把ADC对应的bit置1
"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."