syj2008
驱动牛犊
驱动牛犊
  • 注册日期2008-04-28
  • 最后登录2012-07-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望74点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:3936回复:8

pci设备 扩展rom代码 运行问题

楼主#
更多 发布于:2010-07-16 23:36
根据pci 规范,扩展rom的代码将会被bios拷贝到系统内存中,然后执行。规范中没有提到rom代码执行是
否有限制条件。

将代码按照扩展rom规范写进8139网卡的扩展rom中,如果在bios中设置启动顺序为为:boot from lan那

么rom中的代码会被执行,如果按照正常的启动顺序(硬盘启动),那么rom代码没有被执行,请问这是为

什么?那么其他pci设备的扩展rom代码的执行也是需要某种环境才会被执行的吗?请前辈指点下。
dadaodan
驱动牛犊
驱动牛犊
  • 注册日期2009-04-12
  • 最后登录2024-03-13
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望511点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2010-07-17 00:44
你可以看一下pci的spec里面的option rom部分,里面有比较详细的说明。PCI的rom只要符合PCI的引导头,就应该可以引导。至于boot from lan,这个是BIOS内部在引导过程中会对相应的引导选项进行遍历,当符合条件时,就将rom载入,主要实现是通过INT19h。如果想要强制rom执行,可以考虑使用ISA模式引导,改一下引导头应该就可以了。不过这个需要对BIOS进行一些修改。
syj2008
驱动牛犊
驱动牛犊
  • 注册日期2008-04-28
  • 最后登录2012-07-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望74点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-07-18 16:12
回 1楼(dadaodan) 的帖子
感谢dadaodan,pci的spec里面的option rom部分已经看过了,但是我是想让这个pci rom代码在任何情况下都能够被执行,不知道有没有办法?
dadaodan
驱动牛犊
驱动牛犊
  • 注册日期2009-04-12
  • 最后登录2024-03-13
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望511点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2010-07-20 09:25
这个比较困难,因为要看BIOS在引导过程中是怎么选择启动设备和option rom的。而且PCI设备的引导前提也比较多。比如要打开option rom,要设置模块引导,比如LAN BOOT。如果需要每次开机都进行引导的话建议使用ISA引导头,这个改动也不大,只需要将VID和DID修改一下就可以了,将模块以ISA方式添加到BIOS中。这样模块就应该可以每次开机自动启动。因为按照一般的BIOS引导流程,ISA模块都会直接执行。当然,有些厂家在BIOS中将ISA模块引导关闭了,这个就不是我们能解决的了。或者你也可以考虑用替换其他模块的方式进行,不过危险性比较大,个人建议还是用ISA就可以了,记得留个后门,免得当掉。
syj2008
驱动牛犊
驱动牛犊
  • 注册日期2008-04-28
  • 最后登录2012-07-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望74点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-07-20 09:54
回 3楼(dadaodan) 的帖子
关于ISA模块插入BIOS中,确实像您说的那样,但是现在想针对带有扩展ROM的PCI设备来做一些研究,把代码写进rom芯片中,这个代码应该只能是PCI模块形式的吧?难道针对某种pci设备的代码,必须要进行某种设置,才能让这个pci代码被bios执行吗?还请dadaodan指点。
dadaodan
驱动牛犊
驱动牛犊
  • 注册日期2009-04-12
  • 最后登录2024-03-13
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望511点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2010-07-20 16:46
指点不敢当,我只是说一下自己的想法。我想如果是pci的option rom的话,确实如你所说,是要在经过某种设置才能执行的,这个主要是由BIOS来决定。而pci的option rom是否引导,这个要看pci设备类型,以及BIOS的相关设置。如果有兴趣的话你可以用工具来看一下计算机里的PCI设备,具体工具名字记不清楚了,晚上我回去找找看。一般的BIOS对ISA模块是必然引导,而pci模块则是条件引导,如果要深究原因就要去看BIOS代码了:-)
我想你要研究的就是在一个pci设备上添加一个芯片,然后执行里面的代码。如果是这样的话我感觉和是否是PCI option rom应该没太大关系。而且据我所知,一些pci卡上的rom芯片里也是isa模块。
syj2008
驱动牛犊
驱动牛犊
  • 注册日期2008-04-28
  • 最后登录2012-07-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望74点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2010-07-20 23:56
回 5楼(dadaodan) 的帖子
“我想你要研究的就是在一个pci设备上添加一个芯片,然后执行里面的代码。如果是这样的话我感觉和是否是PCI option rom应该没太大关系。而且据我所知,一些pci卡上的rom芯片里也是isa模块。”
正如您说的,我就是要做这个事情,并且想让代码每次都被bios执行,做一些工作。

如果pci卡上的rom芯片是isa模块的话,那么这样这个模块岂不是和设备没有关系了(isa模块中没有vendor id 和device id),那么pci rom中的isa模块是不是能每次被bios加载执行呢?

很感谢您的回复,我想还是做一个实验,在pci rom中写一个isa模块,看能不能被执行。

还有就是貌似romos中的pci模块可以在正常启动顺序下,也会被bios引导执行
dadaodan
驱动牛犊
驱动牛犊
  • 注册日期2009-04-12
  • 最后登录2024-03-13
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望511点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2010-07-21 10:39
如果pci卡上的rom芯片是isa模块的话,那么这样这个模块岂不是和设备没有关系了(isa模块中没有vendor id 和device id),那么pci rom中的isa模块是不是能每次被bios加载执行呢?

是这样的,只是一个rom模块而已,和设备没有什么关系的。isa的模块引导头也要填写ven id(0000h)和devID(6060h or 6062h)。至于是否执行还是由BIOS来决定,这个要看主板厂家。我遇到过有的主板厂家在BIOS将ISA引导给屏掉的。不过多数还比较仁慈,基本都能引导。O(∩_∩)O
liveningning
驱动牛犊
驱动牛犊
  • 注册日期2010-07-29
  • 最后登录2010-08-18
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望201点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2010-08-03 10:40
多谢分享。。
不错的内容。
[url]www.focushrd.cn[/url]
游客

返回顶部