Ten Years

十年一剑!
-------------------------------------------------
Operating System Research / Technique

Saturday, September 23, 2006

(简介)PCI Extension ROM

PCI Spec 2.2

很多PCI设备都带有自己的ROM(比如网卡,显卡),里面存放着设备的特有初始化代码(代码类型有可执行的和解释型的,俗称BIOS),并且这个ROM是和主芯片分离的。

当系统BIOS做POST时,会检测各个PCI设备的头部结构中的Extension ROM BAR寄存器,如果实现了这个寄存器(bit0为1)就表示该设备包含Extension ROM,需要做设备特有的初始化。通过往这个寄存器写全1的数,然后再读出来得到一个mask,此mask表示需要为ROM提供多大的映射内存地址空间。

Extension ROM存放的是多个image,每个image的功能一般是一样的,但是它们的内容格式确是不同的,多个image是为了要支持不同的体系结构,各个image由image头部中的vendorID和deviceID识别。每个image的头2个字节固定为0xAA55,用于定位ROM的位置。

ROM内容的格式主要有:PC/AT, Open Firmware Spec, HP Spec。当前比较常用的是PC/AT。
对于PC/AT格式,第2个字节表示image有多少个512字节是有用的初始化代码(即需要搬运到RAM的代码大小),第3,4个字节是一个指向INIT entry的偏移指针,程序最后通过这个指针跳到ROM的初始化代码处去执行。
  • At 11:13 AM, Blogger xiayubin said…

    如果ROM为解释性的代码是否就不存在体系结构依赖的问题?
    PS:有错别字哦:)
     

  • At 11:48 AM, Blogger Andy Yang said…

    Brady学会我的偏执了,哈哈……
     

  • At 8:55 PM, Blogger water said…

    又读了一遍,没错呀。难道是已经被改了?
     

  • At 8:58 PM, Blogger water said…

    之前说过的FCode的代码(Open Firmware Spec)就是一种体系结构无关的代码。
     

  • At 9:04 PM, Blogger Andy Yang said…

    FCode怎么执行呢?解释?

    这不有是VMM吗?哈哈:)
     

  • At 4:12 PM, Blogger water said…

    FCODE的二进制代码由BIOS中的解释器解释执行,是有点虚拟机的概念。
     

Post a Comment

6 Comments:

  • At 11:13 AM, Blogger xiayubin said…

    如果ROM为解释性的代码是否就不存在体系结构依赖的问题?
    PS:有错别字哦:)

     
  • At 11:48 AM, Blogger Andy Yang said…

    Brady学会我的偏执了,哈哈……

     
  • At 8:55 PM, Blogger water said…

    又读了一遍,没错呀。难道是已经被改了?

     
  • At 8:58 PM, Blogger water said…

    之前说过的FCode的代码(Open Firmware Spec)就是一种体系结构无关的代码。

     
  • At 9:04 PM, Blogger Andy Yang said…

    FCode怎么执行呢?解释?

    这不有是VMM吗?哈哈:)

     
  • At 4:12 PM, Blogger water said…

    FCODE的二进制代码由BIOS中的解释器解释执行,是有点虚拟机的概念。

     

Post a Comment

<< Home