【我所認知的BIOS】—>PCI option rom

我所認知的BIOS—>PCI option rom

By LightSeed

2009-5-22

在這裡添加一句,畢竟什麽東東都是有相應的組織來定義了spec的,那麼不管做什麽動作我們都必須嚴格按照spec規定的動作來,否則你做出來的信號就只有你自己知道了,或者起碼說不適用於業界,所以處在我現在的這個初級階段我還是想把spec都理解透徹,也鑒於此可能很多我的總結也都是會提到spec裏的東西。

1基本概念

PCI option rom其實是叫做PCI Expansion ROM,只是平時叫PCI option rom比較多而已,當然這都沒有什麽區別啦。談談它的定義,其實到處都有的這裡簡單羅列一下。

2PCI Expansion ROM header

按照PCI spec 2.3可以看的出, PCI Expansion ROM header是一個很重要的東西。它需要支援以下幾個功能:

①標誌了PCI device ROM在初始化時需要佔用的位址空間大小

②表明ROM address 空間的類型

③版本號

Vendor ID device ID

要記住,PCI Expansion ROM永遠都不在space裏執行,它總是被copy到相對應的RAM處,在RAM裏執行它。(筆者:隨便提一下,有些PCI deviceROM是不在PCI卡上的,那麼本應該有ROM的卡,怎麼才能讓PCI device跑起來呢?這個一般都會把ROM裏的code壓入到BIOS code中,在initial PCI option ROM的時候再加壓出來。這也就是下一張要講的 解壓縮過程。)圖1PCI Expansion ROM header的格式截圖,圖片來源於spec

1 PCI Expansion ROM header的格式表

Sepc是這樣定義的,那樣我們的rom實際又是不是這樣的呢,我就曾經懷疑過。所以我就查了一下我上有的一個rom檔,我們來看看它的二進位形式。入圖2.

2 實際的PCI Expansion ROM header 截圖

從圖2中我們可以清楚地看到PCI Expansion ROM header在每個byte上對應的格式。其他的資訊應該都比較容易掌握,但是有個資訊是很重要的還得提一下:offset 03h處是ROM的入口地址。在initial的時候,直接call segment03h。(segment ROMRAM中的鏡像的端地址。)

3PCI Data Structure Format

顧名思義,ROM的資料結構也有一定的格式,它的格式如圖3

3 PCI Data Structure Format截圖

相互與header的對應資訊還可以參見圖2的格式紅線標明處。

4PCI option ROM的初始化過程

目前我遇到的PCI option ROM是作為一個模組放入到BIOSbin檔裏,燒到BIOS晶片裏的。這種過程當然是可以省下一定的成本啦。那麼這種PCI設備的初始化應該怎麼樣去做呢?我做了一個簡單的流程圖,見圖4

文字敘述如下:

①在BIOS code中有一個標誌”= AwXXX Decompression Bios =“,這是爲了cbrom識別用的。那麼在程式編譯的過程中,就會生成一些規定的格式,比如說一些table,它們是供CBrom在壓縮其他romBIOS.bin的時候方便改寫裏面的值。或者說這些框架與cbrom都是相輔相成的,cbrom在壓rom進去的時候就是按照table逐個填入一些值。
②而被壓縮進BIOS.binromE group的某個地方,它在bootblock的時候被BIOS code copy到高端地址(比如說900000H處)

