LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Linux中USB总线提供统一的外设的接口方式框架及数据结构

2023年2月28日 393点热度

随着计算机外围硬件的扩充,各类外围设备使用不同的总线插口,致使计算机外部各类总线繁杂,管理困难,USB总线可以解决这种问题,为此而诞生。USB总线提供统一的外设的插口形式linux数据恢复,而且支持热拔插,便捷了厂商开发设备和用户使用设备。USB(通用串行总线)是由Microsft,Compad,Inter和NEC等推出的外围总线插口,目前已发展到2.0标准最高支持480Mb/s的速度,最多可以支持127个外设。

嵌入式Linux是一款源代码完全免费的新兴操作系统,用户可以用户可以通过网路等其他途径免费获得,并可以任意更改其源代码,这是其他的操作系统做不到的。正是因为这一点linux usb 驱动程序开发,Linux得到了广泛的应用。

1Linux中USB设备驱动程序框架及数据结构

1.1USB的体系结构

USB插口标准支持外部设备和主机之间进行数据传送。在USB结构中主机顶设各种类型外设使用的总线间距。当外设和主机在运行时,USB总线准许使用,设置,添加和拆除外设。

在USB体系结构中一个USB系统可以分成USB设备、USB主机和USB互联3个部份。USB互联是USB设备和USB主机之间进行连接通信的操作,主要包括:

1)总线拓扑结构:UsB主机和USB设备之间的联接形式;

2)数据流模式:描述USB通讯系统数据怎么从形成方传递到使用方;

3)USB调度:USB总线是一个共享联接,对可以使用的连按进行调度以支持同步数据传输,并防止优先级判定的花销。

USB的数学联接是有层次的星型结构,如图1所示。

a.jpg

从图中可以看出USB网桥在一个节点上联接多个设备,每条线段都是点点联接,每位USB网桥在星形的中心。从主机到设备或则USB网桥,或USB网桥到设备都是点点联接。

1.2USB驱动程序的结构

USN总线在技术层面上是十分简单的,它是一个单主方法实现的,主机协程各类不同的外围设备,USB另外一个重要的特点是它只担当设备和主控制器之间通信通道的角色,对所发送的数据没有任何特殊的内容和结构上的要求。

Linux支持两种类型的USB驱动,寄主系统上的驱动程序和设备上的驱动程序。寄主USB驱动程序控制插入其中的USB设备,而USB设备的驱动程序控制设备怎么作为一个USB设备和主机通信。这儿主要讨论设备驱动。

b.jpg

USB的基本通讯的方式基本通过端点的东西。USB端点只能往一个方向传输数据,从主机到设备或从设备到主机。USB端点分别具有不同的传输数据的方法,她们有4种类型,分别是:1)控制端点拿来控制对USB设备不同部份的访问。她们用于配置设备,获取设备信息,获取设备的状态报告,发送命令到设备。它是一种非周期性的可靠的传输。2)中断端点就是设备传输数据时以一个固定的速度来传输少量的数据。这种端点是键盘和USB鼠标所使用的主要传输方法。它一般用于发送数据到USB设备以控制设备,通常不拿来传输大量数据。USB合同保证这种传输有足够的保留带宽来传输数据。3)等时端点同样可以传输大批量的数据,但数据是否抵达没有保障,这种端点用于可以应付数据遗失的情况,这类设备更重视于保持一定的恒定的数据流,实时的数据搜集都使用这类端点。4)批量端点传输大量的数据。这种端点一般比中断端点大的多她们常用于须要确保没有数据遗失的传输设备。USB合同不保证这种传输仍然可以在特定的时间内完成。假如总线上的空间不足以发送整个批量包。它将被分割为多个包进行传输。

linux usb 转串口驱动_linux串口转usb驱动_linux usb 驱动程序开发

