- 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
您可能关注的文档
- ERP原理与应用教程培训课件.ppt
- F5设备在灾备双活中应用探讨培训课件.ppt
- Fluoro热塑料导线挤压涂层英文.ppt
- GMP厂房设施设备培训课程.ppt
- GMP车间管理培训教材.ppt
- GRR目视系统与CPK制程能力指数.ppt
- HPLC的故障诊断及其维修.ppt
- IE七大手法之防错法讲义.ppt
- IE之八大浪费培训资料.ppt
- IE动作分析培训教材.ppt
- 安徽省部分学校(合肥六中)2025-2026学年高二上学期12月联考化学(鲁教版).docx
- 安徽省部分学校(合肥六中)2025-2026学年高二上学期12月联考政治C(含答案).pdf
- 安徽省部分学校(合肥六中)2025-2026学年高二上学期12月联考地理(含答案).pdf
- 2026届百师联盟高三一轮复习12月质量检测历史(含答案).pdf
- 湖南省长沙市麓山共同体学校2025-2026学年高一上学期12月学情检测政治试题(原卷版).docx
- 如何打造全链路营销增长引擎?从内容规划到商机闭环.pdf
- 山西省2026届高三第一次八省联考日语(T8联考)(含答案).docx
- 邕衡名校·广西2025-12月联考高二语文试卷.pdf
- 安徽省部分学校(合肥六中)2025-2026学年高二上学期12月联考物理A(含答案).docx
- 安徽省部分学校(合肥六中)2025-2026学年高二上学期12月联考数学(含答案).docx
原创力文档


文档评论(0)