PCI中的base address

PCIe 总线基础 驱动接口 和 BAR空间详解 在一个系统中的每一个设备(device)在地址空间的大小和类型是不同的,对应不同的访问需求。例如,某一个设备在内部寄存器或者存储空间有256Byte,可以通过IO地址空间访问,另个一设备有16K大小的空间则需要通过MMIO的方式进行访问;哪些地址应该使用哪种方式(IO或Memory)来访问设备的内部位置,这是系统软件(即BIOS和OS内核)的工作,PCI设备无法自己决定,但是需要提供一个方法让系统软件去决定以何种方式去访问设备内部地址空间。 阅读详情
来自: http://hi.baidu.com/qingyayizhan/blog/item/62137d4b1c85810309f7ef10.html

最近因为工作需要用到pci设备的BAR内容,之前看了没深刻印象,这里整理一下。

 

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

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

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

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

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

下图是BAR寄存器的结构:

PCI 中的base address register(转) - 信念和态度 - 奔向理想
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需要hardwareto zero。

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

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

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

 

以上就是一些总结,有些地方可能理解有偏差,没有画图,以后有机会再补上

PCIE协议解析 synopsys IP 基本配置空间总结 读书笔记(14) 1.2    PCI configuration SPACE(256 BYTE) 其 中寄存器的Capability包括: Ø  PCI Configuration Space Ø  PM Ø  MSI Ø  MSI-X Ø  PCIE Ø  VPD 1.2.1     PCI Configuration Space Byte Offset Byte 阅读详情

相关推荐

【我所認知的BIOS】—>PCI 配置空間拾趣

【我所認知的BIOS】—>PCI 配置空間拾趣LightSeed      2009-5-13      1、文章結構安排上一篇有專門對PCI device的configuration space提法。那麼在這一節中我先做一個大體介紹,然後再對於一些特殊的比較有用的register做比較詳細的理解總結。2、PCI配置空間介紹2.1 configuration space的面

肢解BIOS 3万+

pci 配置空间详解之Base Addresses

为了使pci 设备有更强的功能,更方便的使用方法,pci 可以在在址空间去重定向pci devices. 在system 开机的时候,与具体设备无关的软件必须去检测到这是一个什么设备,构建一个一致(consistent) 的地址映射,还要检测这个设备有没有扩展rom.  下面的章节将会包括这些内容。 1. Address Maps Power-up 软件(应该就是bios) 将系统

Helping BIOSer become Awesome! 4255

DSP系统PCI配置EEPROM详解:从硬件身份证到资源分配地图

在嵌入式系统开发中,PCI总线设备的识别与资源配置是系统初始化的关键环节。其核心原理在于,每个PCI设备都拥有一个标准的配置空间,用于向主机操作系统报告其厂商ID、设备ID、所需内存空间及中断信息等关键身份与资源需求。这一机制的技术价值在于实现了硬件的即插即用和操作系统对设备的自动枚举与驱动加载,是构建稳定主机与加速卡通信的基础。在诸如数字信号处理器(DSP)加速卡、FPGA协处理器等应用场景中,这些配置信息通常被固化在一块外挂的EEPROM存储器中。设备上电时,PCI桥接芯片会自动读取EEPROM中的数据

weixin_29164843的博客 230

PCIe配置空间:基址寄存器(Base Address Registers)

1. 基址寄存器的作用 一般的,每个 PCIe 设备内部都会有一部分资源需要提供给系统软件访问。与此同时,不同的 PCIe 设备可供系统软件访问的资源大小、资源类型也不一样。在计算机系统中,只有系统软件可以为 PCIe 设备内部的资源指定合适的地址,而 PCIe 设备能做的就是告诉系统软件该设备内部可访问的资源大小、资源类型和资源特性。 基址寄存器(Base Address Registers)就是 PCIe 协议提供的、用于向系统软件展示 PCIe 设备内部资源大小、资源类型和资源属性的机制。 2. 基址

程序员仓库 1万+

绕过BIOS/UEFI固件写保护写入SPI闪存

