【我所認知的BIOS】—>PCI SCAN
LightSeed
2009-5-12
1、PCI梗概
Study到現在已經快一年了,目前我自己理解,覺得PCI device在整個計算機的應用中是很重要,及其重要的一個東東。整由於它重要,所以可能一節我還講不完,分幾次把我所理解的PCI相關東東都總結一下。PCI是外設元件互連標準(Peripheral Component Interconnect)那麼我們平時說的PCI device就是符合這個標準的設備。(^.^廢話)這個標準由英代爾(Intel)公司1991年推出的用於定義局部匯流排的標準。此標準允許在電腦內安裝多達10個遵從PCI標準的擴展卡。最早提出的PCI匯流排工作在33MHz頻率之下,傳輸帶寬達到133MB/s(33MHz * 32bit/s),基本上滿足了當時處理器的發展需要。隨著對更高性能的要求,1993年又提出了64bit的PCI匯流排,後來又提出把PCI 匯流排的頻率提升到66MHz。目前廣泛採用的是32-bit、33MHz的PCI 匯流排,64bit的PCI插槽更多是應用於伺服器產品。從結構上看,PCI是在CPU和原來的系統匯流排之間插入的一級匯流排,具體由一個橋接電路實現對這一層的管理,並實現上下之間的介面以協調資料的傳送。
2、現實中的PCI
平時我們說XX買了一個不錯的PCI顯卡,YY買了一個PCI to USB的適配器,那麼它們都爲什麽會有個PCI三個字呢?是因為他們都是插在PCI插槽上,普通主板上的PCI插槽如圖1.1
圖1.1 普通的PCI插槽
3、PCI設備要運作,我們應該怎麼做?
PCI設備要運作,那麼就需要PCI SCAN。
******************引用 start**********************
[Why need PCI SCAN]
現在的computer system泰半由許多PCI devices所組成,因此,BIOS POST中另一個重要的 task is : PCI_SCAN !!!
它代表的是: BIOS會掃瞄 whole system,找出所有的PCI devices; initial them and build a linked list of PCI devices.在此list中的每一個node都代表一個PCI device,且含有其 characteristics !
Ex. Vendor ID,Device ID, PFA,Option ROM exist or NOT,...etc.
一旦建好此表,以後的 tasks 隨時都可以參考 !!!
所以, after PCI_SCAN,有兩件事完成了:
1. PCI device initialization;device config registers(Part A) are correctly set ...
2. One data structure is built to describe the PCI devices in whole system(建在memory中)
這也是屬於kernel code part ^_^ ( system 一般很少 hang at this stage...)
******************引用 end***********************
以上引用自<小華的部落格>
連接:http://biosengineer.blogspot.com/2007/10/bios-pci-scan-9.html
到這裡可能多半的人都會想到那麼怎麼去scan這些PCI device呢?
4、PCI device scan
4.1PCI設備的configuration space是什麽
顧名思義,PCI設備的configuration space是用來配置PCI device的。我們平時在BIOS修改的某些寄存器就是修改這個裏面的東東。這個space是嚴格按照PCI spec來做的,查看詳細的說,請參見PCI spec2.3的chapter 6 page 195。圖4.1是配置空間的位置說明,截于PCI spec。
圖4.1 PCI配置空間的map
4.2怎麼判斷PCI device存在
掃描PCI device一般都是這樣,讀取PCI設備的configuration space中vendor ID 和device ID,判斷他們是否為0xFFFF。若是,則說明該PCI device是不存在的。(因為每個PCI device的製造商都會把他們的ID填入這個位置,而且是read only的。)
4.3怎麼訪問PCI設備的configuration space
用CF8和CFC兩個端口來訪問,爲了能夠不失真我引用了spec里的原文來說明。“Two DWORD I/O locations are used to generate configuration transactions for PC-ATcompatible systems. The first DWORD location (CF8h) references a read/write registerthat is named CONFIG_ADDRESS. The second DWORD address (CFCh) references a read/write register named CONFIG_DATA”從CONFIG_ADDRESS和 CONFIG_DATA其實就很容易看出了,當我們向CF8端口(CONFIG_ADDRESS)寫入規定的格式地址時,便可以從CFC端口(CONFIG_DATA)讀回相應的數據。
4.4 PCI scan的技巧
這裡兩個小技巧:
① 在讀回的端口,你可以取其中的任何一個byte或者word甚至整個double word
② 爲了提高掃描的效率,其實可以先查看header type這個寄存器中的bit7。Bit7的0與1表示該PCI設備是否是single function的,若single function device那麼這個時候就可以直接scan下一個PCI 設備啦。
4.5 訪問舉例
圖4.1是向CF8端口寫入的地址格式,截圖于spec page 32
圖4.1
以下是一段訪問配置空間的code。
mov eax, 80020500h ;bus 2, device 0, function 5(这里原本我写错了,是网友goldencrest帮我纠正了过来,谢谢!)
mov dx, 0cf8h
out dx, eax
mov dx, 0cfch
in eax, dx
以此類推,變可以把PCI device的整個configuration space都讀取出來。效果圖見圖4.2
圖4.2 用ADU顯示出來的PCI configuration space數據截圖
以上是我對PCI scan的理解。不足之處還望各位指正。
分享到:
相关推荐
pci scanscan scan scan scan scan
综上所述,这个工具包可能包含了一个用于扫描和显示PCI设备信息的实用程序,其工作原理涉及BIOS的中断服务、PCI配置空间的读取,以及汇编和C语言实现的底层硬件交互。这样的工具对于系统管理员、硬件开发者和故障...
### PCI BIOS函数的应用 #### 一、引言 随着计算机技术的发展,PCI(Peripheral Component Interconnect)局部总线因其强大的兼容性和丰富的功能,在计算机领域获得了广泛的应用。然而,国内关于PCI局部总线BIOS...
PCI(Peripheral Component Interconnect)BIOS规范是个人计算机系统中硬件扩展的重要标准,它定义了如何在基于PCI架构的系统中初始化和管理PCI设备。PCI BIOS是BIOS(基本输入/输出系统)的一个组成部分,主要负责...
综上所述,这个压缩包提供的内容涵盖了PCI总线的高级规格,特别是PCI BIOS的规范,这对于系统开发者、硬件工程师以及对计算机硬件感兴趣的人员来说是非常宝贵的参考资料。通过学习这些内容,我们可以深入了解PCI设备...
《PCI BIOS 2.1详解》 PCI BIOS 2.1规范是计算机硬件领域中一个重要的技术标准,它定义了如何在个人计算机系统中初始化和管理PCI(Peripheral Component Interconnect)设备。PCI标准是由英特尔公司在1990年代初...
### BIOS PCI32 – 关键知识点解析 #### 一、引言 - **目的**:本文档旨在定义一套标准,用于指导如何在保护模式下通过BIOS中的接口控制PCI(Peripheral Component Interconnect)设备。这对于编写操作系统的内核...
PCI_BIOS_Specification
根据提供的文件标题、描述、标签以及部分内容,我们可以深入探讨PCI BIOS Specification Revision 2.1的相关知识点。本篇文章将重点解析该规范的主要内容及其在计算机硬件领域的重要意义。 ### PCI BIOS ...
这几年来,蛮多小伙伴都给我发邮件拿PDF版本。几年前写的文章格式什么的实在是太粗糙。最近我把所有的文章都整理了一下。其实该想法已经早就有了,只是最近才...涉及BIOS, UEFI, EFI, AHCI, ACPI, driver等底层的知识
在使用过程中,为了实现对PCI-1716的高效控制,开发人员有时会调用BIOS中断来访问PCI卡的数据。BIOS(基本输入输出系统)中断是计算机硬件和软件之间的重要通信机制,允许软件通过特定的中断向硬件发送请求并获取...
在计算机系统中,BIOS(基本输入输出系统)扮演着至关重要的角色,它是一组固化在计算机主板上ROM芯片中...通过阅读《我所认知的 BIOS 》实模式&保护模式切换实例文档,可以更直观地学习这一过程,并通过实践加深理解。
PCI-BIOS 2.1规范是计算机硬件领域中一项重要的技术标准,主要涉及PCI(Peripheral Component Interconnect,周边组件互连)接口与BIOS(Basic Input/Output System,基本输入/输出系统)之间的交互。这一规范旨在...
综上所述,富士康X79双路主板C602支持PCI NVME固态硬盘的BIOS更新涉及到的关键知识点包括主板的扩展性、高性能硬件支持、BIOS刷新工具的使用以及如何安全地进行BIOS升级,这些都是保证系统稳定性和提升性能的重要...
显卡影驰黑将GTX650 1GB DDR5 PCI-E 128Bit的bios的bin文件放这里给有需要的朋友, 一次备份的时候保留了下来,删掉又有点浪费 需要用:CH341A编程器软件烧录到显卡的bios芯片上 发现现在假显卡还真不少,假显卡装...
BIOS练习器是一款专门针对电脑初学者的BIOS设置学习软件,软件只有一个文件,下载解压后直接双击即可运行。软件全真模拟AWARD BIOS的设置界面,采用与AWARD BIOS设置完全相同的操作方法和快捷按键,任何对AWARD BIOS...
DOS下遍历PCI设备程序。 这有3个独立的工程,分别采用bios方式和io端口方式对pci设备遍历。 工程是在windows下用Borland C++5.0生成,其中xxx.exe文件可以直接在dos下运行。
在编程领域,BIOS(基本输入输出系统)是计算机硬件与操作系统之间的一个关键接口。BIOS的主要职责是在计算机启动时执行一系列初始化任务,包括检测硬件、设置系统配置,并加载操作系统。`bios.h`是一个头文件,它...
本文将深入探讨如何修改BIOS以加入Nvme协议模块,从而使BIOS能够识别通过PCI-E转接卡连接的M.2固态硬盘。 首先,让我们了解Nvme(非易失性内存 express)。Nvme是一种高速接口标准,专为PCI-E SSD设计,旨在提高...