open回调函数的主要代码如下:

……

usb_fill_bulk_urb(dev->rx_urb, //构造读请求的URB

dev->udev,

usb_rcvbulkpipe(dev->udev, 6), //指定读端点

dev->rx_skb->data,

512,

read_bulk_callback, //使用read_bulk_callback做为URB的

dev //回调函数。

);

if((result = usb_submit_urb(dev->rx_urb, GFP_KERNEL))){ //将URB发送给

…… //USB Core

}

netif_start_queue(netdev); //使能网络传输队列

……

当读请求URB完成时,意味着主机收到了一个数据包或该URB超时,此时read_bulk_callback将会被内核调用。无论是哪种情况,为了将来可能到来的数据包能够及时得被主机读取,驱动程序都应该再发送一个读请求URB给USB Core。而在主机收到数据包的情况下,read_bulk_callback函数构造一个skb_buff数据结构来描述数据包,并调用 netif_rx函数,把该数据包交给上层协议,从而完成一次接受过程。

与接受过程相比,发送数据包的过程简单了很多。当网络子系统准备发送一个数据包时,上层协议将会构造一个skb_buff数据结构来描述数据包,并且调用网络驱动程序注册的hard_start_xmit回调函数来发送该数据包。由于该函数被调用时内核持有xmit_lock自旋锁,因而驱动程序可以不必考虑对设备写操作的同步问题。hard_start_xmit函数根据数据包的长度将其拆分为USB设备可以传输的长度,然后构造相应的写请求 URB,发送至USB Core即可。

hard_start_xmit回调函数的主要代码如下:

……

usb_fill_bulk_urb(dev->tx_urb, //构造写请求的URB

dev->udev,

usb_sndbulkpipe(dev->udev, 2), //指定写端点

skb->data,

512,//count,

write_bulk_callback, //使用write_bulk_callback做为URB的回调函数。

dev

);

if((result = usb_submit_urb(dev->tx_urb, GFP_ATOMIC))){ //将URB发送给

…… //USB Core

}

写请求URB完成时,write_bulk_callback回调函数被内核调用。该函数判断写请求URB是否成功完成。根据URB的完成情况,驱动程序需要更新网络接口的相应统计数据,例如成功/失败发送包的数目等。

5. 小结

本文从工程应用出发,介绍了Linux的体系结构及其网络子系统,并结合USB设备在Linux下的访问机制,研究了USB驱动程序实现异步通知的方法,并给出了USB网络驱动程序的设计框架和实例。在实际测试中,本文分析的驱动程序运行稳定,并且达到了预期的网络传输速度。

参考文献:

[1] J. Corbet, A. Rubini, and G. Kroah-Hartman. Linux Device Drivers, Third Edition. 2005, O'Reilly Media, Inc.

[2]毛德操 胡希明. Linux内核源代码情景分析. 2001. 浙江大学出版社.

[3]Daniel P. Bovet, M. Cesati. Understanding the Linux Kernel, Second Edition. 2002, O'Reilly Media, Inc.

[4]李少甫 何小庆 江文瑞.The Development of Embedded Wireless LAN Application System Based on MontaVista Linux.微计算机信息. 2002年11期49-51

linux usb有线网卡驱动_基于USB设备的Linux网络驱动程序开发相关推荐

  1. linux usb有线网卡驱动_有线网卡Linux驱动安装小记

    一直使用无线网,竟然没发现我的有线网卡Atheros AR8162竟然没有驱动,在此小记: ubuntu 12.04 以及 基于ubuntu的mint 13 maya 都有这个问题 在linux下查看 ...

  2. linux kernel有线网卡驱动enc28j60分析 一

    1.为了更好低学习linux的网络驱动架构,本文选择分析linux kernel下的有线网卡驱动enc28j60来学习网络驱动架构. enc28j60是一个10/100Mb的有线网卡,适用于嵌入式设备 ...

  3. 电脑重新安装了有线网卡驱动,并且能上网,但网络连接图标有红叉怎么去掉

    1.右击桌面的''计算机''图标,点击"管理". 2.然后按照:计算机管理(本地)-> 系统工具->性能   找到"设备管理器"(注:不是任务管理器 ...

  4. USB 3G网卡驱动流程

    USB 3G网卡驱动流程 简介 首先介绍一下linux下的整体驱动模式: 本文基于的linux kernel版本为2.6.36 (并且华为EM770W驱动,是由FriendlyARM公司定制的. 所以 ...

  5. 0 【Ubuntu/Linux】Ubuntu18.04有线连接图标不见(Linux系统安装2.5G有线网卡驱动,亲测避坑)

    前言 本人电脑安装的是windows10+Ubuntu18.04双系统,不是Linux虚拟机!!!!(虚拟机的网络问题需要看别的文章了) 本人的电脑是微星B560M MOTAR主板,该主板的网卡是2. ...

  6. linux网卡驱动离线安装_新装Linux系统没有网卡驱动的解决办法和步骤

    刚安装的linux系统没有网卡驱动,下面给出我的解决方法: (机器系统是RHEL5.3) 首先说明几个命令: #lsmod --显示已载入系统的模块. 执行lsmod指令,会列出所有已载入系统的模块. ...

  7. win10下安装华为Atals USB虚拟网卡驱动

    1. 用USB连接电脑和HUAWEI Atlas 200 进入设备管理器,查看设备驱动安装情况 2. 安装驱动 (1) 在RNDIS上点击右键,选择更新驱动程序 (2) 接下来选择浏览我的电脑以查找驱 ...

  8. 【Linux】ubuntu16.04/18.04安装I219-V有线网卡驱动

    intel219网卡的linux驱动,ubuntu16.04/18.04安装I219-V有线网卡驱动问题解决方法(示例代码) 安装ubuntu16.04/18.04 LTS后无网络连接的解决方法: 1 ...

  9. linux安装网卡驱动make报错,ubuntu12.04 安装有线网卡驱动make时报错

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 ubuntu12.04 安装有线网卡驱动make时报错: make[1]: 正在进入目录 `/usr/src/linux-headers-3.2.0-57 ...

  10. linux网卡驱动离线安装_在linux下安装网卡驱动的方法

    本文告诉你如何在linux系统下安装网卡驱动. 把网卡驱动COPY 到软盘上.在linux 的/tmp下建个空目录,然后再把软盘上的驱动COPY到这个空目录下. 解压缩: #tar zxvf r100 ...

最新文章

  1. static slice是什么呢?
  2. Python 过程式编程与函数式编程
  3. MYSQL数据库字母数字混合字段排序问题
  4. Amazon EMR(Elastic MapReduce):亚马逊Hadoop托管服务运行架构Hadoop云服务之战:微软vs.亚马逊...
  5. research in attraction
  6. 《弗洛伊德及其后继者》读书笔记(part4)--梅兰妮·克莱因与当代克莱因学派理论
  7. 新书《编写可测试的JavaScript代码 》出版,感谢支持
  8. java 窗口线程_Java 窗体与线程问题
  9. 微软以白金会员加入 OpenChain 开源组织
  10. 用Win2003做×××借线
  11. 科大讯飞:5年内 科技会场没机器人端茶倒水就太low了
  12. WPF-使用代码创建Grid行与列,并将控件添加到Grid中的指定行指定列
  13. ARM指令集之乘法指令
  14. [全程动图]解决Offline Explorer崩溃闪退的问题和一些小技巧(如何下载js、100线程下载)
  15. 整合ssh时 犯的愚蠢问题
  16. 停息挂账一定要付首付款吗_什么是停息挂账?停息挂账能解决问题吗?
  17. Linux 系统结构详解
  18. 关于安装mathtype后找不到电脑预装office2016安装路径的问题
  19. 计算机打字失灵,电脑键盘在打字的时候出现按键失灵的原因是什么
  20. 全国计算机等级考试补考时间,全国计算机等级考试可以补考么(全国计算机一级报名时间)...

热门文章

  1. swf播放器air android 版,网极SWF播放器安卓版
  2. 思科网络模拟器7.3.1版本的下载和安装
  3. 杭州初中计算机老师怎么样,杭州中学两位老师,获得浙江省优质课评比一等奖。学生激动留言,这么多年老师还是这么漂亮!...
  4. ORA-00932: 数据类型不一致: 应为 -,但却获得 -
  5. vss服务器状态失败_vss问题解决办法
  6. html5手机端页面布局,移动端H5常见的布局方式有哪些
  7. 从内存池到连接池 老码农眼中的资源池
  8. 常用媒体查询以及手机横竖屏监听
  9. mybatis事务处理
  10. PC端用Itunes备份Iphone时修改备份路径的办法