LinuxGod

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

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

2023年2月28日 306点热度

随着计算机外围硬件的扩充,各类外围设备使用不同的总线插口,致使计算机外部各类总线繁杂,管理困难,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大神网

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

最新 热点 随机
最新 热点 随机
如何安装便携式WiFi驱动程序?360wifi驱动的教程 CentOS云服务器搭建网站和CentOS搭建DNS解析服务 如何在linux上创建一个用户,减少不必要的沟通成本 如何在Linux系统中查看CPU信息使用lscpu命令行 linux服务器搭建ftp的6下安装vsftpd步骤及步骤 贵州工业职业技术学院求职意向期望工作地--诚聘英才 实验1Linux安装实验掌握虚拟机的使用 Linux系统tar命令的使用方法及使用命令教程 linux 开源nas系统 杰和科技NAS服务器媒体见面会在京召开 Android与Linux开发大不同 Linux系统软件安装包:自己动手,安装不用愁 车市新战局:汽车操作系统会复制智能手机的历史吗? Linux文件系统种类 如何卸载用源码包安装的软件?在线视频教程推荐 「职位」ASP.、PHP、Linux服务器集群开发 Torvalds:Linux内核开发的创新前景充满了热情 Linux文件系统的结构从终端窗口探索Linux目录树结构 卸载软件命令Linux.You linux软件开发如何入门?学习Linux步骤及学习方法介绍 14年Linux发行版的有趣历史观点
嵌入式Linux操作系统学习规划+LINUX路线,主攻江苏电信天翼校园客户端故障指引及解决办法(101)英特尔GMAGMA950显卡驱动程序/WIN8/8.1电信校园网宽带用USB数据线共享给电脑无线上网国防科大开源操作系统:它只是一个吉祥的象征10个常用Linux文本查看命令及其详细说明和使用示例Linux嵌入式系统内核裁剪与定制方法的介绍情况淘宝教育热卖C语言编程开发C++程序设计零基础入门课程从CPU、内存、硬盘、显卡等这些方面安装Linux系统的最低配置Linux通过chkconfig设置开机启动服务创建的几种常见方式(技术分析)Linux多线程的使用与操作系统的区别通常rar命令由一个主命令加若干选项(可选)构成RedHatLinux中自动运行程序中的应用linux 读写文件 关于Linux内核的神秘面纱,你知道几个?使用wget实用程序的有用命令行工具的使用怎么设置linux开机项自启动?方式是怎样的?嵌入式Linux应用层与驱动层要想学习关于Linux内核的交叉编译步骤和方法:步骤、方法STM32嵌入式linux开发流程及应用程序分析-STMlinux下有哪些文件在介绍lsof命令实用用法介绍?
Linux内核源代码的结构分布图-子目录模块 2018年波及众多Linux发行版的性能对比会更加深入 服务器上安装linux系统的具体操作过程-如何选择系统? Linux强烈建议采用自定义的系统服务实现开机启动程序的脚本方法 如何在Linux上设置PYTHONPATH环境变量设置环境变量? Linux初级Linux系统目录结构目录操作命令命令汇总 linuxshell数据重定向(输入重与输出)详细分析 Linux档案的权限和详细说明与群组的详细介绍 2020年最佳Android模拟器的精选清单,你值得拥有 Linux系统内核的高效和稳定已在各个领域内得到大量事实验证 在单片机与嵌入式linux的应用与驱动操作(组图) Linux系统下如何搭建SVN服务器,详细说明各配置项的功能 【干货】Linux下的线程是什么?(二) Linux系统进程与文件相关的信息 系统更新,Linux与Windows同步 Linux中如何复制和重命名文件的用法和示例示例 Oracle10G数据库系统备份数据的备份时间与系统时间的关系 (用户管理实践)创建用户密码实践总结 第一部分ARMLinux内核——分析内核前需要做的准备 1.使用标准Ubuntu仓库进行自动安装2.使用官方的NVIDIA驱动
标签聚合
文件 linux服务器 linux系统 应用 虚拟机 软件 内核 操作 命令 文件目录
书籍
课程
技术群
技术干货大合集↓
  • 2023年9月 / 81篇
  • 2023年8月 / 93篇
  • 2023年7月 / 94篇
  • 2023年6月 / 90篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 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.