ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
阅读:4984回复:20

求教PCI BIOS?送分为报

楼主#
更多 发布于:2003-10-06 18:09
小弟正在给一块PCI卡ROM 写程序,要求必须在操作系统启动前运行,用国庆这几天看了些资料,大概有个眉目了

现在的有个问题想不明白,就是我在ROM里面嵌入的代码如何与这个PCI卡上的芯片(如FPGA,ARM)做数据交流?这时候这个PCI卡的基址是多少呢?自己分配吗?
PCI BIOS提供的接口就是访问配置寄存器的,也没有访问基址寄存器的啊,很狠恨郁闷!!!

求大家帮个忙吧!!!送分为报了
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-06 21:31
在ROM里面嵌入的代码如何与这个PCI卡上的芯片(如FPGA,ARM)做数据交流?
ROM只是起到对pci桥初始化的作用呀!
不与PCI卡上的芯片做数据交流。

这时候这个PCI卡的基址是多少呢?自己分配吗?
这些东西有驱动来定的呀!
和ROM没什么关系。
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-07 11:04
但是,不是说这个ROM里面可以嵌入驱动的吗?

而且PCI的资源本来是由系统分配(BIOS or OS ???)的吗?驱动只是做映射而已,能不能借用ISA卡的方法自己去分配呢?

小弟概念不是很清楚见笑了



[编辑 -  10/7/03 by  ttzwater]
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-07 11:14
但是,不是说这个ROM里面可以嵌入驱动的吗?
这不可能呀!
ROM里面的数据有:
如图:
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-07 11:15
图中显示了256字节的PCI配置头的布局。它包括以下域:
Vendor Identification 唯一的数字,描述这个PCI设备的发明者。Digital的PCI Vendor Identification 是0x1011而Intel是0x8086。
Device Identification 描述设备自身的唯一数字。例如Digital的21141快速以太网设备的设备标识符是0x0009。
Status 此域给除了设备的状态,它的位的含义由PCI Local Bus规范规定。
Command 系统通过写这个域控制这个设备。例如:允许设备访问PCI I/O内存。
Class Code 标识了设备的类型。对于每一种设备都有标准分类:显示、SCSI等等。对于SCSI的类型编码是0x0100。
Base Address Registers 这些寄存器用于确定和分配设备可以使用的PCI I/O和PCI内存的类型、大小和位置。
Interrupt Pin PCI卡的物理管脚中的4个用于向PCI总线传递中断。标准中把它们标记为A、B、C和D。Interrupt Pin域描述了这个PCI设备使用那个管脚。通常对于一个设备来说这时硬件决定的。就是说每一次系统启动的时候,这个设备都使用同一个中断管脚。这些信息允许中断处理子系统管理这些设备的中断。
Interrupt Line PCI配置头中的Interrupt Line域用于在PCI初始化代码、设备驱动程序和系统的中断处理子系统之间传递中断控制。写在这里的数字对于设备驱动程序来讲是没有意义的,但是它可以让中断处理程序正确地把一个中断从PCI设备发送到操作系统中正确的设备驱动程序的中断处理代码处。
 
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-10-07 11:55
这个只是HEADER的结构吧,expansion ROM 里面除了这个header之外还有其他东东的,见下图:

[编辑 -  10/7/03 by  ttzwater]
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-10-07 12:15
我以为你说的是pci桥的配置ROM,兄弟我理解错误!
我想问一下你说的expansion ROM 是pci卡上的cpu的bios吗?
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-10-07 13:01
这个expansion ROM与BIOS的关系我也不是搞得太清楚,我是这样理解的,PCI BIOS的代码可以嵌入在系统bios或者这个expansion ROM里面,说白了就是你可以使用系统提供的(嵌入在系统bios)的PCI BIOS服务,也可以用你自己定义的来替换(嵌入在expansion ROM在中)
algous163
驱动牛犊
驱动牛犊
  • 注册日期2002-11-16
  • 最后登录2004-08-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-10-08 13:41
  在执行卡上rom bios的时候不知是否已经为卡分配了起始地址,如果分配了的话那就好说,你就直接访问了,如果没有的话,你就自己为他分配一个了之后访问了。
  不是很清楚,大概记得应该是已经分配好了。