针对Bootkit:LoJax或MosaicRegressor和TrickBot等开始进行固件感染方式的病毒逐渐增多而作笔记整理。 对主板上的SPI闪存芯片中存储的UEFI固件的所有请求都将通过SPI控制器,该控制器是Intel平台上的Platform Controller Hub(PCH)的一部分。可以通过PCI设备驱动访问PCI总线配置空间可以获取PCH的值。 绕过BIOS/UEFI固件写保护写入SPI闪存用I/O命令访问PCI总线配置空间BIOS控制寄存器BIOS_CNTL攻击者如何感染UEFI固件?

摔不死的笨鸟的博客 2540

从零开始:H20服务器上DeepSeek R1 671B大模型部署与压力测试全攻略

最近,我有幸在工作中接触到了DeepSeek R1 671B模型,这是目前中文开源领域参数量最大的高质量模型之一。DeepSeek团队在2024年推出的这款模型,以其惊人的6710亿参数量和出色的推理性能,引起了业界广泛关注。作为一名AI基础设施工程师,我有机会在H20服务器上部署这个庞然大物,并对其进行了全面的压力测试。这篇文章将详细记录我的部署过程和性能测试方法,希望能为大家提供一些参考。💡为什么选择DeepSeek R1?超大规模参数量(671B)优秀的中英文理解能力开源可商用的许可证。

wangli的博客 1万+

PCI/PCIe基础——配置空间

简介 PCI/PCIe设备有自己的独立地址空间,这部分空间会映射到整个系统的地址空间。 映射地址在BIOS/UEFI下指定(如果有的话,对于使用非BIOS启动的OS,不清楚),它有两种类型,一种是MMIO,一种是IO。对于MMIO的访问,跟访问内存的方式一样,它从称为PCIEXBAR的基地址开始,有很大的一段空间,这个PCIEXBAR的值根据不同的平台可能不同,大致可能值有0xC0000000、0xE0000000等,关于这个值是怎么使用的后面的章节会讲到;对于...

kunkliu的博客 4029

论文分享|ECCV2022,PATnet,Cross-Domain Few-Shot Semantic Segmentation,CDFSS新基准,文末有复现教程

这篇论文提出的跨域小样本语义分割(CD-FSS)任务,旨在将源域学习的分割能力迁移到目标域,仅需少量标注样本。针对传统小样本分割方法在跨域场景性能下降的问题,作者提出了基于金字塔锚点变换的网络(PATNet),通过将域相关特征转换为域无关特征,并引入任务自适应微调推理(TFI)提升目标域适应能力。实验表明,PATNet在1-shot和5-shot设置下分别比现有方法提升8.49%和10.61%的准确率。同时,作者构建了CD-FSS基准并设计了任务难度评估指标。代码和数据集已开源,复现难度中等。

m0_74277350的博客 1095

PCI 中的base address register(转)

最近因为工作需要用到pci设备的BAR内容,之前看了没深刻印象,这里整理一下。   PCI设备有很好的可配置型和易操作性,这很大方面要归功于其地址空间的可动态分配的特性。而动态分配地址空间就是依赖于BAR(base address register)实现的。 BAR是PCI配置空间中从0x10 到 0x24的6个register,用来定义PCI需要的配置空间大小以及配置PCI设备

chenliujiang1989的专栏 3050

Mplus—随机截距交叉滞后模型(RI-CLPM)语法

随机截距交叉滞后模型RI-CLPM的Mplus语法。

m0_54401011的博客 2532

编程小白的自学笔记四(正则表达式模块search函数)

本文仅仅简单介绍了search的使用,供小白学习探讨。

m0_49914128的博客 2322

PCI 中的base address register

PCI设备有很好的可配置型和易操作性,这很大方面要归功于其地址空间的可动态分配的特性。而动态分配地址空间就是依赖于BAR(base address register)实现的。 BAR是PCI配置空间中从0x10 到 0x24的6个register,用来定义PCI需要的配置空间大小以及配置PCI设备占用的地址空间。 每个PCI设备在BAR中描述自己需要占用多少地址空间,bios通过所有设

yhc1991的专栏 3381

矢量量化的基本原理:高效数据压缩与信息检索的关键矢量量化(Vector Quantization,简称VQ)是一种数据压缩和信

