请随便帮我回答一两个关于linux驱动开发问题?在线等
时间:2006-08-09
来源:互联网
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下的物理地址和逻辑地址的影射关系,比如+地址来映射?
请知道的朋友随便回答一个问题就好了,在线等
在开发驱动的时候,照理是可以直接*(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下的物理地址和逻辑地址的影射关系,比如+地址来映射?
请知道的朋友随便回答一个问题就好了,在线等
作者: wuiiszsu 发布时间: 2006-08-09
论坛人气不如csdn.和linuxforum,一天了也没有人给点提示
作者: wuiiszsu 发布时间: 2006-08-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28