当前位置: 技术问答>linux和unix
I/O端口寄存器地址在驱动中到底要被映射几次???
来源: 互联网 发布时间:2016-04-13
本文导语: 比如在mc9328mx21开发板上,flash接的是片选0,起始地址c0000000,sdram接片选2,起始地址d0000000,无线网卡接的是片选3,起始地址D1000000。 上面这些地址到底是物理地址还是虚拟地址呢?arm不是用mmu把设备地址映射到4g的...
比如在mc9328mx21开发板上,flash接的是片选0,起始地址c0000000,sdram接片选2,起始地址d0000000,无线网卡接的是片选3,起始地址D1000000。
上面这些地址到底是物理地址还是虚拟地址呢?arm不是用mmu把设备地址映射到4g的地址空间吗,所以我认为这些地址是arm映射过的虚拟地址了。
然后装入linux系统后,linux系统又要映射一次,使每个进程有独立的4g地址空间,比如上面的网卡,是不是要用ioremap函数把D1000000这个地址再映射一次,然后才能用read,write读取?
不知道我的理解对不对,不太能理解的是arm的4g地址空间是不是就是物理地址,虽然被arm映射过。
上面这些地址到底是物理地址还是虚拟地址呢?arm不是用mmu把设备地址映射到4g的地址空间吗,所以我认为这些地址是arm映射过的虚拟地址了。
然后装入linux系统后,linux系统又要映射一次,使每个进程有独立的4g地址空间,比如上面的网卡,是不是要用ioremap函数把D1000000这个地址再映射一次,然后才能用read,write读取?
不知道我的理解对不对,不太能理解的是arm的4g地址空间是不是就是物理地址,虽然被arm映射过。
|
你说的 这些地址, 如c0000000,d0000000,肯定是物理地址。
ioremap是把物理地址映射到虚拟地址空间,可以把同一个物理地址映射到不同的虚拟地址。
ioremap是把物理地址映射到虚拟地址空间,可以把同一个物理地址映射到不同的虚拟地址。