越到底层越简单!
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-10-08 19:27
嗯,我这两天再查了下资料也发现可以这样做,我还想问一下,就是,
1。是否每个主板BIOS都提供PCI BIOS服务?需要自己装载进去吗?

2。还有就是32位的PCI BIOS和16位的有什么区别呢?
因为很多书都会在介绍PCI BIOS时花一定笔墨去介绍如何调用32位的PCI BIOS,而两者的运行结果是一样的(从返回寄存器值看),所以很不明白为什么还花那么大的力气去调用32位的呢?是跟“模式”有关吗?是不是只有实模式下能调用16位的BIOS服务?困惑中。。。
algous163
驱动牛犊
驱动牛犊
  • 注册日期2002-11-16
  • 最后登录2004-08-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-10-09 08:36
1、系统应该都提供PCI BIOS。rom里面的程序是由系统bios加载进去的;
2、32位和16位应该是和cpu模式相关的。我想区别和我们写16位的汇编与保护模式汇编区别没两样吧,32为的bios可能是说在保护模式下面可以调用吧(说错了不要骂我,你自己找资料看看)。
越到底层越简单!
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-10-12 11:43
噢,谢谢这位大哥了,给分先
peien
驱动牛犊
驱动牛犊
  • 注册日期2003-08-08
  • 最后登录2004-07-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-10-16 18:23
其实pci rom 启动在os启动前专门有一段程序是围绕它来写的
其中有temp_mem一段定义的空间是用来存image的
你需要把它保存的image copy to  shadow ram
当然你需要为之申请一段lmem
rom copy 过去后便直接inital rom

最重要的是沉下去
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-10-20 10:57
不是很明白,您说的是主板BIOS在起机的时候进行的操作吗?
可以的话能不能把那短源码发给小弟,万分感谢

[编辑 -  10/20/03 by  ttzwater]
bx_bird
驱动牛犊
驱动牛犊
  • 注册日期2003-02-08
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-10-20 17:30
PCI
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-10-21 12:59
这个我也看过,调用PCI_BIOS(INT 1AH吧,没记错的话)就可以获得这些信息,就是实现起来不是太方便
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-01-24 18:19
又有新问题了,请大家指教:)

我已经读出了pci桥芯片上基址寄存器的值了,可是这些基址怎么用呢?DS应该是多少?

我试过把DS清零,换成基址寄存器的值,但是用这个基址没办法读写板卡上的器件,有哪位高人做过这方面的开发呢?
kermit
驱动小牛
驱动小牛
  • 注册日期2002-11-29
  • 最后登录2010-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-02-16 10:34
你借用ISA的方法就可以拉.
我曾经用PCI扩展BIOS的方法把一个DOS装到卡上.

具体步骤是:
运用ISA的固定地址方式来做PCI 扩展ROM卡,固定地址是D000段.

把整个DOS代码地址固定在3G开始的地方.

当BIOS探测到我的DOOO段的扩展ROM的时候,就会跑去那里运行.在DOOO里面的程序就是先进保护模式,把BIOS读进内存,然后开始加载.

www.eyeteck.com
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-03-07 15:42
ISA固定地址的方法是什么啊?我没做过ISA的所以不是太了解,大哥能否解析一下,是不是就是指把程序固定在某个指定的地址开始?

而且,我怕如果用这种方法,出来的产品会挑机器,因为我最近发现各个主板上的BIOS支持的不统一

[编辑 -  3/7/04 by  ttzwater]
peng-416
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-03-26 08:44
那位能介绍如何写位置无关的代码?
上一页
游客

返回顶部