lnotting
驱动牛犊
驱动牛犊
  • 注册日期2002-05-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1611回复:9

一个关于i/o端口的问题!

楼主#
更多 发布于:2003-04-25 10:00
我看别人写的一些网卡的驱动程序时,有一个疑问。在驱动程序中,i/o地址他们是用宏定义固定好的!比如:一个pcmcia的网卡的i/o地址固定为0x0288h。

那么,我想请教一下,这个地址,我是怎么知道的?换句话说,我怎么知道在一种操作系统下,要编写驱动程序,我要使用这个i/o地址对设备进行i/o操作,而不是使用别的i/o地址???
mailme
驱动老牛
驱动老牛
  • 注册日期2001-05-21
  • 最后登录2010-02-25
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-25 18:27
你说的这个地址应该是偏移量吧,不是计算机的io地址
早起早睡 精神百倍
zhigangwang
驱动牛犊
驱动牛犊
  • 注册日期2003-04-25
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-25 22:07
大多io设备的地址是固定的,一般可在手册中查到;
一些网络芯片的io地址,可以由配置eeprom更改.
不知明白否
lnotting
驱动牛犊
驱动牛犊
  • 注册日期2002-05-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-26 10:10
大多io设备的地址是固定的,一般可在手册中查到;
一些网络芯片的io地址,可以由配置eeprom更改.
不知明白否



我想问,那么这个i/o地址的固定,是由网卡的芯片来指定的?还是由PC系统的规范来指定的??例如,PC系统规定,ISA总线标准中,CPU能访问的I/O地址空间在 0X0100---0X03FF之间!
ffffff57
驱动牛犊
驱动牛犊
  • 注册日期2002-07-26
  • 最后登录2003-11-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-26 14:50
由PC规范制定的
lnotting
驱动牛犊
驱动牛犊
  • 注册日期2002-05-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-26 16:07
由PC规范制定的


我看了一些资料,所以我也同意楼上的朋友的看法!
那我还有一个问题:既然是PC规范制订,那么比如一个PC系统有几个ISA插槽,但访问ISA插槽的I/O端口地址是一个地址范围。那如果我写了一个ISA网卡的驱动程序,我在驱动程序中定义了一个这个网卡的I/O端口地址。那如果我定义的这个I/O地址和别的厂家的网卡驱动程序定义的I/O地址重复了,怎么办??
happy_zhai
驱动牛犊
驱动牛犊
  • 注册日期2002-04-04
  • 最后登录2004-12-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-02 07:50
本人虽属新手,但对ISA板卡开发比较多
根据我设计经验, I/O端口除了系统占有的一部分外
像280-2F0,380-3F0用户几乎都可以用
都是通过跳线或拨动开关来选择的,都是更改I/O端口译码地址而已

eagle7902
驱动牛犊
驱动牛犊
  • 注册日期2002-10-14
  • 最后登录2003-05-14
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-06 18:02
我认为这个是在硬件设计的时候定的,比如我设计一块ISA卡的时候,通过硬件连线确定卡上某个芯片的IO地址。
lnotting
驱动牛犊
驱动牛犊
  • 注册日期2002-05-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-05-07 09:47
我认为这个是在硬件设计的时候定的,比如我设计一块ISA卡的时候,通过硬件连线确定卡上某个芯片的IO地址。

  
  卡上的一些寄存器相对于pc访问isa卡的i/o基地址偏移,比如说isa卡的某个数据寄存器相对于i/o基地址的偏移有可能是2,那么pc的cpu进行i/o操作访问这个数据寄存器的地址就是i/o基地址+偏移地址 2!!

  那我在重复我的疑问:PC的CPU能够对网卡或者是硬件进行IN/OUT操作的I/O基地址是怎么确定的?那么,如果I/O的基地址确定了,这个基地址加上一些网卡上的不同寄存器的偏移地址,就可以让PC的CPU通过地址总线去访问网卡上的不同寄存器了!

  一个网卡的I/O基地址,如果在符合PC规范的前提下,比如:ISA的网卡肯能会在0X100-0X3FF;如果我在这个范围内选了一个值,但是在如果另一个设备的驱动程序的I/O基地址也选用了我那个设备的I/O基地址,这两个I/O基地址不是重复了么?

  我以前做了些底层的网卡驱动,是做无线网卡的。当时是按照同事的文档做的。现在有些疑问想继续和大家讨论!

  谢谢大家的回复!  
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-05-07 14:42
[quote]我认为这个是在硬件设计的时候定的,比如我设计一块ISA卡的时候,通过硬件连线确定卡上某个芯片的IO地址。

  
  卡上的一些寄存器相对于pc访问isa卡的i/o基地址偏移,比如说isa卡的某个数据寄存器相对于i/o基地址的偏移有可能是2,那么pc的cpu进行i/o操作访问这个数据寄存器的地址就是i/o基地址+偏移地址 2!!

  那我在重复我的疑问:PC的CPU能够对网卡或者是硬件进行IN/OUT操作的I/O基地址是怎么确定的?那么,如果I/O的基地址确定了,这个基地址加上一些网卡上的不同寄存器的偏移地址,就可以让PC的CPU通过地址总线去访问网卡上的不同寄存器了!

  一个网卡的I/O基地址,如果在符合PC规范的前提下,比如:ISA的网卡肯能会在0X100-0X3FF;如果我在这个范围内选了一个值,但是在如果另一个设备的驱动程序的I/O基地址也选用了我那个设备的I/O基地址,这两个I/O基地址不是重复了么?

  我以前做了些底层的网卡驱动,是做无线网卡的。当时是按照同事的文档做的。现在有些疑问想继续和大家讨论!

  谢谢大家的回复!   [/quote]

地址重复是会引起冲突的,对于ISA的驱动,硬件资源是需要驱动程序来向系统申请的,如果地址和别的冲突的话,那么申请资源就会失败,所以不可能存在地址一样而都能工作的问题,你写过ISA的驱动,想必这个一定知道。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
游客

返回顶部