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

news/2024/7/5 23:22:25 标签: header, structure, buffer, table, byte, 框架

我所認知的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)


http://www.niftyadmin.cn/n/959426.html

相关文章

AWS 推出增强的 Elasticsearch 开源发行版

百度智能云域名服务,.com新用户首购仅需25元 AWS 近日宣布为 Elasticsearch 推出开源发行版 Open Distro for Elasticsearch。 Elasticsearch 是一个分布式、面向文档的搜索和分析引擎,它支持结构化和非结构化查询,并且不需要提前定义模式。…

【我所認知的BIOS】—Decompression

【我所認知的BIOS】—>Decompression By LightSeed 2009-5-22 存在於BIOS的bin檔中的內容大多都是以模組的形式存在的。總所周知存在於裏面的模組都是有被壓縮的。這張我們就來探討一下關於模組的壓縮與解壓過程。這個章節裏同樣是針對於理解Awxxx公司的code。 1、LHA …

java 分布式事物高并发java架构netty中间件

课程目录 (001-004) 并发编程基础篇和中级篇(005) 并发编程高级篇-锁的高级深化(006) 并发编程高级篇-锁的高级深化(007) 并发编程框架篇-Disruptor并发框架(008) SocketIO网络编程基础篇(009) SocketIO网络编程基础篇(010) Netty课程入门网络编程中级篇(011) Netty课程深入网络…

分布式系统:一致性模型

2019独角兽企业重金招聘Python工程师标准>>> 分布式系统中一个重要的问题就是数据复制,数据复制一般是为了增强系统的可用性或提高性能。而实现数据复制的一个主要难题就是保持各个副本的一致性。本文首先讨论数据复制的场景中一致性模型如此重要的原因&…

BIOS排错

江西财经大学国贸学院 舒 剑 BIOS排错有否方法可循?有。但从哪学?不知道。自我从事BIOS研发以来,强烈的感觉就是,BIOS有如以前的中医,只能靠传帮带才能学的东西,而这还视乎做师傅的观念,看他…

BZOJ2521:[SHOI2010]最小生成树(最小割)

Description Secsa最近对最小生成树问题特别感兴趣。他已经知道如果要去求出一个n个点、m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法。另外,他还知道,某一个图可能有多种不同的最小生成树。例如,下面图 3中所示的都是图 2…

【我所認知的BIOS】—Decompression补充

【我所認知的BIOS】—>Decompression补充 By LightSeed 2009-6-4 这篇文章主要是对上一篇文章Decompression的补充,上一篇文章一是考虑到篇幅,二是考虑到还没有谈到反汇编BIOS二进制文件,所以没有讲的很详细。在这篇文章中举个BIOS的例…

Linux学习第二天:工欲善其事必先利其器

Linux学习第二天:工欲善其事必先利其器 ①首线是下载VMware12、RHEL,https://www.linuxprobe.com/tools ②安装VMware,一个虚拟机软件,可以模拟出一个新电脑硬件系统的软件,无脑下一步就可以(注意勾选“增强…