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

求教PCI BIOS?送分为报

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

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

求大家帮个忙吧!!!送分为报了
bx_bird
驱动牛犊
驱动牛犊
  • 注册日期2003-02-08
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-31 10:59
for hand-code
1,Don't use global variable.if have to use, you had better referent it through indirect address mode, etc. PC relative. if you are 'lucy', maybe you have to edit the encoding of instruction.
2,Don't use direct/absolute branch.

it's easy for compiler-code, you can just only add some compile prefix, such as -fPIC.....
peng-416
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-26 08:44
那位能介绍如何写位置无关的代码?
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-07 15:42
ISA固定地址的方法是什么啊?我没做过ISA的所以不是太了解,大哥能否解析一下,是不是就是指把程序固定在某个指定的地址开始?

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

[编辑 -  3/7/04 by  ttzwater]
kermit
驱动小牛
驱动小牛
  • 注册日期2002-11-29
  • 最后登录2010-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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分
5楼#
发布于:2004-01-24 18:19
又有新问题了,请大家指教:)

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

我试过把DS清零,换成基址寄存器的值,但是用这个基址没办法读写板卡上的器件,有哪位高人做过这方面的开发呢?
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-10-21 12:59
这个我也看过,调用PCI_BIOS(INT 1AH吧,没记错的话)就可以获得这些信息,就是实现起来不是太方便
bx_bird
驱动牛犊
驱动牛犊
  • 注册日期2003-02-08
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-10-20 17:30
PCI
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-10-20 10:57
不是很明白,您说的是主板BIOS在起机的时候进行的操作吗?
可以的话能不能把那短源码发给小弟,万分感谢

[编辑 -  10/20/03 by  ttzwater]
peien
驱动牛犊
驱动牛犊
  • 注册日期2003-08-08
  • 最后登录2004-07-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于: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分
10楼#
发布于:2003-10-12 11:43
噢,谢谢这位大哥了,给分先
algous163
驱动牛犊
驱动牛犊
  • 注册日期2002-11-16
  • 最后登录2004-08-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于: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分
12楼#
发布于: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分
13楼#
发布于:2003-10-08 13:41
  在执行卡上rom bios的时候不知是否已经为卡分配了起始地址,如果分配了的话那就好说,你就直接访问了,如果没有的话,你就自己为他分配一个了之后访问了。
  不是很清楚,大概记得应该是已经分配好了。
越到底层越简单!
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-10-07 13:01
这个expansion ROM与BIOS的关系我也不是搞得太清楚,我是这样理解的,PCI BIOS的代码可以嵌入在系统bios或者这个expansion ROM里面,说白了就是你可以使用系统提供的(嵌入在系统bios)的PCI BIOS服务,也可以用你自己定义的来替换(嵌入在expansion ROM在中)
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
15楼#
发布于: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分
16楼#
发布于: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分
17楼#
发布于: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设备发送到操作系统中正确的设备驱动程序的中断处理代码处。
 
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-10-07 11:14
但是,不是说这个ROM里面可以嵌入驱动的吗?
这不可能呀!
ROM里面的数据有:
如图:
ttzwater
驱动小牛
驱动小牛
  • 注册日期2003-06-07
  • 最后登录2011-10-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-10-07 11:04
但是,不是说这个ROM里面可以嵌入驱动的吗?

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

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



[编辑 -  10/7/03 by  ttzwater]
上一页
游客

返回顶部