- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 数据结构实验3_副本.doc
- 铝酸钠溶液碳酸化分解过程中氢氧化铝粒度及强度的变化.pdf
- 心理健康测评及全人教育模型.pdf
- C++讲义第10篇.ppt
- 第五篇(new).ppt
- 从实际案例分析权利要求书应当以说明书为依据概要.pdf
- 第六篇 计算机网络应用基础.ppt
- 某框架结构设计计算书—竖向荷载计算和内力组合.pdf
- 设备综合效率指标的比较分析及运用.doc
- 考点一_力及运动.pdf
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)