此外,在矢量量化过程中,可能会引入一定的信息损失,对一些精细特征的表示可能存在一定的误差。它通过将高维数据映射到低维码本空间中,并将相似的数据映射到相同的码本向量中,实现对数据的高效表示和存储。最重要的是,矢量量化可以用于数据的检索和分析,提供了高效的数据查询和处理手段。通过使用码本索引,我们可以高效地存储和检索大量的数据。在图像处理中,矢量量化可以用于图像压缩,将复杂的图像数据转化为较少的码字,实现图像的存储和传输。矢量量化通过将连续的高维数据分割并映射到有限的码本集合中,实现数据的离散表示和压缩。

m0_70886513的博客 1373

慢慢欣赏linux PCI-PCIE定制化

PCI/PCIE协议还是很完美的,所以目前很是流行。所以linux内核主线代码是严格按照协议来的,例如pci_read_bases(dev, 6, PCI_ROM_ADDRESS);轮流获取6个MEM空间大小。 但是由于开发是存在BUG,或者开发者没有彻底理解PCI/PCIE或是别的原因,很多设备并没有严格按照PCI/PCIE协议来实现。 例如,有的设备实际上只有一个有效的BASE_ADDRE...

shipinsky的博客 1112

逆变器、转换器、DCDC、继电器等器件的原理和作用

交流电变成直流电的过程:整流==》滤波==》稳压。

m0_61973119的博客 8030

用AI科研绘图全新升级!借助谷歌新发布模型Nano Banana pro实测一键绘制机制图与技术路线图,直接告别文字乱码与低画质

之前有同仁反馈,用Nano Banana画科研插图的时候,要么文字部分容易乱码,要么抓不住关键内容,画出来的效果反复修改后,还是达不到理想的效果。终于在Gemini 3发布没几天,万众期待的大香蕉模型也成功升级到了Pro版本,官方名称叫“Gemini 3 Pro Image”,实际上也就是我们说的Nano Banana 2。这次的Nano Banana Pro模型,不仅可以直出4K高清图,还能自定义比例,推理能力和中文文字的稳定性也得到了提升。

智能AI让学术科研更容易 1889

PCIE地址空间理解

PCIE地址空间理解 PCIE配置空间: BUS DEV FUN确定 BAR(Base Address Register): BAR寄存器中存储的数据是表示PCIE设备在PCIE地址空间中的基地址,不是表示PCIE设备内存在CPU内存中的映射地址

zhangfangyuan2010的博客 1790

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

UEFI——PCIe子系统(I) PCIe基础知识

Pcie子系统介绍

学习记录 7672

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

(转)PCI设备的地址空间

PCI配置空间(PCI Configuration Space) PCI设备(PCI device)都有一个配置空间,大小为256字节,实际上是一组连续的寄存器,位于设备上。其中头部64字节是PCI标准规定的,格式如下:

gjq_1988的专栏 1466

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

基于zedboard的DMA设计笔记

2.BAR0空间的概念:BAR(Base Address Register ) 该组寄存器简称为BAR寄存器,BAR寄存器保存PCI设备使用的地址空间的基地址,该基地址保存的是该设备在PCI总线域中的地址。其中每一个设备最多可以有6个基址空间,但多数设备不会使用这么多组地址空间。在PCI设备复位之后,该寄存器将存放PCI设备需要使用的基址空间大小,这段空间是I/O空间还是存储器空间,如...

weixin_34128534的博客 331

【我所認知的BIOS】—>PCI 配置空間拾趣-2

目录(?)[-]         文章結構安排         PCI配置空間介紹             1 configuration space的面貌             2 configuration space存在的原因         幾個重點關注的register             1 Device ID and Vendor IDoffset 00H03H

或许 617

PCIe扫盲——TLP路由之Address Routing

转:http://blog.chinaaet.com/justlxy/p/5100053325 地址路由(Address Routing)的地址包括IO和Memory。对于Memory请求来说,32bit的地址使用3DW的Header,64bit的地址使用4DW的Header。而IO请求则只能使用32bit的地址,即只能使用3DW的Header。 注:再次强调,IO请求是为了兼容早期的PCI设备的,在新的PCIe

zsmcdut的博客 449
上一篇: u-LAW and A-LAW definitions
下一篇: 从安格视,安维到安尼
Tigeresta
博客等级 码龄17年 26粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值