网站大量收购独家精品文档,联系QQ:2885784924

第七章 netdevice.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux操作系统分析与实践 第九讲:网络设备驱动程序 《Linux操作系统分析与实践》课程建设小组 北京大学 二零零八年春季 *致谢:感谢Intel对本课程项目的资助 本讲主要内容 网络接口驱动程序 网络接口例子—snull 9.1 网络接口驱动程序 网络接口驱动程序和字符设备、块设备驱动程序都不同 本次课介绍一个不和真实硬件相关的“虚拟”网络接口 设备注册 linux/netdevice.h struct net_device 这个结构中包括了网络设备接口需要的很多信息 必须动态分配,例如 struct net_device *snull_devs[2]; struct net_device *alloc_netdev(int sizeof_priv, const char *name, void (*setup)(struct net_device *)); struct net_device *alloc_netdev(int sizeof_priv, /*私有数据区长度 ,驱动程序设计者设计*/ const char *name,/*接口名 */ void (*setup)(struct net_device *) /* 网络接口初始化函数 */ ); 例子 snull_devs[0] = alloc_netdev(sizeof(struct snull_priv), sn%d, snull_init); snull_devs[1] = alloc_netdev(sizeof(struct snull_priv), sn%d, snull_init); if (snull_devs[0] = = NULL || snull_devs[1] = = NULL) goto out; alloc_etherdev 除了alloc_netdev,也有一些简化工作的函数,比如: struct net_device *alloc_etherdev(int sizeof_priv); 这个函数不用驱动程序提供接口初始化函数,网络接口名是 eth%d 这样的形式 在linux/etherdevice.h中定义 register_netdev for (i = 0; i 2; i++) if ((result = register_netdev(snull_devs[i]))) printk(snull: error %i registering device \%s\\n, result, snull_devs[i]-name); 初始化设备 ether_setup(dev); /* 对dev的某些域先进行初始化*/ dev-open = snull_open; dev-stop = snull_release; dev-set_config = snull_config; dev-hard_start_xmit = snull_tx; dev-do_ioctl = snull_ioctl; dev-get_stats = snull_stats; dev-rebuild_header = snull_rebuild_header; dev-hard_header = snull_header; dev-tx_timeout = snull_tx_timeout; dev-watchdog_timeo = timeout; /* keep the default flags, just add NOARP */ dev-flags |= IFF_NOARP; dev-features |= NETIF_F_NO_CSUM; dev-hard_header_cache = NULL; /* Disable caching */ 网络设备的一系列操作和 状态标志 程序员定义的结构snull_priv struct snull_priv { struct net_device_stats stats; //统计信息 int status;//状态 struct snull_packet *ppool; struct snull_packet *rx_queue; /* List of incoming packets */ int rx_int_enabled; int tx_packetlen; u8 *tx_packetdata; struct sk_b

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档