linux-USB通信技术-u通信-深度解析Linux-从驱动到协议全面了解 (linux系统)

教程大全 2025-07-16 14:55:24 浏览

USB(Universal Serial Bus)是一种数据传输协议,它被设计用于连接计算机和外部设备。USB通信技术已经成为现代计算机系统的重要组成部分,特别是在嵌入式系统中具有广泛应用。在Linux系统中,USB通信技术也是一个非常重要的话题,本文将从驱动到协议全面剖析Linux系统下的USB通信技术。

一、USB通信概述

USB通信是计算机主机与外部设备之间的数据传输方式,它的特点是简单、可靠、高速、灵活、通用。USB是一种热插拔设备接口,可以连接多种不同的设备。USB设备使用一根数据线和一根供电线(或者使用HUB进行供电),该数据线可同时承载数据和供电信号。

二、USB系统架构

在Linux系统中,USB通信是由USB内核模块和一系列驱动程序组成的。USB系统由以下四个层次组成:

1.物理层:主要定义了USB数据线的电气特性和连接方式。

2.数据链路层:定义了USB数据包的格式和传输方式,并包括一个用于处理帧的CRC校验。

3.USB驱动层:负责实现USB与Linux系统的交互,并提供了一些常用的API函数。

4.USB子系统:维护着USB设备树,包括对设备的发现、枚举、分配地址、管理管道和请求等工作。

三、USB驱动开发

在Linux系统中,驱动程序是USB通信的核心部分。USB驱动的开发需要遵循以下步骤:

1.定义设备结构:USB驱动程序需要定义一个结构,该结构包含与硬件相关的信息。在Linux系统中,通常使用u_device结构体来表示一个USB设备。

2.注册驱动程序:驱动程序需要向系统注册,以便系统能够检测到设备的插入和拔出事件,并加载相应的驱动程序。

3.启动设备:驱动程序在设备被检测到时会被自动加载,此时需要执行一些初始化操作,包括打开设备、分配内存、初始化管道等。

4.实现读写函数:驱动程序需要实现读写函数,用于完成数据的传输。在Linux系统中,通常使用read、write、ioctl等标准函数来实现这些功能。

5.释放设备:当设备不再需要时,驱动程序需要释放设备,并清理内存资源。

四、USB协议

USB协议定义了USB设备和主机之间的通信方式。USB协议包括以下方面:

1.设备描述符:USB设备在连接到主机时,需要通过设备描述符向主机描述设备的功能、厂家等相关信息,以便主机正确识别设备。

2.控制传输:主机通过控制传输向设备发送控制命令,如读写设备寄存器等。

3.中断传输:用于处理不需要连续传输数据的设备。

4.批量传输:用于处理大量数据的传输,可以使用控制传输来读写数据块。

5.异步传输:可以用于流媒体数据传输等。

五、USB调试工具

在开发USB驱动时,有时我们需要对USB设备进行调试,Linux系统提供了一些方便开发人员调试的USB工具,如:

1.lsu:用于查看USB设备的详细信息。

2.cat /proc/bus/u/devices:用于查看系统中已经连接的USB设备树。

3.umon:用于监控USB设备和主机之间的通信数据。

4.Udevmonitor:用于监控USB设备树的变化。

USB通信技术是计算机系统中非常重要的一部分,Linux系统下的USB技术也是开发人员需要掌握的技能。本文从驱动到协议全面阐述了Linux下的USB通信技术,并介绍了常用的USB调试工具,希望对开发人员对于深入理解USB通信技术有所帮助。

相关问题拓展阅读:

Linux 应用层怎么对USB设备发送URB请求

uhid和umouse.c都在/usr/src/linux/drivers/hid/uhid目录下

USB 总线引出两个重要的链表!

一个 USB 总线引出两个重要的链表,一个为

USB 设备链表,一个为 USB 驱动链表。设备链表包含各种系统中的USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(u

device driver)和 USB 驱动程序(u driver)。

USB 设备驱动程序(u device driver)和 USB 驱动程序(u driver)的区别是什么?

USB 设备驱动程序包含 USB 设备的一些通用特性,将与所有 USB 设备相匹配。在 USB core 定义了:struct u_device_driver u_generic_driver。u_generic_driver 是 USB 子系统中唯一的一个设备驱动程序对象。而 USB 驱动程序则是与接口相匹配,接口是一个完成特定功能的端点的。

