物理地址有:
物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存、BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。 物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,因此在32 bits地址线的x86处理器中,物理地址空间是2的32次方,即4GB,但物理RAM一般不能上到4GB,因为还有一部分要给总线用(总线上还挂着别的 许多设备)。在PC机中,一般是把低端物理地址给RAM用,高端物理地址给总线用。
总线地址:总线的地址线或在地址周期上产生的信号。外设使用的是总线地址,CPU使用的是物理地址。
pci地址空间
地址范围 大小 设备
0x00000000-0x03ffffff 64M 南桥
0x10000000-0x13ffffff 64M 网卡
0x1c000000-0x1fffffff 64M 北桥
0x40000000-0x7fffffff 1G 北桥
0x80000000-0xbfffffff 1G 处理器0
0xc0000000-0xffffffff 1G 处理器1
龙芯2f地址空间
0000 0000256 M MEM_1
1000 0000 64 MPCI_Lo0
1400 0000 64 MPCI_Lo1
1800 0000 64 MPCI_Lo2
1c00 0000 56 M ROM
1f80 0000 4 M ROM
1fc0 0000 1 M Boot
1fd0 0000 1 M PCI I/O
1fe0 0000 256 北桥本身PCI配置寄存器
1fe0 0100 256 北桥内部寄存器
1fe0 0200256 未使用
1fe8 0000 512 KPCI配置空间读写
1ff0 0000 256 K Local I/O
1ff4 0000 256 k Local I/O
1ff8 0000 256 K Local I/O
1ffc 0000 256 K Local I/O
2000 0000 1.5 GPCI地址
8000 0000 2 G MEM_2
总结了cpu访问pci设备的步骤:
为了让CPU访问PCI空间,须将CPU空间映射到PCI空间。在内存空间256 MB上方有3个连续64 MB的空间,即PCI_Lo0, PCI_Lo1, PCI_Lo2。这3个区间可被北桥映射到PCI空间以64 MB对齐的任意位置。通过设置PCIMAP寄存器可以完成。
CPU访问PCI空间时,CPU的低26位地址直接传到PCI的低26位地址,PCI的高6位地址分别由PCI_Lo0, PCI_Lo1, PCI_Lo2代替。Pci_map2是说明映射到2 GB以上的空间还是2 GB以下的空间。
CPU通过访问物理地址0x1fe80000即可访问PCI设备的配置空间(0xfe800000是cpu地址空间的值对应的pci设备(由pcimap—cfg寄存器决定))。分为2种配置周期:Type0和Type1。为了读写PCI设备的配置头,须事先设置Pcimap_cfg寄存器的值。
为使PCI设备能通过DMA访问系统内存,须把PCI地址映射成CPU地址。通过设置Base Address Register完成该过程。北桥共有3个这样的寄存器:Pcibase0, Pcibase1, Pcibase2。Pcibase0, Pcibase1均可以映射多达256 MB的空间,Pcimask0, Pcimask1决定映射的地址空间大小。Pcibase2映射北桥的内部寄存器,映射区间为64 KB。