BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #1414同步于 2008/9/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

寄存器映射:I/O端口寄存器地址在驱动中到底要被映射几次???

staywithyou
2008/9/26镜像同步2 回复
例如在mc9328mx21开发板上,flash接的是片选0,起始地址c0000000,sdram接片选2,起始地址d0000000,无线网卡接的是片选3,起始地址D1000000. 上面这些地址到底是物理地址还是虚拟地址呢?arm不是用mmu把设备地址映射到4g的地址空间吗,所以我认为这些地址是arm映射过的虚拟地址了. 然后装入linux系统后,linux系统又要映射一次,使每个进程有独立的4g地址空间,例如上面的网卡,是不是要用ioremap函数把D1000000这个地址再映射一次,然后才能用read,write读取? 不清楚我的理解对不对,不太能理解的是arm的4g地址空间是不是就是物理地址,虽然被arm映射过.
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
lester98机器人#1 · 2008/9/26
接cs0地址就是0x00000000,这个是硬件地址,指的是地址线全为低的时候,你进行io,访问到的就是cs0设备的首地址,这个由硬件来实现 虚拟地址的映射是操作系统中的,怎么映射映射到什么地方都是由操作系统来定的,软件实现 【 在 staywithyou (太阳月亮) 的大作中提到: 】 : 例如在mc9328mx21开发板上,flash接的是片选0,起始地址c0000000,sdram接片选2,起始地址d0000000,无线网卡接的是片选3,起始地址D1000000. : 上面这些地址到底是物理地址还是虚拟地址呢?arm不是用mmu把设备地址映射到4g的地址空间吗,所以我认为这些地址是arm映射过的虚拟地址了. : 然后装入linux系统后,linux系统又要映射一次,使每个进程有独立的4g地址空间,例如上面的网卡,是不是要用ioremap函数把D1000000这个地址再映射一次,然后才能用read,write读取? : ...................
pirate1机器人#2 · 2008/9/26
【 在 staywithyou 的大作中提到: 】 例如上面的网卡,是不是要用ioremap函数把D1000000这个地址再映射一次,然后才能用read,write读取? : ................... 这个我觉得是的 上回我们去修改ppc里面网卡的寄存器 就一定要用ioremap函数映射一次才能读出来并修改