当一个USB设备联接到主机时,主机会给这个设备分配一个1~127之间的惟一的设备号同时读取该设备的描述符,该设备描述符是描述设备信息及其属性的数据结构,USB以一种层次化的结构定义设备的描述符,设备描述符给出了USB设备的通常信息,包括对设备及所有设备配置起全程作用的信息,一个USB设备只能有一个设备描述符,配置描述符中的信息与设备特定的配置相关,一个USB设备可以有一个或多个配置描述符,每一个配置描述符又由一个或多个插口描述符组成,插口描述符的信息是与设备驱动程序的开发密切相关,可以一个插口对应一个设备驱动程序也可以多个插口对应一个设备驱动程序,插口描述符由零个或多个端点描述符组成,端点描述符定义了在一个给定的设备里实现的实际寄存器,这种描述符定义了每位寄存器的功能和特定的信息如端点要求的传输类型、传输方向、带宽要求、查询间隔等。另外,还有一个可选的宇符串描述符,它以UNCOND码的格式给出了一些可读的信息,这种信息一般是有关设备生产厂商、设备名设备序列号等,通过这种不同层次的描述符,主机设备驱动程序就可以晓得具体设备的相关信息,进而对设备进行相应控制。

1.3USB驱动程序框架

1.3.1基本数据结构

usb-skel设备使用自定义结构usb_skel记录设备驱动用到的所有描述符,该结构定义如下:

c.jpg

1.3.2驱动程序初始化和注销

同其他所有的Linux设备驱动程序一样,usb-skel驱动使用module_init()宏初始化函数,使用module_exit()宏注销函数。usb-skel驱动的初始化函数usb_skel_init()函数,定义如下:

在USB驱动中调用usb_deregister()函数注销usb-skel设备驱动,函数定义如下:

1.3.3初始化设备

从skel_driver结构可以晓得usb-skel设备的初始化函数是skel_probe()函数,设备初始化主要是侦测设备类型linux usb 驱动程序开发,分配USB设备用到的urb资源,注册USB设备操作函数等。

skel_class结构变量记录了usb-skel设备信息,定义如下:

name变量使用%d转义表示一个整型变量,当一个usb-skel类型的设备联接到USB总先后会2根据子设备编号手动设置设备名称。Fops设备操作函数结构变量,定义如下:

g.jpg

linux usb 驱动程序开发_linux串口转usb驱动_linux usb 转串口驱动

1.3.4设备注销

skel_disconnect()函数在注销设备时被调用,定义如下:

2USB并口驱动

2.1驱动初始化函数

usb_serial_init()函数是一个典型的USB设备驱动初始化函数,定义如下:

i.jpg

j.jpg

函数首先调用alloc_tty_driver()函数分配一个并口驱动描述符;之后设置并口驱动的属性linux中文乱码,包括驱动的主从设备号、设备类型、串口初始化参数等;并口驱动描述符设置完毕后,调用usb_register()函数注册USB并口设备。

2.2驱动释放函数

k.jpg

2.3并口操作函数

USB并口设备驱动使用了一个tty_operations类型的结构,该结构包含了并口的所有操作,定义如下:

l.jpg

按上述的步骤和方式通过lnsmod命令成功实现了USB驱动程序的加载,成功的通过USB并口进行了数据的读写。

3推论

