linux下usb网络连接网络打印机驱动下载,基于USB设备的Linux网络驱动程序开发

news/2024/10/22 12:26:50/

1 引言

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

2. Linux体系结构

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

ea54a61bdd074b3adfb8a2ca77a7f58e.png

图1

826674b79a3c610d83f74ca7deda0f4b.png

图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所示。


http://www.ppmy.cn/news/373525.html

相关文章

Ubuntu16.04.7+Qt15.5.0环境配置(一条龙讲解)

目录 1、下载并安装Ubuntu 2、Qt下载与安装 3、Qt环境配置 4、设置编译套件 5、创建qt快速启动脚本 1、下载并安装Ubuntu Ubuntu16.04.7下载链接https://releases.ubuntu.com/xenial/ 安装步骤省略。 2、Qt下载与安装 在Qt5.15之后的版本,官方都不提供离线安装…

联想电脑预装Mcafee(迈克菲)踩坑

联想和Mcafee(迈克菲)合作,电脑预装了联想杀毒(其实就是Mcafee),这不仅很占用资源,而且会使一些不可描述的资源无法使用。 例如,我在使用【某软件】的时候打开会报错: 系…

迈克菲软件引起系统无法响应的解决方法

最近有台某硕新电脑,原厂自带迈克菲软件。用了1天后,该软件提示更新,并且需要重启电脑。于是,就点了重启。。。。 点了之后,系统就进入了一个无法响应的状态,所有软件打不开,只有开机后的前几十…

联想自带迈克菲更新后死机、无响应

如题,最近开机每次都看到迈克菲提示更新,然后就随手点了更新并重启。谁知道会出这么多事,折腾了大半天。 迈克菲是一个杀毒软件,联想出厂自带滴。就是下面这个图标 更新重启后就死机了,只有刚开机动两下有反应&#x…

迈克菲无法更新您的软件。

更新问题 迈克菲无法更新您的软件。请检查您的Internet连接,然后尝试手动更新您的软件。如果此问题仍存在,请重新安装此软件: 联想杀毒Plus 如果仍遇到更新问题,请与迈克菲支持人员联系。请记住,更新使您的PC持续受到保护并使迈克菲产品正常工…

迈克菲添加白名单

迈克菲是一款非常强力的杀毒软件,我们日常使用许多程序,包括破解、梯子等可能被迈克菲实时检测并阻止运行。而迈克菲提供白名单功能,可以为我们使用一些敏感的软件提供方便。下面是具体操作步骤: 1、在主页 打开实时扫描窗口 点…

记录如何卸载迈克菲

朋友电脑突然变得巨卡,开机要很久,登陆后电脑黑屏只显示鼠标 查明原因是迈克菲cpu占用居高不下 使用官方卸载软件MCPR, 才卸载掉https://download.mcafee.com/molbin/iss-loc/SupportTools/MCPR/MCPR.exehttps://download.mcafee.com/molbin/iss-loc/S…