设备是如何添加到设备链表上去的?

在设备插入 USB 控制器之后,USB core 即会将设备在系统中注册,添加到 USB 设备链表上去。

USB 设备驱动程序(u device driver)是如何添加到驱动链表上去的?

在系统启动注册 USB core 时,USB 设备驱动程序即将被注册,也就添加到驱动链表上去了。

接口是如何添加到设备链表上去的?

在 USB 设备驱动程序和 USB 设备的匹配之后,USB core 会对设备进行配置,分析设备的结构之后会将设备所有接口都添加到设备链表上去。比如鼠标设备中有一个接口,USB core 对鼠标设备配置后,会将这个接口添加到设备链表上去。

USB 驱动程序(u driver)是如何添加到驱动链表上去的?

在每个陆谨芹 USB 驱动程序的被注册时,USB 驱动程序即会添加到驱动链表上去。

比如鼠标驱动程序,u_mouse_init 函数将通过 u_register(&u_mouse_driver)

将晌族鼠标驱动程序注册到 USB core 中,然后就添加到驱动链表中去了。其中 u_mouse_driver 是描述鼠标驱动程序的结构体。

已配置状态(configured status)之后话

当鼠标的设备、接口都添加到设备链表,并且鼠标驱动程序也添加到驱动链表上去了,

系统就进入一种叫做已配置(configured)的状态。

要达到已配置状态,将经历复杂的过程,USB core 为 USB

设备奉献着无怨无悔。在这个过程中,系统将会建立起该设备的的设备、配置、接口、设置、端点的描述信息,它们分别被

u_device、u_configuration、u_interface、u_host_interface、

u_host_endpoint 结构体描述。

设备达到已配置状态后,首先当然就要进行 USB 驱动程序和相应接口的配对,对于鼠标设备来说则是鼠标驱动程序和鼠标中的接口的配对。USB core 会调用u_bus 总线的u_device_match

函数,通过比较设备中的接口信息和 USB 驱动程序中的 id_table,来初步决定该 USB 驱动程序是不是早毕跟相应接口相匹配。通过这一道关卡后,USB core 会认为这个设备应该由这个驱动程序负责。

然而,仅仅这一步是不够的,接着,将会调用 USB 驱动程序中的 probe 函数对相应接口进行进一步检查。如果该驱动程序确实适合设备接口,对设备做一些初始化工作,分配 urb 准备数据传输。

当 鼠标设备在用户空间打开时,

将提交 probe 函数构建的 urb 请求块,urb 将开始为传送数据而忙碌了。urb 请求块就像一个装东西的“袋子”,USB

驱动程序把“空袋子”提交给 USB core,然后再交给主控制器,主控制器把数据放入这个“袋子”后再将装满数据的“袋子”通过 USB core

交还给

USB 驱动程序,这样一次数据传输就完成了。

如何在linux下读写u设备的数据

Linux不直接支持NTFS文件系统,如果U盘是NTFS文件系统就无法直接挂载使用。首先用llk列出所有块设备:

sd表示SCSI磁盘,后面跟a,b,c之类的字母表示第几个磁盘,字母之后再跟数茄档则字表示这个磁盘的第几个分区。大部分人只有一个硬盘,此时再接一个U盘,这个U盘就是sdb,U盘上的分区就是sdb1。除此以外,还可以根据显示的容量判断U盘设备名是sdb还是sdc。其他情况以此类推。

然后可以在用户目录创建一个u目录:(也可以根蠢袭据喜好设置在其他地方,下面的挂载地址跟着改变即可)

最后把U盘分区挂载到这个目录即可:(可能会提示输入密码,输入密码后回车即可)

sudo mount /dev/sdb1 ~/u1

然后就可以通过访问 ~/u1目录来访问U盘:

最后要拔出U盘以前,要卸载U盘:(卸载时要退出u1目录,不然无法卸载)(可能会提示输入密码,输入密码后颤棚回车即可)

关于linux u通信的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

从驱动到协议全面了解

香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。


联通的业务怎么老是没移动的好?

