嵌入式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是将物理地址映射成内核虚地址,供驱动io操作
[解决办法]
个人感觉都OK,有什么问题吗?什么现象?
[解决办法]
第一个ioremap 已经映射了8字节,就是把0x3cfffff0-0x3cfffff8,把B已经包含进去了,所以不用再映射一次。
重叠映射不是好习惯。