【93】PCI Expansion ROM

news2025/1/13 13:34:16

1、Expansion ROM

    PCIe、PCI设备可以提供Expansion ROM,Expansion ROM中存在设备初始化或者system boot的code。SystemBIOS在POST(Power-on Self Test)阶段,会枚举PCI设备,并判断有设备是否支持Expansion ROM,如果支持Expansion ROM,这把Expansion ROM code拷贝到RAM中并执行。

2、配置空间中Expansion ROM BAR位置

    Type 0的0x30位置是存放设备的Expansion ROM BAR的位置,Expansion ROM BAR的枚举和其他BAR没有太大区别,都是写全1然后回读获取BAR大小,唯一的区别就是systemBIOS要去对应的地址拷贝Expansion ROM code,并校验、执行。

3、PCI Expansion ROM内容

    PCIe Expansion ROM可能有很多份code image,每一份image都是512 byte boundary对齐的,并且每一份image都必须包含PCI Expansion ROM header。每次一份image的起始地址都依赖上一份image的大小(Image_N_header_offset=Image_N-1_header_offset+ Image_N-1_length*512)。最后一份image在last image indicator(0x15)字段标记出来。

3.1、PCI Expansion ROM Header格式

PCI Expansion ROM Header格式如上图,其中0x18~0x19指向PCI Data Structure。

3.2、PCI Data structure格式

    其中vendor identification(0x4)/device identification(0x6)和class code(0xd)三者表示了本image code支持的设备ID(match和PCI 子系统查找probe函数的match函数类似)。

    PCI data structure length(0xA)代表本image中的PCI data structure的length,单位是byte。

    Image length(0x10)代表本image的大小,但是是512byte。

    Code type(0x14)代表本image执行的CPU架构。

    Last image indicator(0x15),bit7代表本image是否是ROM中的last image。bit7为1代表是last image,为0代表不是last image。

4、Linux kernel中PCI Expansion ROM相关实现

    在sys文件系统中有对应PCIe设备的expansion ROM的binary。

    在drivers/pci/pci-sysfs.c中有pci_read_rom和pci_write_rom的实现。

    在drivers/pci/pci-sysfs.c中有访问Expansion ROM BAR的实现。

    可以看到pci_write_rom相对来说简单一些,只是根据输入参数设置了一下pci_dev->rom_atter_enable。

    在使用需要先echo 1 > rom,否则read是会返回Invalid argument。

4.1 pci_read_rom实现

pci_read_rom-->pci_map_rom------->pci_enable_rom

                            ----->io_remap

                            ----->pci_get_rom_size

            -->memcpy_fromio

            -->pci_unmap_rom-----> io_unmap

                            ----->pci_disable_rom

5、实际例子

    我们拿82599网卡的Expansion ROM举个例子。82599网卡的Expansion ROM BAR size为64K,起始地址为0xa6c10000。我们使能command reg的memory access enable和expansion ROM enable后就可以访问expansion ROM BAR了。

    从PCI Expansion ROM Header 的0x18看,PCI Data Structure在0x40的位置。

    0x40(signature)是0x52494350,0x52在ASCII对应的symbol是R,0x49在ASCII对应的symbol是I,0x43在ASCII对应的symbol是C,0x50在ASCII对应的symbol是P。signature是PCIR。

    0x44(Vendor Identification)~0x46(Device Identification)对应的是0x8086和0x10FB,是intel的82599网卡。

    0x4A(PCI Data Structure Length)为0x1C,代表该image中,PCI data structure到0x5C(0x40+0x1C)后面就是run time code和initialization code。

    0x4D(Class Code)为0x020000,0x02代表Network controller,0x0000代表Ethernet controller。

    0x50(Image Length)为0x78,说明下一个image的header的offset=0x00(当前image的header)+0x78*512=0xF000

    0x54(Code Type)为0x00,代表该image是intel X86,PC-AT compatible的。

    0x55(Last Image Indicator)为0x80,bit7为1,代表当前image是last image。

6、Firmware Power-on Self Test (POST) Firmware

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/944953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贝锐蒲公英异地组网路由器如何设置虚拟串口功能?

蒲公英虚拟串口功能,可实现智能组网内的其它成员异地调试此串口,无需到现场进行调试,为企业降低运营成本、便捷掌控设备数据。 1. 蒲公英硬件设置串口 进入蒲公英云管理平台,点击【工业应用】->【串口设置】,开启…

23款奔驰S400商务型升级裸眼3D仪表盘,体验高配乐趣

3D驾驶员显示屏能帮助您密切留意该显示屏中的重要信息。驾驶辅助系统的警告图标和功能图标都有醒目的3D效果,能够立即引起驾驶员的注意。不仅如此,显示屏还能以出色的 3D 影像来显示车辆前方的汽车、卡车、客车和摩托车等车辆。

Spring Cloud Foundry上使用通配符模式匹配进行的安全绕过漏洞 CVE-2023-20873

文章目录 0.前言1.参考文档2.基础介绍描述如果满足以下任一条件,应用程序就不会有太大风险:受影响的Spring产品和版本 3.解决方案3.1. 升级版本3.2. 替代方案 0.前言 背景:公司项目扫描到 Spring Cloud Foundry上使用通配符模式匹配进行的安全…

Spring——Spring Boot基础

文章目录 第一个helloword项目新建 Spring Boot 项目Spring Boot 项目结构分析SpringBootApplication 注解分析新建一个 Controller大功告成,运行项目 简而言之,从本质上来说,Spring Boot 就是 Spring,它做了那些没有它你自己也会去做的 Spri…

博流RISC-V芯片BL616开发环境搭建

