读书人

嵌入式linux驱动求圣人指教

发布时间: 2012-12-17 09:31:40 作者: rapoo

嵌入式linux驱动求高人指教
在linux下写驱动要用虚拟地址,这个我知道。
例如:要操作两个寄存器 寄存器A的地址为0x3cfffff0,寄存器B的地址是0x3cfffff4,问题来了。
当我进行虚拟地址映射的时候分两中操作,
第一种vA=(volate unsigned int *)ioremap(0x3cfffff0,8)
vB=vA+1;
第二种:vA==(volate unsigned int *)ioremap(0x3cfffff0,8)
vB==(volate unsigned int *)ioremap(0x3cfffff4,8)
请问以上两种映射后的虚拟地址操作的都是实际的物理地址吗,第二种映射方式是否正确。
[最优解释]
第一个ioremap 已经映射了8字节,就是把0x3cfffff0-0x3cfffff8,把B已经包含进去了,所以不用再映射一次。
重叠映射不是好习惯。
[其他解释]
ioremap是将物理地址映射成内核虚地址,供驱动io操作
[其他解释]
个人感觉都OK,有什么问题吗?什么现象?
[其他解释]
貌似对ioremap的理解有偏差,比如ioremap的形参、功能。
[其他解释]
求解释,
[其他解释]
第一种肯定不行,因为寄存器B根本没映射过去
[其他解释]
第一种 VB=VA+4才对,第2种有重叠不推荐
[其他解释]

引用:
第一种 VB=VA+4才对,第2种有重叠不推荐


重叠是怎么回事呢
[其他解释]
头有点晕,听高手解答。
[其他解释]
学习一下,本人正在学习
[其他解释]
明白,谢谢。

读书人网 >驱动开发

热点推荐