- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9.2.1 网络设备的注册、注销 注册与注销函数 创建net_device 释放net_device int register_netdev(struct net_device *dev); void unregister_netdev(struct net_device *dev); struct net_device *alloc_netdev(int sizeof_priv, const char *name, void (*setup)(struct net_device*)); struct net_device *alloc_etherdev(int sizeof_priv); void free_netdev(struct net_device *dev); 9.2.1 网络设备的注册、注销 1 int xxx_init_module(void) 2 { 3 … 4 /*分配net_device结构体并对其成员赋值*/ 5 xxx_dev = alloc_netdev(sizeof(struct xxx_priv),“sn%d”, xxx_init); 6 if(xxx_dev == NULL) 7 …/*分配net_device失败*/ 8 9 /*注册net_device结构体*/ 10 if((result = register_netdev(xxx_dev))) 11 … 12 } 13 14 void xxx_cleanup(void) 15 { 16 … 17 /*注销net_device结构体*/ 18 unregister_netdev(xxx_dev); 19 /*释放net_device结构体*/ 20 free_netdev(xxx_dev); 21 } 9.3 网络设备的打开和释放 网络设备的打开函数完成如下工作: 使能设备使用的硬件资源,申请I/O区域、中断和DMA通道等。 调用Linux内核提供的netif_start_queue()函数,激活设备发送队列。 网络设备的关闭函数需要完成如下工作: 调用Linux内核提供的netif_stop_queue()函数,停止设备传输包。 释放设备所使用的I/O区域、中断和DMA资源。 netif_start_queue()和netif_stop_queue()两个函数的原型 void netif_start_queue(struct net_device *dev); void netif_stop_queue(struct net_device *dev); 9.3 网络设备的打开和释放 int xxx_open(struct net_device *dev) { /*申请端口、IRQ等,类似于fops-open */ ret = request_irq(dev-irq, xxx_interrupt, 0, dev-name, dev); … netif_start_queue(dev); … } int xxx_release(struct net_device *dev) { /*释放端口、IRQ等,类似于fops-close*/ free_irq(dev-irq, dev); … netif_stop_queue(dev); /*can’t transmit any more*/ … } 9.4 数据包发送 网络设备驱动完成数据包发送的流程如下: 网络设备驱动程序从上层协议传递过来的sk_buff参数获得数据包的有效数据和长度,将有效数据放入临时缓冲区。 对于以太网,如果有效数据的长度小于以太网冲突检测所要求数据帧的最小长度ETH_ZLEN,则给临时缓冲区的末尾填充0。 设置硬件的寄存器,驱使网络设备进行数据发送操作。 IOTek Information Tchnology IOTek Information Tchnology IOTek Information Tchnology IOTek Information Tchnology Chapter static void Main(string[ ] args) { Console.WriteLine(请输入一个字符串:); // 输入提示 // 从控制台读入字符串 s
您可能关注的文档
最近下载
- 部编人教版六年级上册道德与法治《6.人大代表为人民》教案教学设计(3课时).pdf VIP
- 灯具安装施工方案范本.pdf VIP
- 工程全过程造价咨询服务方案.pdf VIP
- 抖音电商达人LV1-LV2等级提升测试考试答案&电商达人LV2-LV3等级提升试卷题库.docx VIP
- 企业薪酬管理基础知识讲解(powerpoint 118页).ppt
- 2025年江苏省镇江市辅警协警笔试笔试真题(附答案).docx VIP
- 县中医院度工作目标及绩效工资分配方案.docx VIP
- 金属压铸机的plc控制.pdf VIP
- 20S515 钢筋混凝土及砖砌排水检查井.docx VIP
- 2025年人力资源年终工作汇报.pptx
原创力文档


文档评论(0)