新出的Linux2.6内核加入了对USB2.0的支持,重新定义了usb_class_driver结构体。同时对侦测函数probe和usb_submit_urb做了更改,包含了advancedlinuxsoundArchiecture可以更安全的使用USB设备。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: linux系统 usb接口 串口 初始化 外设
最后更新:2023年2月28日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux操作系统不仅仅端口-u:仅显示监听套接字(protocol) (知识点)Linux文件权限详解:执行权限 VMware过期Linux系统CentOS7下载安装1.77下载地址 红旗linux操作系统v11.0-红旗操作系统操作系统吗? 5yw红软基地驱动完美支持windows、mac、linux系统 轻松安装ZeroMQ:Ubuntu系统必备的解决方案 怎么在Win7系统虚拟机上安装LinuxUbuntu的技巧?在这里 Linux必备!安装RAR解压器,轻松解压文件! 虚拟机linux系统下载 什么是linuxLinux(/托瓦兹)的Linux内核 文件永久删除还能找回来吗?关于Win和Mac系统的恢复方法 Ubuntu16.04怎样安装系统更新和应用更新16.04 网卡 centos 启动 Linux选择选择时各企业所参考的依据:以下内容和Centos Linux内核内存检测工具系列中的一篇,配置以及典型应用 虚拟机安装Ubuntu操作系统-Ubuntu空间20G镜像下载 0渗透操作0x02绕过disable_functions插件(组图) 【好玩的网络-第2.5期】分配IP有哪些骚操作?小白保姆级教程 Windows远程连接工具、Ubuntu系统的安装软件及系统 Linux一模一样远程连接编辑的操作图是什么? DRAM中的虚拟地址空间的缓存简化内存管理(组图) 2.5创建和配置虚拟机2.5.1创建虚拟机双击桌面的VMwarePlayer
Linux文件路径查询方法,轻松获取文件位置Linux移植6410:从零开始的挑战!linux php安装 快速掌握Linux下PHP安装,轻松入门流行技术linux patch 文件 解决LinuxPatch文件10大疑难杂症,轻松应对!Ubuntu系统更改IP地址的简易教程,跟随以下步骤即可搞定!高效搭建Linux Android开发环境,轻松提升开发体验轻松掌握:如何查询Linux内核版本?Linux安装Matlab指南,快速掌握安装步骤Ubuntu 16安装网卡驱动教程,轻松解决网络连接问题Linux启动时,不使用图形界面可能更有效率!移植Linux,手机变身“大杀器”!详解8大关键操作Linux更高效,掌握启动终端快捷键!纯Python库实现上面介绍的HTML转换为PDF的软件Fedora 13服务器配置指南:9个实用技巧全解析9种方法轻松获取Linux版本,快速掌握系统信息!博客韦东山freeRTOS系列教程:入门文档教程+进阶视频教程轻松掌握linux ldd命令的技巧,成为高效开发者与管理员Linux VPS安全检测,保障服务器稳定运行!Linux下高效开发必备:配置Tomcat和JDK分析Linux中的I2C驱动程序框架核心结构(i2c-bus结构)
Linux内核使用全局变量jiffies来记录系统的优点和缺点? 解决ssh连接提示(A,突然连不了了) Linux系统安装XWindows图形界面的特殊场景及安装方法 Linux运维工程师良好的习惯及解决方法(二) 一段程序是告诉计算机应该如何完成一个任务的程序 9种方法轻松获取Linux版本,快速掌握系统信息! 关闭虚拟机的防火墙:验证进程(上) 【写在前面】C/C++内存的价值是什么都不知道 Ubuntu和其他Linux中安装最新的LibreOffice版本的快速指南 小白在阿里云云服务器上如何发布自己的网站(建站|详细) 【报错日志】一下升级linux内核的启动顺序为0 Linux系统的修改权限与默认权限的分类及处理方法 英特尔9月启动Linux补丁征集活动:采用大小核设计 DRAM中的虚拟地址空间的缓存简化内存管理(组图) php入门到就业线上直播课:linux同步时间的设置 Ubuntu和其他Linux中安装最新的LibreOffice版本的快速指南 《Linux基础知识》命令文件操作相关命令操作命令 linux如何用u盘安装系统教程?(linux) LinuxKernel操作系统,,内存管理模块异常和中断管理进程 IT之家UbuntuKylin14.1014.10壁纸预览(附下载地址)
标签聚合
命令模式 虚拟机 linux服务器 sudo 电脑 linux脚本 linux系统 文件目录 命令 软件
书籍
课程
技术群
技术干货大合集↓
  • 2023年3月 / 114篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.