文章目录 1、工具安装2、代码下载3、环境变量配置4、下载交叉编译器5、编译与下载运行6、使用ninja编译 本文分别介绍博流RISC-V芯片 BL616 在 Windows和Linux 下开发环境搭建,本文同时适用BL618,BL602,BL702,BL808系列芯片。 1、…

Viobot输出数据说明

一.原始数据 1.ROS话题 1)相机原始图像数据 Type: sensor_msgs::Image Topic: 左目:/image_left 右目:/image_right 2)imu数据 Type: sensor_msgs::Imu Topic: /imu 3)TOF数据 点云数据: Type: sensor_msgs::P…

DP读书:鲲鹏处理器 架构与编程(十三)操作系统内核与云基础软件

操作系统内核与云基础软件 鲲鹏软件构成硬件特定软件 鲲鹏软件构成硬件特定软件1. Boot Loader2. SBSA 与 SBBR3. UEFI4. ACPI 操作系统内核Linux系统调用Linux进程调度Linux内存管理Linux虚拟文件系统Linux网络子系统Linux进程间通信Linux可加载内核模块Linux设备驱动程序Linu…

警惕!10本“On Hold”期刊已被踢,仍有12本期刊被标记!

目录更新:2023年8月SCI、SSCI、ESCI期刊 2023年8月21日,科睿唯安更新了WOS期刊目录,此次8月更新中,有24本期刊发生更名或被剔除,其中有10本期刊曾被标记为“On Hold”状态,现已被踢出SCIE/ESCI数据库&…

C语言网络编程实现广播

1.概念 如果同时发给局域网中的所有主机,称为广播 我们可以使用命令查看我们Linux下当前的广播地址:ifconfig 2.广播地址 以192.168.1.0 (255.255.255.0) 网段为例,最大的主机地址192.168.1.255代表该网段的广播地址(具体以ifcon…

wmv格式转换成mp4怎么转?分享一种简单好用转换方法

WMV格式和MP4格式是两种常见的视频格式。WMV格式通常是Windows Media Player默认的格式。虽然在Windows上播放WMV文件很容易,但是在其他平台上可能会遇到兼容性问题。另一方面,MP4格式是一种通用的视频格式,几乎可以在所有设备上播放&#xf…

ATA-3080功率放大器的电子实验案例(案例合集)

ATA-3080是一款理想的可放大交、直流信号的功率放大器。最大输出720Wp功率,可以驱动功率型负载。凭借其优异的指标参数受到不少电子工程师的喜欢,其在电子实验中的应用也非常频繁,下面为大家整理出ATA-3080功率放大器的应用案例合集&#xff…

七、同步与异步

一个控制器,有上下两个mos管,上管就可以当功率管,下管当做同步的场效应管,如此就可以看出他是一个同步结构的buck电路; 2、异步的优缺点 1、在输出电流变化的情况下,二极管的电压降相当恒定: …

linux系统(centos、ubuntu、银河麒麟服务、uos、deepin)判断程序是否已安装,通用判断方法:适用所有应用和命令的判断

前言 项目中需要判断linux服务器中是否已经安装了某个服务 方法有很多种,但是很多都不通用, 脚本代码就不容易做成统一的 解决方案 用下面的脚本代码去进行判断 用jdk测试 脚本意思如下: 输入java -version命令,将返回的字…

行业报告|3D感知技术快速发展,打造“机器之眼”,助推各行业加速升级!

原创 | 文 BFT机器人 01 3D视觉感知全栈式平台,硬核实力蓄势待发 1.1 3D视觉感知为“机器之眼”,未来市场空间广阔 3D视觉感知技术充分弥补了2D成像技术的以上不足,可获取空间几何尺寸信息。 过去数十年2D成像技术蓬勃发展,分辨…

【真题解析】系统集成项目管理工程师 2022 年上半年真题卷(案例分析)

本文为系统集成项目管理工程师考试(软考) 2022 年上半年真题(全国卷),包含答案与详细解析。考试共分为两科,成绩均 ≥45 即可通过考试: 综合知识(选择题 75 道,75分)案例分析&#x…

无涯教程-Android Studio函数

第1步-系统要求 您将很高兴知道您可以在以下两种操作系统之一上开始Android应用程序的开发- MicrosoftWindows10/8/7/Vista/2003(32或64位)MacOSX10.8.5或更高版本,最高10.9(小牛) GNOME或KDE桌面 第二点是,开发Android应用程序所需的所有工具都是开源的,可以从Web上下载。以…

TiDB 源码编译之 TiProxy 篇

作者: ShawnYan 原文来源: https://tidb.net/blog/3d57f54d TiProxy 简介 TiProxy 是一个基于 Apache 2.0 协议开源的、轻量级的 TiDB 数据库代理,基于 Go 语言编写,支持 MySQL 协议。 TiProxy 支持负载均衡,接收来…

SpringBoot笔记——(狂神说)——待续

路线 javase: OOPmysql:持久化 htmlcssjsjquery框架:视图,框架不熟练,css不好; javaweb:独立开发MVC三层架构的网站了∶原始 ssm :框架:简化了我们的开发流程,配置也开始较为复杂; war: tomcat运行 spring再简化: SpringBoot - jar:内嵌tomca…

【Grasshopper基础15】“右键菜单似乎不太对劲”

距离上一篇文章已经过去了挺久的,很长时间没有写GH基础部分的内容了,原因其一是本职工作太忙了,进度也有些落后,白天工作累成马,回家只想躺着;其二则是感觉GH基础系列基本上也介绍得差不多了,电…

保护网站安全:学习蓝莲花的安装和使用,复现跨站脚本攻击漏洞及XSS接收平台

这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。 环境准备 一、XSS基础 1、反射型XSS 攻击介绍 原理 攻击者通过向目标网站提交包含恶意脚本的请求,然后将该恶意脚本注入到响应页面中,使其他用户在查看…