- 论坛徽章:
- 7
|
lz先确定自己用的处理器构架,总线构架,和操作系统.
芯片不会确定什么虚拟地址,虚拟地址一般是是启用MMU后生效的.
那么只有操作系统才有管理到虚拟地址.
UClinux是不用虚拟地址的,我看你的几个地址感觉不像是linux而像是uclinux.
没有虚拟地址的情况下,汇编指令当然看到的都是对物理地址的寻址.
这样可以解释你的网卡的"地址" 0x90000000~0x900fffff,就是物理地址.
而一般网卡提供给系统的操作寄存器界面就属于IO操作.
所以你这段地址就是IO地址,但是你的体系结构可能是ARM的,所以不用专门的IO指令,而是用访问内存的指令,来访问这些寄存器.
另外网卡一般都是PCI总线的网卡,你说给的网卡的地址应该就是网卡上的一些寄存器组,用于控制网卡,看了你另一个帖子,要提醒,你不要指望把网络数据包写到这些寄存器里面去.
对于PCI的这段IO控制的内存地址映射,可以动态的映射到内存物理地址空间的任意段,只需要通过写PCI BAR就可能做到,但是一般嵌入式平台"喜欢"把某个设备的这段地址在软件里"写死",然后把这个值再写到设备的PCI BAR,这样分配.
如果不是PCI设备,我就不知道了,芯片是不是把它定死,很难说. |
|