- 论坛徽章:
- 0
|
原帖由 duanius 于 2008-8-26 15:31 发表 ![]()
晕 今天发现了一个问题 寄存器地址按照ldd上面的话说应该是超出物理内存的那部分物理地址
而比如ioaddr = ioremap (mmio_start, mmio_len)这样的函数 它的mmio_star据资料说是从bios中读出的物理地址 也就 ...
还是没有理解物理地址空间的含义哈。
去找找以前的帖子,先把物理内存(RAM)和物理地址空间的概念分开。
另外对于这里的问题,架构会预留一部分物理地址空间用于映射设备的寄存器和设备内存,例如在x86上预留的物理地址3G~3G+512M。所以当你的内存(RAM)有4G的时候,物理地址空间的布局就如下:
物理地址0 ~ 3G <---对应----> 内存(RAM)0~3G
物理地址3G~3.5G <---对应--->设备的寄存器和设备内存的地址
物理地址3.5G ~ 4G <---对应--->内存(RAM)3G ~ 3.5G
由此看出4G的物理内存并不能被完全使用。实际上当物理内存(RAM)大于物理地址空间时,并不能同时使用所有RAM,而必须通过页表映射多出来的RAM,这和x86下映射高端内存的原理是一样的。 |
|