一系列相互独立的端点在一起构成了USB逻辑设备,在系统结构中,位于下方红色方框内: 二、端点的分类 每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对...USB设备进行访问。...五、端点与管道 1、管道的概念 管道是主机软件(数据缓存区),和USB设备各各端点之间的数据传输连接,他是两者之间通信流的抽象(实际上数据传输是USB总线接口完成)。...1)、“流”指不具有USB定义格式的数据流,流通道中的数据是流的形式,也就是该数据内容不具有USB要求的结构。...2)、“消息”指具有某种USB定义格式的数据流。消息通道与端点的关系同流通道与端点的关系是不同的。
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_driver 和右边的 usb_interface 如果匹配,则调用 usb_driver.probe 2....接口函数 在 USB 设备驱动程序中,能使用的 USB 函数都在这个头文件里:include\linux\usb.h。
读写锁 与互斥量类似,但读写锁允许更高的并行性。其特性为:写独占,读共享。 读写锁状态: 一把读写锁具备三种状态: 1. 读模式下加锁状态 (读锁) 2. 写模式下加锁状态 (写锁) 3....不加锁状态 读写锁特性: 1. 读写锁是“写模式加锁”时, 解锁前,所有对该锁加锁的线程都会被阻塞。 2....那么读写锁会阻塞随后的读模式锁请求。优先满足写模式锁。读锁、写锁并行阻塞,写锁优先级高 读写锁也叫共享-独占锁。当读写锁以读模式锁住时,它是以共享模式锁住的;当它以写模式锁住时,它是以独占模式锁住的。...读写锁非常适合于对数据结构读的次数远大于写的情况。...函数 以读方式请求读写锁。
gadget 功能前关闭 adb 功能时却报异常的解决办法 4 附录 4.1 Linux-4.x/Linux-5.4 Gadget 配置示例 4.1.1 小机做 mass storage 4.1.2...1.3 适用范围 表 1-1: 适用产品列表 内核版本 驱动文件 Linux-4.9 drivers/usb/* Linux-5.4 drivers/usb/* 2 模块介绍 2.1 模块功能介绍...USB 总线采用树形结构,在一条总线上只能有唯一的主机设备。Linux 内核从主机和设备两个角度观察 USB 总线结构。...Linux 有原生 gadget 框架,通用的配置流程可参考下文。...图 2-11: linux-4.x usb gadget 配置选择 2.6.2 linux-4.x/linux-5.4 USB Gadget 配置流程 Linux-4.x/Linux-5.4 使用 configfs
一、读写锁是什么?...读写锁其实还是一种锁,是给一段临界区代码加锁,但是此加锁是在进行写操作的时候才会互斥,而在进行读的时候是可以共享的进行访问临界区的 ps:读写锁本质上是一种自旋锁 二、为什么需要读写锁?...如果每次操作都给此段代码加锁,太浪费时间了而且也很浪费资源,降低程序的效率,因为读操作不会修改数据,只是做一些查询,所以在读的时候不用给此段代码加锁,可以共享的访问,只有涉及到写的时候,互斥的访问就好了 三、读写锁的行为...读写之间是互斥的—–>读的时候写阻塞,写的时候读阻塞,而且读和写在竞争锁的时候,写会优先得到锁 四、自旋锁&挂起等待是锁?...---->读和写在同时竞争锁的时候,写会优先的得到锁 互斥---->读的时候写阻塞,写的时候读阻塞 4.相关函数 (1)pthread_rwlock_init()—->初始化函数 功能:初始化读写锁
/usb.h> 4.2 USB设备注册框架示例 #include #include #include //定义...鼠标驱动(中断传输方式) 5.1 USB驱动注册框架代码 #include #include #include ...#include #include #include #include .../init.h> #include #include #include #include <linux/slab.h...\n"); printk("命令结构大小_drv:%lu\n",sizeof(struct DEV_CMD)); return 0; } //读写命令 static long usb_dev_unlocked_ioctl
learn the auth of Linux.
Console.WriteLine($"插入设备的 Pid {e.Device.IdProduct} vid {e.Device.IdVendor}"); } 从上面的代码也可以看到只有在 Linux...下才会触发 我尝试插入一个 hid 设备,结果没有通知,估计只有在 Linux 才可以。...需要注意,通过上面的这个方法只能获得hid设备的通知 读写 在开始读写的时候就需要先知道 usb 的 pid 和 vid ,其中 vid 是 Vendor ID,供应商识别码。...UsbDevice.OpenUsbDevice(usbDeviceFinder); 在读的时候,因为不想去判断当前是 win 还是 linux 所以先转换接口,这样就不需要管在什么系统,都一样 下面代码就是打开第一个端口进行读写...,如果你测试的 usb 的第一个端口是可以读写,就可以使用下面方法 // Select config #1 wholeUsbDevice.SetConfiguration
通过扫描以下目录获取物理节点所有 USB 设备: /sys/bus/usb/devices/usb* /sys/bus/usb/devices/usb*/$busnum-* 从该文件系统收集某一个设备的主要信息如下..."level": 1, "manufacturer": "QEMU", "port": 0, "prodid": "0001", "product": "QEMU USB...: 产品 serial: USB 硬件设备序列号 ,例如 0000:00:01.2 定位方法# 定位某一个 USB 设备的方法有两种: busnum + devnum idVendor + idProduct...设备类bDeviceClass、bDeviceSubClass、bDeviceProtocol By USB 中文网 USB设备描述符中的idVendor、idProduct和bcdDevice By...USB 中文网 USB 硬件设备的序列号 By IBM 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
[ 0.513302] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 [ 0.513303] usb usb1...Controller [ 0.513304] usb usb1: Manufacturer: Linux 3.10.0-327.el7.x86_64 xhci-hcd [ 0.513305...] usb usb1: SerialNumber: 0000:00:14.0 [ 0.518700] usb usb2: New USB device found, idVendor=1d6b,...0.518702] usb usb2: Product: xHCI Host Controller [ 0.518702] usb usb2: Manufacturer: Linux 3.10.0...] usb 1-4: New USB device found, idVendor=413c, idProduct=301a [ 1.040348] usb 1-4: New USB device
在上一章分析完USB总线驱动程序后, 接下来开始写一个USB驱动: 本节目的: 将USB鼠标的左键当作L按键,将USB鼠标的右键当作S按键,中键当作回车按键 参考/drivers/hid/usbhid/...: usb_deregister(struct usb_driver *driver); 注册一个usb_driver驱动,然后内核会通过usb_driver的成员.id_table函数匹配一次USB设备...释放input_device 3.5在出口函数中 1)通过usb_deregister ()函数注销usb_driver结构体 4.代码如下: #include #include... #include #include #include #include... static struct input_dev *myusb_mouse_dev; //input_dev static char *myusb_mouse_buf
sysfs是基于文件系统的kernel对象视图,虽然某些属性允许用户读写,但对象是在kernel中创建、注册、销毁,由kernel控制其生命周期。...是一个基于文件系统的内核对象管理器(或称为config_items),config_items在用户空间通过mkdir显式的创建,使用rmdir销毁,在mkdir之后会出现对应的属性,可以在用户空间对这些属性进行读写...Linux3.11版本引入了基于configfs的usb gadget configfs。.../bcdDevice # USB 1.1: 0x0110 # USB 2.0: 0x0200, USB 2.1: 0x0210, USB 2.5: 0x0250 # USB 3.0: 0x0300...(gadget_strings, gadget_info); [include/linux/usb/gadget_configfs.h] #define USB_CONFIG_STRINGS_LANG(
使用hdparm工具或者time、dd命令测试硬盘读写性能 # hdparm for i in {0..9}; do hdparm -tT /dev/sdc; done root in summer
浅析 Linux 文件 IO 读写 Linux的文件IO子系统是Linux中最复杂的一个子系统(没有之一)。...读者可以参考以下这个图: image.png https://www.thomas-krenn.com/de/wikiDE/images/2/2d/Linux-storage-stack-diagram_v4.0...Linux的IO调度器称为evelator(电梯),因为Linus开始实现这个系统的时候,使用的就是电梯算法。
Window系统中查看一个文件是否为可执行文件,是通过扩展名(.exe、.bat 等),但在 Linux 系统中,文件是否能被执行,是通过看此文件是否具有 x 权限来决定的。...的用户访问权限应用到sakia作为所有者 将目录 /tmp/sco 这个目录的所有者和组改为sakia和组net chown -R sakia:net /tmp/sco chmod 修改文件和文件夹读写执行属性
是因为windows自带了USB总线驱动程序, USB总线驱动程序负责: 识别USB设备,给USB设备找到对应的驱动程序 新接入的USB设备的默认地址(编号)是0,在未分配新编号前,PC主机使用0地址和它通信...然后USB总线驱动程序都会给它分配一个地址(编号) PC机想访问USB总线上某个USB设备时,发出的命令都含有对应的地址(编号) USB是一种主从结构。...主机叫做Host,从机叫做Device,所有的USB传输,都是从USB主机这方发起;USB设备没有"主动"通知USB主机的能力。..., 比如:鼠标的数据是从鼠标传到PC机, 对应的端点称为"中断输入端点" 其中端点0是设备的默认控制端点, 既能输出也能输入,用于USB设备的识别过程 同样linux内核也自带了USB总线驱动程序,框架如下...其中usb_bus_type是一个全局变量, 它和我们之前学的platform平台总线相似,属于USB总线, 是Linux中bus的一种.
为了消除这种可能性,机构会限制和监测访问互联网,同时禁用 USB 存储设备。 在本教程中,我们将讨论三种不同的方法来禁用 Linux 机器上的 USB 存储设备。...方法 2:删除 USB 驱动 这种方法要求我们将 USB 存储的驱动程序(usb_storage.ko)删掉或者移走,从而达到无法再访问 USB 存储设备的目的。...方法 3:将 USB 存储器纳入黑名单 我们也可以通过 /etc/modprobe.d/blacklist.conf 文件将 usb-storage 纳入黑名单。...usb-storage 保存文件并退出。...usb-storage 就在就会被系统阻止加载,但这种方法有一个很大的缺点,即任何特权用户都可以通过执行以下命令来加载 usb-storage 模块, $ sudo modprobe usb-storage
无特殊说明情况下, 默认使用 UART1(USB TO UART)作为调试串口,使用 Linux 系统启动卡启动系统,通过路由器与 PC 机进行网络 连接。...1.8 SPI FLASH 读写测试本小节对 SPI FLASH 的 MTD3 分区进行读写速度测试。...1.9 USB 接口读写测试本小节测试使用 SanDisk 品牌、FAT32 格式、 16G 容量的 U 盘,支持 USB 3.0/2.0。不 同品牌、格式或容量的 U 盘,测试结果会有所差别。...测试文件目录 tl_usb_wifi_test 位于产品资料“4-软件资料\Demo\tl-linux-application\ module-demos\”路径下。...在编译 USB WIFI 驱动前,需确保内核镜像和内核模块已成功编译。 内核镜像、内 核模块编译方法请参考 Linux 系统使用手册的内核编译章节。
目录1.8 SPI FLASH 读写测试 201.9 USB 接口读写测试 211.10 网络接口测试 231.10.1 网络连通测试 231.10.2 网络速度测试 252 网络静态 IP 设置 273...无特殊说明情况下, 默认使用 UART1(USB TO UART)作为调试串口,使用 Linux 系统启动卡启动系统,通过路由器与 PC 机进行网络 连接。...1.8 SPI FLASH 读写测试本小节对 SPI FLASH 的 MTD3 分区进行读写速度测试。...1.9 USB 接口读写测试本小节测试使用 SanDisk 品牌、FAT32 格式、 16G 容量的 U 盘,支持 USB 3.0/2.0。不 同品牌、格式或容量的 U 盘,测试结果会有所差别。...在编译 USB WIFI 驱动前,需确保内核镜像和内核模块已成功编译。 内核镜像、内 核模块编译方法请参考 Linux 系统使用手册的内核编译章节。
2.Gadget Function驱动 Linux内核的USB Gadget Function驱动都在drivers/usb/gadget/function/目录下,有通讯设备类(Communication...[include/linux/usb/composite.h] struct usb_function_driver { const char *name; struct module...[include/linux/usb/composite.h] #define DECLARE_USB_FUNCTION_INIT(_name, _inst_alloc, _func_alloc) \...Linux 3.11版本引入了USB Gadget Configfs。在用户层可以通过暴漏出来的API定义USB Gadget设备的任意功能和配置,极大的方便了USB复合设备的配置和使用。...,不涉及io操作 const struct usb_gadget_ops *ops; struct usb_ep *ep0; // 端点0,用于响应控制读写请求 struct list_head
领取专属 10元无门槛券
手把手带您无忧上云