③在準備initialPCI option ROM的時候會被decompress engine解壓到了一個buffer(如40000H)處,然後再被copy到低端的ram處(比如D000~E000h

④就是整個POST的過程了,如下

⑤在option rom initial之前,把用cbrom壓入到BIOS code中所有的PCI 模組都解壓到指定的ram處。(200000H起始處)這裏的資料包括全部的VGAPCI option rom完整資訊。同時生成一個ROMOrderList
⑥遍曆所有的PCI設備,看是否還有網卡的存在。(如果班子需要用LAN boot故特殊處理)這判斷網卡的存在一般會先查看卡上是否存在,如果不存在那麼再掃描BIOS code是否被壓入了?在上面解壓的全部PCI模組中去掃描,如果Vendor IDdevice ID都對應的上那麼說明屬於這個PCI設備的ROM找到。
⑦如果網卡存在,那麼check是否是需要boot的(當然如果是VGAskip)。不存在直接skip
⑨以上步驟後,確實需要從LAN boot,並且rom也存在。那麼插入相應資訊到ROMOrderList中去。
⑩根據ROMOrderList裏的Address,把rom 的全部資訊都copy到特定的buffer,再做相應的判斷,把buffer裏的資訊copyshadow RAM裏面去。(比如說D0000H,當然這裏的目的地址是會變化,並做好記錄的。)同時把ESsegment指向目的地址。然後從ES0處取rom的入口地址,call並初始化。直到ROMOrderList結束。


4 PCI option ROM的初始化過程。

(筆者:以上的理解均來自于AwXXX code,個人理解錯誤在所難免,不正之處望各位斧正。以上的理解過程在程式設計俱樂部和BIOS人的罎子我都有發問的全過程,有興趣也可以去看看。這裡只是那裡的一個小結。關於解壓縮的過程,我想很多很看到這裡都很想知道,敬請關注下一篇,【我所認知的BIOS】—>decompression)

PCIE知识点-019:expansion rom地址可与bar0~5地址重叠 因此市面上的主流PCIe都支持此功能,当Expansion ROM 的地址空间与BAR0~5重叠的时,对重叠地址的访问能够正常响应,且被识别成对Expansion ROM的访问。Expansion ROM 的地址空间是允许与BAR0~5重叠的,无论是否支持Enhanced Allocation capability.1、Expansion rom地址空间的特殊性。此处需要注意:BAR0~5不允许地址重叠。 阅读详情

相关推荐

华为使用MicroG安装并使用Google服务教程

鉴于众多华为手机用户因无法使用Google服务而感到不便,我经过多次摸索和测试,总结了一份简单易懂的教程,希望能够帮助到大家。无论是需要使用Google Play商店下载应用,还是需要使用Google服务进行工作和学习,本文将详细介绍如何在华为手机上安装并使用Google服务。二、前置条件软件要求:Aurora Store(替代Google Play商店)、MicroG Companion、MicroG Server(替代Google框架

weixin_41926602的博客 3万+

谈一谈PCI Option rom

(3)从步骤(2)得知含有合法的Option Rom,再进一步分析该Option Rom:从中找到关键字“PCIR”处的地址,然后读取该地址处有关Option Rom类型的字段type,如果类型type字段为0x03,则表明为UEFI Option Rom,则执行步骤(4);如前所述,具体的驱动细节可以参考其他的文档,架构搭建完后,就可以专注在Option ROM的功能实现上了。之前35篇博客中所讨论的议题,所编写的代码,完全可以移植到Option ROM中,只要硬件设备的扩展ROM大小足够。

qq_43561214的博客 3338

IB网络下不同租户业务隔离方案

IB(InfiniBand)网络隔离可以在不同的通信模式下实现,其中包括 IPoIB(IP over InfiniBand)通信模式。在 IPoIB 模式下,InfiniBand 网络可以承载 IP 数据包,使得基于 IP 的应用程序能够在 InfiniBand 网络上进行通信。在这种情况下,IB 网络隔离通常指通过配置 Partition Key(PKey)来实现不同的租户或应用程序之间的网络隔离。然而,IB 网络隔离并不仅限于 IPoIB 模式。

guganly的专栏 1486

PCI Option ROM 在UEFI中加载流程

文章目录 系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns impor...

china_seaman的博客 6617

BIOSOption ROM详解

1. 何为Option ROM PCI Option ROM又叫PCI Expansion ROM。 它是用于设备初始化和系统boot的code。有的PCI Option ROM被存放在板卡上,而有的则保存在BIOS的binary里面。 2. PCI Option ROM的分类 Option ROM按版本分有2.1的Option ROM和3.0的Option ROM. > 通过查看PCI

huangkangying的专栏 5万+

PCI&PCIE ExpansionOption ROM

1、什么是ExpansionOption ROM? Expansion rom是pci/pcie设备可选的一个外接的eprom芯片,其中用来存储相应pci设备的初始化代码或者系统启动代码(比如pxe或者pci boot)。BIOS在POST(Power-on Self Test)阶段,会扫描pci设备是否有expansion rom,有的话将其拷贝到ram中执行。在PCI规范中称为expansion rom,在BIOS术语里面称为option rom。 例如,我们系统启动阶段可以看到网卡和LSI SAS芯片

Wang20122013的博客 2147

PCI Option ROM in BIOS

    虽然UEFI 出来十几年了,但是legacy 的阴影一直笼罩着我们。今天我们来看看Legacy里面的一个老朋友OpRom。以前很多PCI 设备上面都外挂一颗Rom,用来实现一些特定的功能,比如网络启动,硬盘保护,远程管理等等。后面比较常见的就只有网卡和显卡这两种设备还在用OpRom,独立的板卡有自己的板载Rom IC,板载的为了节约成本,就把OpRom包到BIOS里面。此外,OpRom也可...

longsonssss的博客 5202

PCI & PCIe Option ROM —— 从 BIOS 到 UEFI 的技术演进 | 加载机制 / 结构特点 / 开发

……

u013669912的博客 2540

pc机安装centos6.4

今天在pc机上安装一个centos6.4, 刚开始的时候,需要设置下BIOS的EFI启动有效,这里牵涉到两种安装方式: 说明一下如何在UEFI的BIOS中改变EFI/GPT与MBR的启动模式:设置启动顺序即:Boot Order PCI ROM Priority就是设定是Legacy ROM即以MBR方式启动; 其中以UEFI开头的为EFI/GPT启动模式; 就算

l603971751的专栏 2849

【93】PCI Expansion ROM

PCI expansion ROM

linjiasen的博客 2549

pci option rom 加载过程

在PCI 配置空间的0X30处有这么一个寄存器,叫Expansion ROM Base Address. 如图所示: 我们经常说的option rom 就放在这个位置, 注意前面有个option, 那就是说,并不是每个设备都带有 expansion rom. 原则上讲,一般比较高级的卡(add-in ) 都会有option rom. 从30h 这个位置开始,定义了option rom

Helping BIOSer become Awesome! 1万+

PCIe Expansion Roms

PCIe Expansion ROMs入门 PCIe Expansion ROMsPCIe Expansion ROMs入门1. 为什么需要Expansion Roms2. 怎么知道PCIe设备是否包含Expansion ROM 1. 为什么需要Expansion Roms 为了将操作系统加载到内存中,系统需要三类设备: 存储设备:用于保存操作系统。 显示设备:用于显示当前的启动进度。 输入设备:用于接收用户输入信息。 在这个阶段,操作系统还没有被加载到内存执行,也就意味着操作系统中对应的设备驱动程序也

程序员仓库 7534

UEFI BIOS之PCI Expansion Rom(PCI Option Rom)

1.Option Rom介绍/什么是PCI Option Rom? 2.常用的设备 3.Expansion ROM Image structure 4.主要分类(Code Type)5.Several rules that must be followed when constructing a PCI Option ROM

weixin_43072680的博客 3646

服务器RAID 卡出现报错或识别不了

如果服务器开机RAID 卡出现报错或识别不了,本文档能够为您提供排查方法及解决思路,欢迎浏览

qq_27815483的博客 3221

uefi引导linux分区方案,UEFI 启动 GPT 分区引导、安装 Linux (CentOS 6.4)

引导方式:UEFI分区结构:GPT在上述前提下安装 CentOS 6.4 。一、进 BIOS 选择启动方式。BIOS Features --> PCI ROM Priority --> EFI Compat ible ROM (此为 EFI 引导 GPT 分区;Legacy ROMBIOS 引导 MBR 分区)BIOS Features --> Boot Option ...

weixin_39901412的博客 4565

[我所知道的BIOS]->[VGA init] 10

转自 :http://biosengineer.blogspot.com/2007/10/bios-vga-init-10.html 一般而言,BIOS會在POST時 locate 3 devices:  - Input device(Ex. Keyboard)  - Output device(Ex. Display device) - IPL(Initial Program

ymzhou117的专栏 2301

扩展ROMOPROM

扩展Rom基址寄存器如果功能卡中需要嵌入扩展Rom(Oprom),该PCI寄存器必须实现。许多PCI功能都嵌入了设备ROM,它包含了该功能的设备驱动程序。扩展Rom的起始存储器地址及其大小均在扩展Rom基址寄存器中定义,而扩展Rom基址寄存器位于配置头区域的双字12中。如图1-1所示,系统一加电,就必须立即自动配置系统,以便每个功能的IO和存储器解码器能识别出相互排斥的地址范围。因此,配置软件

Sean的笔记本 1万+

TCU换档策略汇总.zip

TCU换档策略汇总.zip

上一篇: 【我所認知的BIOS】—>PCI 的中斷(PIC下)
下一篇: 截图 不需要专用工具(已发电脑报)
iteye_14310
博客等级 码龄8年 30粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值