美文网首页
设备需要的地址空间怎么确认

设备需要的地址空间怎么确认

作者: 小学究鑫鑫 | 来源:发表于2020-12-16 14:47 被阅读0次

PCI设备有很好的可配置型和易操作性,这很大方面要归功于其地址空间的可动态分配的特性。而动态分配地址空间就是依赖于BAR(base address register)实现的。

  BAR是PCI配置空间中从0x10 到 0x24的6个register,用来定义PCI需要的配置空间大小以及配置PCI设备占用的地址空间。

  每个PCI设备在BAR中描述自己需要占用多少地址空间,bios通过所有设备的这些信息构建一张address map,描述系统中资源的分配情况,然后在合理的将地址空间配置给每个PCI设备。这里主要分为几个部分描述:

1. PCI设备占用的地址空间大小:

  这个是根据PCI设备的需求而不同的,这个映射空间不同于配置空间,一般想网卡等设备占用较大的地址空间,而一些串口等设备占用较少的地址空间,而我们知道X86中地址空间又MEM和IO两类,因此PCI 的BAR在bit0来表示该设备是映射到memory还是IO,bar的bit0是readonly的,也就是说,设备寄存器是映射到memory还是IO是由设备制造商决定的,其他人无法修改。

下图是BAR寄存器的结构:

图 1 Base Address Register for Memory

图 2 Base Address Register for I/O

bit0:表示设备寄存器是映射到memory(0)还是IO(1)空间。

bit1:  reserved 0

bit2: 在base adress register for Memory 中0表示32位地址空间,1表示64位地址空间。

bit3:在memory BAR中用来表示该设备是否允许prefetch,1表示可以预取,0表示不可以预区。

其余的bit用来表示设备需要占用的地址空间大小。

  BAR通过将某些位设置为只读,且0来表示需要的地址空间大小,比如一个PCI设备需要占用1MB的地址空间,那么这个BAR就需要实现高12bit是可读写的,而20-4bit是只读且位0。地址空间大小的计算方法如下:

    a.向BAR寄存器写全1

    b.读回寄存器里面的值,然后clear 上图中特殊编码的值,(IO 中bit0,bit1, memory中bit0-3)。

    c.对读回来的值取反,加一就得到了该设备需要占用的地址内存空间。

BIOS将系统中所有的PCI设备需要的地址空间大小读出来,然后计算得到一张address map。

bios可以为设备预留大于BAR要求的地址空间,而PCI规范中建议为需要的地址空间少于4KB的设备分配4KB的地址空间。

映射到IO空间的设备每个BAR不能占用大于256byte,在X86系统中IO编址是16位的,此时BAR中的高16bit需要hardware to zero。

2. memory address map构造完成以后需要为设备分配地址空间,此时就是把分配给设备的起始地址写入BAR寄存器即可。

比如上面位一个设备分配1MB的空间,在0xff000000(4GB-16MB)的位置,那么就把0xff000000写入BAR即可。

我们发现PCI这种地址自然地要求位设备分配的地址空间要跟BAR定义的大小对齐,因此PCI设备的映射空间始终是跟BAR的大小对齐的

转自:http://hi.baidu.com/qingyayizhan/blog/item/62137d4b1c85810309f7ef10.html

相关文章

  • 设备需要的地址空间怎么确认

    PCI设备有很好的可配置型和易操作性,这很大方面要归功于其地址空间的可动态分配的特性。而动态分配地址空间就是依赖于...

  • TTT企业内训师培训要点整理

    一、需要提前沟通确认什么 设备/资料/教具:地址和场地、教室号、休息室、房间布置、教具要求、资料(教师、学生) 学...

  • 新安装的Clear未同步iCloud数据

    解决方法:1、检查iCloud空间是否充足。2、确认需要同步iCloud的设备登录的是同一个apple id。3、...

  • iOS设备信息获取

    广告位标识 UUID 获取设备型号 mac 地址 IP地址 CPU Disk磁盘空间 Memory内存相关数据

  • 注意事项

    开课提前预热,地址精准详细自己确认过。定要好找的地方。 能力实力让你更自信,能力来自于不断的练 设备的确认, 教育...

  • 设备地址

    d电脑与板子连接路由(电脑连接Wifi) 192.168.0.128 192.168.0.255 255.255....

  • 操作系统个人见解之内存篇

    1.逻辑地址和物理地址?进程的地址空间。内存,虚拟内存和交换空间是怎么回事? 为什么进程地址空间可以比物理内存大?...

  • PCIe扫盲——Memory & IO 地址空间

    早期的PC中,所有的IO设备(除了存储设备之外的设备)的内部存储或者寄存器都只能通过IO地址空间进行访问(Inte...

  • 阻止事件冒泡

    最近在做一个商城项目,在确认订单页选择地址列表中的某个地址时,跳转回确认订单页,当需要编辑的时候跳转到修改地址页面...

  • Android Binder理解

    在之所以需要进程通讯,内核空间的地址空间是所有进程共享的,但是用户空间使用的是虚拟地址空间(都有4GB空间),不能...

网友评论

      本文标题:设备需要的地址空间怎么确认

      本文链接:https://www.haomeiwen.com/subject/dlnngktx.html