免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13172 | 回复: 16
打印 上一主题 下一主题

【求助】关于inb和inw的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-15 22:46 |只看该作者 |正序浏览
初学linux内核,在阅读网络设备驱动程序时对inb和inw函数的用法感到不解:
   
  (1)ISA网卡驱动程序的探测过程(函数netcard_probe1()中),从起始端口读取3字节网卡硬件地址进行校验:
       if ( inb(ioaddr+0) != SA_ADDR0  ¦ ¦ inb(ioaddr+1) != SA_ADDR1  ¦ ¦ inb(ioaddr+2) != SA_ADDR3 )
      { return -ENODEV; }
      ...
      for ( i=0; i <6; i++ )
         printk("%2.2x" , dev->dev_addr = inb(ioaddr+i));
   
  (2)在接收函数中(函数net_rx()),出现:
      int status = inw(ioaddr);
      int pkt_len = inw(ioaddr);
      分别表示读取帧状态码和帧长度,是从同一个端口读到的一个包中的两个不同数据

   那么,为什么(1)中三个字节的硬件地址是在三个连续端口中读出来的(inb中的"+0"、"+1"、"+2"),而(2)中帧状态码和长度却是同一个端口呢?
   而且如果对同一端口的连续读取会得到不同的数据,在(1)中,读取地址校验完后的打印过程(inb(ioaddr+i))还能确定是校验时读取的硬件地址数据么?

   请高手指教,谢谢!

论坛徽章:
0
17 [报告]
发表于 2008-04-25 17:06 |只看该作者

回复 #16 folklore 的帖子

你能说一说,汇编和这个帖子的内容有什么关系么?

我想了半天,实在是想不出来。

如果说不出来,请不要过分夸大汇编的作用。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
16 [报告]
发表于 2008-04-25 14:33 |只看该作者
原帖由 albcamus 于 2008-4-17 13:43 发表
这可咋整?  看不懂的帖子加不加精华?


不用.如果连这一点都不知道,请不要看KENERL.

PS:求求大家看KERNEL时,先学点汇编...就永远不会有这个问题了.

论坛徽章:
0
15 [报告]
发表于 2008-04-23 20:02 |只看该作者

回复 #2 bluesky_jxc 的帖子

谢谢,受教了,我看的太死了,呵呵!

论坛徽章:
0
14 [报告]
发表于 2008-04-17 15:19 |只看该作者
原帖由 zx_wing 于 2008-4-17 15:12 发表

老大撤了精吧,这个帖子没啥意义。
只是讲了讲ISA访问寄存器的方式。再说里面水的帖子太多了


没事,精华只是给人参考的,本来也没个精确的范围。。  我的方法一般就是: 1)我能看懂,或者至少能判断是好文章的; 2)看不懂的,因此怀疑可能对别人也有用的。

还有3)大家的讨论,其中有精彩的,哪怕只有几句。

不过还得提醒一下各位版友:BBS,不管是精华不精华, 都别当成权威来学习,不然走弯路^_^

论坛徽章:
0
13 [报告]
发表于 2008-04-17 15:12 |只看该作者
原帖由 albcamus 于 2008-4-17 13:43 发表
这可咋整?  看不懂的帖子加不加精华?

老大撤了精吧,这个帖子没啥意义。
只是讲了讲ISA访问寄存器的方式。再说里面水的帖子太多了

论坛徽章:
0
12 [报告]
发表于 2008-04-17 15:11 |只看该作者
原帖由 bluesky_jxc 于 2008-4-17 14:48 发表
ISA不叫“窗”,我说PCI那种就叫“窗”,汗!

ISA完全可以将这个offset寄存器映射出来,这样就可以随机访问了塞,反正是memory,不会存在顺序问题。

不过这样说似乎有点不负责任,毕竟想不到那个时候的出 ...

哦,明白了,应该有历史原因在里面。
信誉分和人品挂钩的

论坛徽章:
0
11 [报告]
发表于 2008-04-17 14:51 |只看该作者

回复 #8 albcamus 的帖子

这个就不用加精华了吧。。。

论坛徽章:
0
10 [报告]
发表于 2008-04-17 14:50 |只看该作者

回复 #5 zx_wing 的帖子

对了,你那个信誉积分怎么来的?我为什么没有呢?

论坛徽章:
0
9 [报告]
发表于 2008-04-17 14:48 |只看该作者

回复 #7 zx_wing 的帖子

ISA不叫“窗”,我说PCI那种就叫“窗”,汗!

ISA完全可以将这个offset寄存器映射出来,这样就可以随机访问了塞,反正是memory,不会存在顺序问题。

不过这样说似乎有点不负责任,毕竟想不到那个时候的出发点。

今天看了用三极管电路实现的Memory,说了一句:那时候的三极管比电阻贵很多,所以设计的时候就是尽量减少三极管的数量。因此会多花费很多的电阻。拿到现在来说,也许就会优先考虑集成度了罢
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP