1 引言

做为开放源代码 (open source) 运动重要组成部分,linux操作系统吸引了数以万计的程序员共同开发。由于linux比较完整的继承了各种unix版本的稳定和高效,并且克服和改进了传统unix中的很多缺点,更因为其开放的开发模式,linux成为一个具有强大网络服务功能的操作系统。它支持主流的tcp/ip以及ipx/spx、 netbeui等众多网络协议,无论在嵌入式系统,服务器还是桌面操作系统领域,linux都取得了广泛的应用。网络驱动程序和网络硬件设备实现网络协议栈中的数据链路层和物理层,对上层协议提供支持,是网络协议栈的重要组成部分,对linux的网络性能起着决定作用。本文主要讨论基于usb总线的 linux网络驱动程序的设计和实现方法。

2.   linux体系结构

出于稳定性和安全性的考虑,现代处理器往往具有至少两个运行级别。权限较低的级别无法访问所有的寄存器,不能对硬件直接操作。而权限较高的级别能够进行所有的硬件操作和访问任何系统资源。linux设计充分利用了现代处理器的上述特性,其内核部分运行于高权限级别,应用程序运行于低权限级别。作为宏内核结构的操作系统,linux将进程管理、内存管理、网络协议栈、设备驱动和文件系统等服务都集成在内核中,而应用程序则通过系统调用与内核通讯,内核结构如图1所示。

图1

图2

linux网络子系统基本可以分为系统调用接口、bsd套接字、inet套接字、tcp/ip以及数据链路层。其中,bsd套接字由inet套接字层提供支持,而inet套接字管理着基于ip的tcp或udp协议端,实现ip分组排序以及控制网络子系统效率等功能。各种网络驱动程序位于ip层之下,它们具有访问硬件设备的能力,实现数据链路层的功能。网络子系统的结构如图2所示。

3.   linux网络驱动程序结构

一个完整的驱动程序是一组回调(callback)函数的集合。内核根据用户或自身的需要来调用驱动程序提供的函数指针,将控制或数据请求交给相应的驱动程序。驱动程序负责了解相应硬件设备的访问和控制方式,将内核的请求翻译成设备可以理解的操作。这样的层次结构使得内核不必了解硬件设备的访问机制和细节,驱动程序也无需明白内核的控制策略,大大提高了驱动程序的兼容性,同时也方便了程序的调试。根据驱动程序类型的不同,内核要求驱动程序提供的回调函数也不同。

linux下的ethernet驱动程序需要注册的回调函数分为“必要”和“可选”两类。“必要”的回调函数是指一个ethernet驱动程序正常工作所需要的回调函数最小集合,而“可选”的回调函数则是在“必要”的基础上提供更丰富的特性和功能。“必要”的回调函数如表1所示。

函数名称

功能

open

打开网络接口;将硬件设备配置为正常工作状态。

stop

关闭网络接口;停止硬件设备工作,释放打开该接口时分配的系统资源。

tx_timeout

当上层协议认为某个数据包发送超时的时候调用;该函数应该解决数据包发送超时问题,并保证函数返回以后,数据包能够正常发送。

hard_start_xmit

由上层协议在希望发送数据包时调用;将来自上层协议的数据包转换为硬件设备能够处理的格式,发送至硬件设备。

get_stats

当上层希望了解驱动程序控制的网络设备的统计信息的时候被调用。

hard_header

根据网络子系统先前地址解析的结果,构造数据包的硬件包头。

rebuild_header

在arp解析完成之后,由上层协议在发送任何新数据包之间调用,重新构造硬件包头。

set_config

改变网络接口的配置,例如中断号和i/o地址等。

表1

为了方便ethernet驱动程序的设计,linux内核为hard_header、rebuild_header和set_config提供了通用的回调函数。如果对硬件包头或设备配置没有特殊的要求,通用的回调函数就能够满足网络子系统的要求。

4.   基于usb总线的linux网络驱动程序设计

4.1 usb设备的访问和控制

与pci、isa等设备不同,usb、1394等新一代总线没有io/mem映射、中断和dma硬件资源。取而代之的,是抽象出来的硬件资源概念。对于usb设备来说,资源主要包括配置(configuration)、接口(interface)和端点(endpoint)。三者之间的关系如图3所示。

linux usbnet网络驱动,[技术资料]基于usb设备的linux网络驱动程序开发相关推荐

  1. 基于Linux操作系统的底层驱动技术

    5.3 基于Linux操作系统的底层驱动技术 这里的底层驱动是指Linux下的底层设备驱动,这些驱动通常都是加载在内核态的,可以提供给上层用户态的应用程序访问底层设备的能力.也就是说,上层应用程序通过 ...

  2. WinUSB - 微软为所有 USB 设备提供的常规驱动程序

    WinUSB - 微软为所有 USB 设备提供的常规驱动程序  [复制链接]     shangdawei 20 主题 0 好友 717 积分 高级会员 莫元 696 发消息 电梯直达 1楼  发表于 ...

  3. linux 设备驱动程序 过滤,Linux驱动发开,usb设备的probe全过程

    本文将详细讲述2.6.22 下的一个USB 设备插上linux 系统的PC 后是如何一步一步调到我们的usb 设备驱动的probe 函数的,我们知道我们的USB 驱动的probe 函数中的一个参数是i ...

  4. linux gianfar 网口驱动源码,基于MPC8313ERDB平台的Marvell88E1111型网卡驱动移植(uboot+kernel)...

    最近一个月挣扎于千兆网的设备驱动移植,现在终于弄出来了,虽然有点累但是收获还是挺多的. 进入主题前,首先要感谢网友gorilla0123,他的博客给了我很多启发,在此非常感谢.我建议做网卡驱动这方面的 ...

  5. linux图形图像驱动,Linux_Linux操作系统下USB图像采集驱动的安装,ARMlinux下USB摄像头图像的采集 - phpStudy...

    Linux操作系统下USB图像采集驱动的安装 ARMlinux下USB摄像头图像的采集很难,往往望而却步.相比较LINUX系统下的摄像头驱动的安装简单的多,下面就介绍我的安装过程. 我使用的linux ...

  6. 基于python的网络爬虫技术_基于python的网络爬虫技术的研究

    龙源期刊网 http://www.qikan.com.cn 基于 python 的网络爬虫技术的研究 作者:刘文辉 李丽

  7. linux usb驱动 probe,linux USB设备驱动之2:usb设备的probe全过程

    本文将详细讲述2.6.22下的一个USB设备插上linux系统的PC后是如何一步一步调到我们的usb设备驱动的probe函数的,我们知道我们的USB驱动的probe函数中的一个参数是interface ...

  8. 网络透视技术资料及学习笔记

    面试被问网络透视技术,完全不知道是什么,于是找一下资料看看. http://wenku.baidu.com/link?url=D1tRCI3AT1Rra9xoHZpbcSu2Q6Pdfaa1PPlJ9 ...

  9. linux不同内核驱动移植问题,基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)...

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

最新文章

  1. 12月22日 find命令
  2. java弱引用弱点_终于有人把Java强、软、弱、虚四种引用知识点整理出来了
  3. BNUOJ 4064 条形码设计 (动态规划 + 递推)
  4. 趣学python3(10)-函数注释方法
  5. mysql客户端版本太低_windows一机多装mysql,5.5低版本+5.8高版本
  6. 写代码的注意了,User这个单词用不得
  7. 软件测试人员必备的linux命令
  8. php代码输出sql语句,教你在Laravel中轻松容易的输出完整的SQL语句
  9. printf 小函数 大问题-转
  10. windows下DOS命令杀掉Nginx应用进程
  11. CentOS7 搭建samba服务
  12. linux 实验 广技师 进程管理与系统监视,实验9 linux进程管理与系统监视.doc
  13. 计算机的毕设课题,计算机毕设课题大全.pdf
  14. 树莓派开发笔记(十):Qt读取ADC模拟量电压(ADS1115读取电压模拟量)
  15. 如何将PPT制成二维码?
  16. 【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解
  17. 视频:青春期(青春痘1)
  18. tomcat html位置,HTML的Tomcat
  19. mplfinance 一个堪称完美python量化金融可视化工具详析
  20. 区块链的典型应用场景与落地应用案例

热门文章

  1. Android Shell脚本编辑运行
  2. Element Plus 实例详解(一)___安装设置
  3. 演员用计算机的词谱是什么,你算啥曲谱_计算器歌曲谱薛之谦-绅士
  4. wps流程图直线上怎么填字_简单三步,用WPS轻松完成一个又大气又好看的流程图!...
  5. 华为手环6鸿蒙,华为手环6新品曝光 支持连续血氧监测96种运动模式
  6. Android 文字和图片混排,文字环绕图片
  7. C++的string类型中关于append函数、push_back函数和+=运算符的区别
  8. PPI Forex:黄金期货周二上涨1%,美元指数跌至六周低点
  9. 华为手机安装NM卡无法识别
  10. 大型开放式网络课程MOOC的一点体会