企业实力太差,没办法的其实当年的CDMA网络就比GSM更先进,但被联通搞成了惨淡经营,最后给了电信。 现在的3G市场,本来WCDMA是产业链最丰富的网络,但交给了联通,前景堪忧,从目前的运营能力和服务能力来说,虽然TD是国产技术,存在很多不足,但凭借移动强大的实力和国家的支持,仍然是最值得选择的,而电信的CDMA2000部署最快,目前覆盖最好,而最不值得选择的仍然是联通。

linux下U盘怎么使用

本文为转载文章方案一:Linux不像Windows一样,接上新硬件后可以自动识别,在Linux下无法自动识别新硬件的,需要手动去识别。 USB移动存储设备通常被识别为sda1,具体可以通过fdisk -l命令查询。 在使用U盘前,我们先要为外挂点新建一个子目录,一般外挂点的子目录都是建立在/mnt里面的,我们也建在那里,当然也可以建在/目录下,名字可以自己定,我们就取名为usb,终端下的命令如下:mkdir /mnt/usb然后我们就可以接上我的U盘了,然后在终端下输入命令并击Enter键即可:mount /dev/sda1 /mnt/usb在Windows下当我们用完U盘后,在我们取下U盘前我们先要删除,同样在Linux下我们也要删除挂起点,方法是:umount /dev/sda1 /mnt/usb 或 umount /dev/sda1如果不把U盘给umount掉,那样很容易造成数据的丢失方案二:USB的支持关键在于驱动,没有驱动设备时mount执行是肯定不成的。 我在Red Hat里使用U盘的通用方法如下,屡试不爽1. 先别插U盘,/sbin/lsmod看是否有usb-storage。 如果没有的话:cd /lib/modules/2.4.20-8/kernel/drivers/usbfor v in *.o storage/*.o ; do /sbin/insmod $v ; done2. 这里再/sbin/lsmod,应该有usbcore、usb-ohci(或usb-uhci,根据主板芯片组而不同)、usb-storage、scsi_mod等。 其中usb-storage的状态应该为(unused)。 3. 插入U盘,不停的/sbin/lsmod,这期间usb-storage的状态应为Initializing,持续时间大约半分钟,其实就相当于Windows在右下角不停的弹汽球:)4. 初始化结束后, /sbin/fdisk -l,应该能看到/dev/sda1设备。 这时,执行mount /dev/sda1 /mnt/udisk 才能成功。 如果是MSDOS格式,又想看到中文,可以mount -t vfat /dev/sda1 /mnt/udisk -o iocharset=gb2312。 (为方便可以/etc/fstab加一行,以后就可以 mount /mnt/udisk就行了)。 5. 奇怪的是有时候fdisk是看不到sda1,但是也能mount上使用以上步骤挂U盘基本上可说是“万全”了。 台式机、笔记本、VMware都一样。 mkdir /mnt/usbmount /dev/sda1 /mnt/usb笔记本上安装linux用法和台式机一样ps:首先要检查lsmod|grep usb-storage 这是支持USB的模块。 如果没有的话,是无法操作USB接口的设备的。 如没有的话,可以手功modprobe usb-storage,一般查看U盘可以用fdisk -l可以很清楚的看到这个硬件的设备名,比猜测硬件名要准确多了

linux系统中怎么驱动u盘?

现在很多人再买到服务器之后要装linux系统,但是没有linux环境,无法按照上边的步骤来把驱动写到U盘上去,经测试发现可以用redhat的第一张盘来创造这样一个linux环境,假设现在要加载的驱动为LSI sas raid卡的驱动步骤如下:1、先在windows环境中把驱动拷贝到U盘上去,2、用redhat的第一张盘引导,当出现提示你是否加载hard driver时,选择skip,这是OS没有检测到硬盘的提示,此时就可以skip,接着就要加载图形化界面了,这时候我们就可以按ctrL+ALT+F2切换到控制台了,(有一点补充,硬盘的驱动是在出现图形化界面之前就已经加载了,对于这个问题我还请了前辈一瓶水,我们可以在出现控制台后切换到F3,F4就可以看到内核和安装的详细过程)3、在内存中建两个目录mkdir /a /b4、mount /dev/sda1 /a5、cp /a/megaraid_ /b6、umount /a7、dd if=/b/megaraid_ of=/dev/sda8、再次启动服务器,当出现boot之后输入linux dd,然后按照提示选择从/dev/sda中添加驱动,就会找到硬盘(如果出现多个sdx设备,可以按CTRL+ALT+F4来看到底你的U盘是哪个设备)

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