在 Linux Kernel ch9.h 文件中用 enum usb_device_state 来标记这几种状态。...其中struct usb_gadget是用来标记一个USB设备的信息。此时USB设备的状态就可以确定了。...在USB的枚举阶段,会根据USB所处的状态调用usb_gadget_set_state()去设置USB设备的状态。...比如说在USB设备的枚举阶段,在composite_setup()函数中USB设备接收到了USB Host发过来的USB_REQ_SET_CONFIGURATION命令后调用set_config()设置相应的配置...,这之后就会调用usb_gadget_set_state()去设置为USB_STATE_CONFIGURED状态。
Linux 内核源码:include\linux\usb.h Linux 内核源码:drivers\hid\usbhid\usbmouse.c 1....BUS/DEV/DRV 模型 "USB 接口"是逻辑上的 USB 设备,编写的 usb_driver 驱动程序,支持的是"USB 接口": USB 控制器或 Hub 识别出 USB 设备后,会创建、...注册 usb_device usb_device 被"drivers\usb\core\generic.c" 驱动认领后,会选择、设置某个配置 这个配置下面的接口,都会分配、设置、注册一个 usb_interface...接口函数 在 USB 设备驱动程序中,能使用的 USB 函数都在这个头文件里:include\linux\usb.h。...); 如果 URB 使用 DMA Buffer,那么还需要设置一个 flag 表明这点: urb->transfer_dma = DMA address of buffer; // usb_alloc_coherent
通过扫描以下目录获取物理节点所有 USB 设备: /sys/bus/usb/devices/usb* /sys/bus/usb/devices/usb*/$busnum-* 从该文件系统收集某一个设备的主要信息如下...(该总线的第几台设备) speed: 速率 bDeviceClass: 设备类型 idVendor: 设备的生产商ID,由USB设备生产商向USB-IF官方来统一管理和申请 idProduct: 该生产商生产的产品编号...# 定位某一个 USB 设备的方法有两种: busnum + devnum idVendor + idProduct 设备类型bDeviceClass# 类代码 用法 描述 00h 设备描述符 Use...参考文献# USB设备类bDeviceClass、bDeviceSubClass、bDeviceProtocol By USB 中文网 USB设备描述符中的idVendor、idProduct和bcdDevice...By USB 中文网 USB 硬件设备的序列号 By IBM 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
Linux3.11版本引入了基于configfs的usb gadget configfs。...初始化复合设备数据结构usb_composite_dev,设置USB设备描述符。...; // 支持USB3.0 /* 初始化复合设备-usb_composite_dev */ composite_init_dev(&gi->cdev); /* 设置复合设备描述符 */ gi...(gadget_strings, gadget_info); [include/linux/usb/gadget_configfs.h] #define USB_CONFIG_STRINGS_LANG(...主要的工作流程为: 分配一个config_usb_cfg1结构体,该结构体包含了usb_configuration结构体,保存了该USB设备的配置信息。 设置USB设备的配置描述符的某些选项。
为了消除这种可能性,机构会限制和监测访问互联网,同时禁用 USB 存储设备。 在本教程中,我们将讨论三种不同的方法来禁用 Linux 机器上的 USB 存储设备。...方法 2:删除 USB 驱动 这种方法要求我们将 USB 存储的驱动程序(usb_storage.ko)删掉或者移走,从而达到无法再访问 USB 存储设备的目的。...执行下面命令可以将驱动从它默认的位置移走: $ sudo mv /lib/modules/$(uname -r)/kernel/drivers/usb/storage/usb-storage.ko /home...usb-storage 保存文件并退出。...usb-storage 就在就会被系统阻止加载,但这种方法有一个很大的缺点,即任何特权用户都可以通过执行以下命令来加载 usb-storage 模块, $ sudo modprobe usb-storage
当USB设备插上主机时,主机就通过一系列的动作来对设备进行枚举配置(配置是属于枚举的一个态,态表示暂时的状态),这些态如下: 1、接入态(Attached):设备接入主机后,主机通过检测信号线上的电平变化来发现设备的接入...; 2、供电态(Powered):就是给设备供电,分为设备接入时的默认供电值,配置阶段后的供电值(按数据中要求的最大值,可通过编程设置); 3、缺省态(Default):USB在被配置之前,通过缺省地址...0与主机进行通信; 4、地址态(Address):经过了配置,USB设备被复位后,就可以按主机分配给它的唯一地址来与主机通信,这种状态就是地址态; 5、配置态(Configured):通过各种标准的USB...请求命令来获取设备的各种信息,并对设备的某此信息进行改变或设置; 6、挂起态(Suspended):USB总线处于空闲状态的话,该设备就要自动进入挂起状态,在进入挂起状态后,总的电流功耗不超过280UA...是 是 __ __ __ __ __ __ 是 设备在至少3毫秒以内探测不到总线活动,自动进如挂起.设备功能不可用. 下图为设备状态转化图:
(audio_driver); // 注册audio_driver [include/linux/usb/composite.h] #define module_usb_composite_driver...和USB gadget configfs定义的复合设备驱动初始化流程相似,只是设置的usb_gadget_driver不同。...将audio_driver设置的最大速度设置到composite_driver_template,表明该复合设备支持的最大速度。...分配端点0的usb_request、分配USB请求的缓冲区、设置usb_request的回调函数、复位所有端点,并将gadget的端点数量清零。...如果使用os_string,则需要分配os_string requset、分配USB请求的缓冲区、设置USB请求的回调函数。
最近 VMware 莫名其妙的卡,开机一会就开始卡死了,找了好多办法也不行,暂时先换 VirtualBox,已安装但在使用网银 U 盾等 USB 设备时,无法识别 USB 设备。
2.Gadget Function驱动 Linux内核的USB Gadget Function驱动都在drivers/usb/gadget/function/目录下,有通讯设备类(Communication...*fd) // 从Gadget Function API层获取usb_function_instance struct usb_function_instance *usb_get_function_instance...desc是当前设备的描述符,在Composite驱动注册的时候设置。driver指向对应的usb_composite_driver。...Linux 3.11版本引入了USB Gadget Configfs。在用户层可以通过暴漏出来的API定义USB Gadget设备的任意功能和配置,极大的方便了USB复合设备的配置和使用。...使用usb_del_gadget_udc删除UDC驱动,首先回调pullup断开连接,然后回调udc_stop停止USB设备控制器,最后从udc_list链表中删除usb_udc。
系统的USB gadget驱动,有需要的可以自行查看该部分的源码,位于Linux内核的:linux/drivers/usb/dwc2和linux/drivers/usb/gadget目录下。...2.1.1 设备描述符 接下来对USB协议进行研究,经过研究发现,USB设备通过向主机发送各种描述符来告知USB主机自身的信息,这些描述符在Linux源码中通过结构体来定义,每个结构体字段的含义可以参考相关文章...第一个是设备描述符,该描述符的结构体定义位于:linux/include/uapi/linux/usb/ch9.h,结构体如下: /* USB_DT_DEVICE: Device descriptor...Keyboard" > "${STRINGS_DIR}/product" 首先定义了设备的协议为USB2.0,然后设置了供应商ID(0x1d6b)和产品的ID(0x0104),接着定义了bNumConfigurations...设备请求完整的配置描述符,如图12,图13所示: 图12:主机发起的获取配置描述符请求 图13:USB设备响应完整的配置描述符数据包 从USBPcap捕获到的流量中可以发现,在配置描述符的响应包里,除了配置描述符的信息
1 模拟鼠标 参考资料 在上一篇的Paper中,我们尝试对USB键盘进行模拟,下一步再尝试对USB鼠标设备进行模拟。...另外,一般的游戏鼠标在大拇指位置还设置了两个用来翻页的按键。...所有环节准备就绪了(这次USB主机设备选择的是Linux主机),接下来就可以运行脚本,然后可以在Linux主机上看到以下信息: $ sudo dmesg [91788.951749] usb 3-2:...:别看日志中显示的是Switch手柄,因为这些字符串都可以自行随意设置,而内核驱动是根据idVendor/idProduct来设备手柄是什么设备的,所以对Linux内核来说这就是一个XBox手柄。...4 本篇总结 参考资 通过本篇文章,我们了解了如何模拟一个USB鼠标,USB游戏手柄设备,并且可以学习如何对Linux内核中的HID驱动进行修改然后输出相关调试信息。
作者:Hcamael@知道创宇404实验室 时间:2024年3月13日 从本篇开始就要研究USB设备开发硬件部分的知识,本系列硬件部分文章的学习案例来源于《圈圈教你玩USB》。...因此,还需要准备一个串口线,由于开发板设计了RS-232串口母口,所以可以准备一个RS-232串口公口转USB线。或者直接用单片机的TTL串口,但这就需要准备一个TTL串口转USB的设备。...1.2 测试串口 设备连接图如下所示: 图3:USB开发板和开发电脑的连接示意图 对照着原理图,假设TTL转USB设备为A,USB开发板为B,那么连接如下所示: A的GND连B的任意一个GND。...B设备上,经验来说,拔插B设备上的VCC线最方便。...在本次的测试案例中,我们定义一个走马灯功能,共有8个LED灯,从左向右循环亮起,间隔时间为1s。
或者手柄的一些信息,这期间没出错的话就会调用到joycon_input_create函数,在该函数中通过input_set_abs_params,input_set_capability这类input驱动的函数,设置设备有哪些属性...,比如有EV_KEY,就是表示该设备有按键,使用input_set_abs_params设置的就是坐标系,比如手柄的摇杆,鼠标的移动都需要使用该函数。...), ACCEL_DEV(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_JOYCONR), { /* sentinel */ } }; 从函数的名称中就能得知该函数的作用...Linux驱动中还未实现,从joydev_event可以看出,Linux的手柄驱动仅支持坐标系和按键功能,所以把支持加速度传感器的手柄给禁用了。...3 总结 参考资 到本篇文章结束,关于USB游戏手柄部分的研究就结束了,接下来就是研究其他USB设备,经过了USB游戏手柄的一番折腾,对USB HID驱动还有input驱动都有了一定的了解,对后续的研究也能有非常大的助力
从started_list链表中获取一个USB请求。...验证DMA的方向,是DMA_BIDIRECTIONAL(数据可双向移动)、DMA_TO_DEVICE(数据传输到设备中)、DMA_FROM_DEVICE(数据从设备中传出)其中之一。...验证DMA的方向,是DMA_BIDIRECTIONAL(数据可双向移动)、DMA_TO_DEVICE(数据传输到设备中)、DMA_FROM_DEVICE(数据从设备中传出)其中之一。...验证DMA的方向,是DMA_BIDIRECTIONAL(数据可双向移动)、DMA_TO_DEVICE(数据传输到设备中)、DMA_FROM_DEVICE(数据从设备中传出)其中之一。...将DWC3_DCTL寄存器第31位设置为0时,USB设备停止运行,会和主机断开连接,在将第31位设置为0之前,需要将所有传输的USB请求清空,将31位设置为0之后,需要等待设备和主机断开连接的操作完成,
一.背景: arm linux的内核版本是3.13.0 二.准备工作 添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项: ?...Volume' numid=9,iface=MIXER,name='Mic Switch' numid=8,iface=MIXER,name='Mic Volume' 5.4 获取录音时的音量大小 从5.3...可以获取到”numid=8,iface=MIXER,name='Mic Volume‘“这条信息,从Mic Volume可以得知是Mic的音量 amixer cget numid=8,iface=MIXER...,name='Mic Volume' 5.4设置录音时的音量大小 amixer cset numid=8,iface=MIXER,name='Mic Volume' 255 六:注意事项: 如果将编译好的...以上所述是小编给大家介绍的arm linux利用alsa驱动并使用usb音频设备 ,希望对大家有所帮助!
USB 设备的 USB 口内部, D-或 D+接有 1.5K 的上拉电阻;它一接入 PC,就会把 PC USB 口的 D-或 D+拉高,从硬件的角度通知 PC 有新设备接入。 问 4....: 4.3.7 复位 从状态切换图上看,一个 USB 设备连接后,它将会被供电, 然后被复位。...PID 域 注意: 所有的 USB 文档提到的"输入"、“输出”,都是基于 Host 的角度, "输出"表示从 Host 输出到设备,"输入"表示 Host 从设备得到数据。 有哪些 USB 包?...USB 设备状态切换图 4.5.2 标准设备请求 1.SETUP事务的数据格式 Host 使用控制传输来识别设备、设置设备地址、启动设备的某些特性, 对于控制传输, 它首先发出"setup 事务",如下...一个接口, 可能有多个设置(Setting),比如默认设置下它使用较低的带宽, 可以选择 其他设置以使用更高带宽。 一个接口, 由一个或多个端点(Endpoint)组成。
Bcache简介 Bcache是Linux内核块设备层cache,支持多块HDD使用同一块SSD作为缓存盘。它让SSD作为HDD的缓存成为了可能。...Bcache是从Linux-3.10开始正式并入内核主线的,因此,要使用Bcache,需要将内核升级到3.10及以上版本才行。...安装 1 2 sudo apt-get update sudo apt-get install bcache-tools 操作 假设我们的HDD设备为/dev/sdb, SSD设备为/dev/sdc,.../sys/block/bcache0/bcache/attach' 注意,写入UUID必须以root身份才能执行,在zsh里面sudo可能会出现权限不够的问题,所以直接用bash -c来做 看一下块设备结构
一系列相互独立的端点在一起构成了USB逻辑设备,在系统结构中,位于下方红色方框内: 二、端点的分类 每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对...USB设备进行访问。...但是需要注意其中的一个特殊端点--端点0,每个USB设备必须要有一个端点0,其作用为对设备枚举和对设备进行一些基本的控制功能,端点0也被称为控制端点。...五、端点与管道 1、管道的概念 管道是主机软件(数据缓存区),和USB设备各各端点之间的数据传输连接,他是两者之间通信流的抽象(实际上数据传输是USB总线接口完成)。...数据从流通道一端流进的顺序与它们从流通道另一端流出时的顺序是一样的(先进先出),并且流通道中的通信流总是单向的。 2)、“消息”指具有某种USB定义格式的数据流。
", ATTR{index}=="0", KERNELS=="1-1.4:1.0", MODE="0666", SYMLINK+="camera3", OPTIONS+="last_rule" 以USB...pyudev.Context() monitor = pyudev.Monitor.from_netlink(context) monitor.filter_by(subsystem='video4linux...—3.0_上' elif '1-1.2:1.0' in _path: location = 'usb-3.0_下' elif '1-1.3:1.0...' in _path: location = 'usb-2.0_上' elif '1-1.4:1.0' in _path: location...= 'usb-2.0_下' else: continue print(camera)
本文告诉大家如何获得设备的usb来进行判断是否有哪些usb和找不到usb可能是什么。...需要在项目右击引用,点击程序集,搜索 System.Management 然后安装他 然后使用下面的代码就可以获得设备的 usb 请看代码 static List<(string DeviceID...} collection.Dispose(); return devices; } 如果需要判断是否存在某个 usb...,就通过 pid vid 判断,判断的方法是拿PNPDeviceID字符串比较 参见:c# 获取移动硬盘信息、监听移动设备的弹出与插入事件 - Chris Cheung - 博客园 如果发现找不到 usb...,可能是在开机的时候进行找usb,一般需要开机之后很久才会把所有的设备添加,所以如果找不到,就看开机的时间,如果太短,那么可能是因为程序太快去查。
领取专属 10元无门槛券
手把手带您无忧上云