请随便帮我回答一两个关于linux驱动开发问题?在线等
ARM里封装了SD控制器,知道了寄存器的地址如0X00210000,这应该是物理地址。
在开发驱动的时候,照理是可以直接*(long *)0x00210000来读写寄存器里的内容的,可在
linux 2.4下要把它转换成逻辑地址,通过IO_ADDRESS(0X00210000)转换成0xf02100,再用
*(long* 0xf0210000)来访问,可以理解,可是在Linux 2.6下问题来了
(1)Linux 2.6 开发驱动不能直接读取物理地址,我同样采用IO_ADDRESS后访问出错,为什么呢?
(2)听说Linux 2.6 IO_ADDRESS 宏变了,我就直接像在Linux2.4下把寄存器的地址加上0xf0000000,
再访问,有问题是什么原因?
(3)听说要用ioremap来把寄存器的地址转换成逻辑地址后再访问,我用了
ioremap转换后,用*(long * 转换后的地址)来读写,会出错,什么原因?
a),出错后,我又用ioread32(转换后的地址)和iowrite32(转换后的地址)读写寄存器,发现
写进去的值和读出来的值不一样,使什么原因?
b) 怎么样知道linux2.6下的物理地址和逻辑地址的影射关系,比如+地址来映射?
请知道的朋友随便回答一个问题就好了,在线等