17.3. net_device 结构详情.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
17.3. net_device 结构的详情 17.3. net_device 结构的详情 net_device 结构处于⽹络驱动层的⾮常核⼼的位置并且值得完全的描述. 这个列表描述 了所有 员, 更多的是提供了⼀个参考⽽不是⽤来备忘. 本章剩下的部分简要地描述了 每个 员, ⼀旦它⽤在例⼦代码上, 因此你不需要不停地回看这⼀节. 17.3.1. 全局信息 结构 net_device 的第⼀部分是由下⾯ 员组 : char name[IFNAMSIZ]; 设备名⼦. 如果名⼦由驱动设置, 包含⼀个 %d 格式串, register_netdev ⽤⼀个数替换它 来形 ⼀个唯⼀的名⼦; 分配的编号从 0 开始. unsigned ong state; 设备状态. 这个 员包括⼏个标志. 驱动正常情况下不直接操作这些标志; 相反, 提供了 ⼀套实⽤函数. 这些函数在我们进⼊驱动操作后马上讨论这些函数. struct net_device *next; 全局列表中指向下⼀个设备的指针. 这个 员驱动不能动. int (init)(struct net_device dev); ⼀个初始化函数. 如果设置了这个指针, 这个函数被 register_netdev 调⽤来完 对 net_device 结构的初始化. ⼤部分现代的⽹络驱动不再使⽤这个函数; 相反, 初始化在注 册接⼜前进⾏. 17.3.2. 硬件信息 下⾯的 员包含了相对简单设备的低层硬件信息. 它们是早期 Linux ⽹络的延续; ⼤部 分现代驱动确实使⽤它们(可能的例外是 if_port ) . 我们为完整起见在这⾥列出. unsigned ong rmem_end;unsigned ong rmem_start;unsigned ong mem_end;unsigned ong mem_start; 设备内存信息. 这些 员持有设备使⽤的共享内存的开始和结束地址. 如果设备有不同 的接收和发送内存, mem 员由发送内存使⽤, rmem 员由接收内存使⽤. rmem 员 在驱动之外从不被引⽤. 惯例上, 设置 end 员, 所以 end - start 是可⽤的板上内存的数 量. unsigned ong base_addr; ⽹络接⼜的 I/O 基地址. 这个 员, 如同前⾯的, 由驱动在设备探测时赋值. ifconfig ⽬录 可⽤来显⽰或修改当前值. base_addr 可以当系统启动时在内核命令⾏中显式赋值( 通 过 netdev= 参数), 或者在模块加载时. 这个 员, 象上⾯描述过的内存 员, 内核不使⽤ 它们. unsigned char irq; 安排的中断号. 当接⼜被列出时 ifconfig 打印出 dev-irq 的值. 这个值常常在启动或者 加载时间设置并且在后来由 ifconfig 打印. unsigned char if_port; 在多端⼜设备中使⽤的端⼜. 例如, 这个 员⽤在同时⽀持同轴线(IF_PORT_ 10BASE2) 和双绞线(IF_PORT_ 100BSAET) 以太⽹连接. 完整的已知端⼜类型设置定义在 inux/netdevie .h . unsigned char dma; 设备分配的 DMA 通道. 这个 员只在某些外设总线时有意义, 例如 ISA . 它不在设备驱 动⾃⾝以外使⽤, 只是为了信息⽬的( 在 ifconfig ) 中. 17.3.3. 接⼜信息 有关接⼜的⼤部分信息由 ether_setup 函数正确设置(或者任何其他对给定硬件类型适 合的设置函数) . 以太⽹卡可以依赖这个通⽤的函数设置⼤部分这些 员, 但是 f ags 和 dev_addr 员是特定设备的, 必须在初始化时间明确指定. ⼀些⾮以太⽹接⼜可以使⽤类似 ether_setup 的帮助函数. deviers/net/net_init .c 输出了⼀ 些类似的函数, 包括下列: void ta k_setup(struct net_device *dev); 设置⼀个 Loca Ta k 设备的 员 void fc_setup(struct net_device *dev); 初始化光通道设备的 员 void fddi_setup(struct net_device *dev); 配置⼀个光纤分布数据接⼜ (FDDI) ⽹络的接⼜ void hi

您可能关注的文档

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档