二、热插拔 硬件层面:只在不断电、不关闭系统的情况下增加或者删除对应部件,比如电源、硬盘。...一些高端设备硬盘是支持热插拔的,再比如我们的Windows笔记本电脑,电池也是可以在通过适配器供电的情况下更换。计算机硬件的热插拔底层需要操作系统的支持。 软件层面:这一概念在软件行业也有。...这次说到的是Linux模块相对于内核的热插拔,可以将模块看做某一硬件设备,内核看做整台物理计算机。
一系列相互独立的端点在一起构成了USB逻辑设备,在系统结构中,位于下方红色方框内: 二、端点的分类 每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对...USB设备进行访问。...五、端点与管道 1、管道的概念 管道是主机软件(数据缓存区),和USB设备各各端点之间的数据传输连接,他是两者之间通信流的抽象(实际上数据传输是USB总线接口完成)。...1)、“流”指不具有USB定义格式的数据流,流通道中的数据是流的形式,也就是该数据内容不具有USB要求的结构。...2)、“消息”指具有某种USB定义格式的数据流。消息通道与端点的关系同流通道与端点的关系是不同的。
目前USB硬件接口分三种,普通PC上使用的叫Type;原来诺基亚功能机时代的接口为Mini USB;目前Android手机使用的Micro USB。...完整的USB2.0 OTG 控制器硬件信号如下: USB_ID:输入信号,由 USB OTG 协议定义,用于识别 USB 口所接设备的默认角色(host or device)。...USB OTG的工作原理 OTG补充规范对USB 2.0的最重要的扩展是其更具节能性的电源管理和允许设备以主机和外设两种形式工作。...USB接口层为OTG主机和OTG设备提供物理连接,USB系统软件使用主机控制器来管理主机与 USB设备的数据传输。...一问一答: 什么是USB OTG? USB OTG是USB 2.0的补充规范 2. USB OTG针对USB 2.0的最重要扩展是什么?
OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG)。...USB OTG技术可实现没有主机时设备与设备之间的数据传输。例如:数码相机可以直接与打印机连接并打印照片,手机与手机之间可以直接传送数据等,从而拓展了USB技术的应用范围。...只有而言支持USB OTG的设备(即可以做USB Host有可以做Slave的设备),USB_ID信号才有意义。...实际的USB连接线中,是没有USB_ID这根线的。 都是在接口部分直接拉死的的。...对于Host端,只需将连接线的USB_ID pin和地短接即可, 对于Slave端,USB连接线的USB_IDpin是悬空的。(设备内部上拉)。
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。
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
三、devfs 的工作原理:驱动和文件系统怎么 “对话”? 搞懂了功能,再深入一层:devfs 是怎么跟设备驱动配合,完成 “创建 / 删除设备文件” 的?...其实核心就三步,咱们用 “插入 USB 转串口” 的例子,把整个流程拆解开: 步骤 1:驱动加载,向 devfs “报到” 当你把 USB 转串口插进电脑,Linux 内核会先检测到新硬件(通过 USB...devfs 虽然解决了传统/dev的很多问题,但随着 Linux 硬件的发展(比如多 USB 设备、热插拔更频繁),它的缺点也越来越明显,最终在 Linux 2.6.15 内核(2006 年)被udev...热插拔支持不足:多设备同时插入易出错 devfs 的热插拔处理是 “单线程” 的 —— 如果同时插入多个 USB 设备(比如 U 盘 + USB 转串口 + USB 摄像头),devfs 可能会因为处理不过来...自动设备号分配:主/次设备号无冲突,驱动自动申请 │ ├── 权限管理:默认权限+devfsd自定义规则 │ ├── 分类目录结构:/dev/tty/(终端)、/dev/disk/(磁盘)等 ├── 工作原理
USB介绍: http://www.usb.org/home 1.2 USB设备主要优点总结 1. 可以热插拔 用户在使用外接设备时,不需要关机再开机等动作,而是在电脑工作时,直接将USB插上使用。.../usb.h> 4.2 USB设备注册框架示例 #include linux/init.h> #include linux/module.h> #include linux/usb.h> //定义...一是:将设备加入到外设队列中, 二是告诉程序阅读者该设备是热插拔设备或是说该设备支持热插拔功能。...#include linux/init.h> #include linux/module.h> #include linux/usb.h> #include linux/usb/input.h>...一是:将设备加入到外设队列中, 二是告诉程序阅读者该设备是热插拔设备或是说该设备支持热插拔功能。
通过扫描以下目录获取物理节点所有 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 国际许可协议 进行许可。
从上面的例子中我们可以总结出: (1)目前能支持热拔插的硬件也就是USB接口、IEEE1394接口和音视频接口, 其工作原理是,插入过程:先接数据,后接电源; 拔出过程:先断电源,后断数据。...—这种做法的依据是:仔细观察它的USB接口埠,终于发现了它“简单”的工作原理。USB接口由四条传输线组成,其中外侧的两条比较长,那就是数 据线;而里面两条相对短一些的为电源线。...这样,对整个系统及USB设备都没有影响,所以就实现了热插拔,这也是USB设备的工作原理。 ...那么,既然已经知道了这个原理,我们就可以进行实际操作了,在安装时首先要记住先插数据线,后插电源线,而拆下时则刚好相反。对于一般的外设,像软驱、光驱甚至是硬盘都可以使用此种方法进行热插拔操作。 ...(5)为了方便笔记本使用各种卡,也由于我的笔记本不支持USB2.0,所以买了两块PCMCIA转接卡,但不知是否支持热插拔,每次交换文件只好关 机插拔。如果不支持热插拔,那真是没有USB读卡器方便了!
在上一章分析完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 linux/kernel.h> #include...linux/slab.h> #include linux/module.h> #include linux/init.h> #include linux/usb/input.h> #include...linux/hid.h> static struct input_dev *myusb_mouse_dev; //input_dev static char *myusb_mouse_buf
[ 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
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(...主要的工作流程为: 分配一个config_usb_cfg1结构体,该结构体包含了usb_configuration结构体,保存了该USB设备的配置信息。 设置USB设备的配置描述符的某些选项。...调用UDC驱动接口usb_udc_connect_control连接USB主机控制器,这样USB主机就能识别并枚举USB设备。
,本专栏目的在于,记录学习Linux操作系统的总结 欢迎大家点赞 收藏 ⭐ 加关注哦!...│ │ │ │ 高级功能:设备快照、硬件数据库、热插拔管理 │ └─────────────────────...uucp 660 video[0-9]* root:video 660 udev规则示例 (/etc/udev/rules.d/99-my.rules) # 更丰富的匹配条件和操作 SUBSYSTEM=="usb...="my_device", MODE="0660", GROUP="plugdev", \ RUN+="/usr/local/bin/setup_device.sh" 使用场景示例 场景1:USB...从mdev开始,需要复杂功能时迁移到udev 桌面开发:直接使用udev,利用其丰富生态 容器环境:考虑更轻量的替代方案(如devtmpfs) 学习路径:先理解mdev原理,再学习udev高级特性 快速记忆口诀
为了消除这种可能性,机构会限制和监测访问互联网,同时禁用 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
是因为windows自带了USB总线驱动程序, USB总线驱动程序负责: 识别USB设备,给USB设备找到对应的驱动程序 新接入的USB设备的默认地址(编号)是0,在未分配新编号前,PC主机使用0地址和它通信...主机叫做Host,从机叫做Device,所有的USB传输,都是从USB主机这方发起;USB设备没有"主动"通知USB主机的能力。...USB可以热插拔的硬件原理 在USB集线器(hub)的每个下游端口的D+和D-上,分别接了一个15K欧姆的下拉电阻到地。这样,在集线器的端口悬空时,就被这两个下拉电阻拉到了低电平。..., 比如:鼠标的数据是从鼠标传到PC机, 对应的端点称为"中断输入端点" 其中端点0是设备的默认控制端点, 既能输出也能输入,用于USB设备的识别过程 同样linux内核也自带了USB总线驱动程序,框架如下...其中usb_bus_type是一个全局变量, 它和我们之前学的platform平台总线相似,属于USB总线, 是Linux中bus的一种.
而现在用新 Linux 系统(比如 Ubuntu 20.04、CentOS 8),你会发现:U 盘不管插哪个 USB 口,都能识别为/dev/my_usb;串口权限改一次就永久生效 —— 这背后是udev...它像现代小区的智能管理系统,不依赖固定规则,能根据设备的 “唯一身份”(比如 USB 序列号、硬盘 UUID)定制化管理,配置直观、扩展性强,完美适配多设备热插拔场景。...2.4 维度 4:热插拔支持 ——“单线程应付” vs “多线程搞定” 现在的电脑动不动插多个 USB 设备(U 盘 + 串口 + 摄像头),热插拔能力直接影响用户体验。...用两个常见场景,看 devfs 和 udev 的实际表现差距: 场景 1:嵌入式设备调试(多串口 + 热插拔) devfs:同时插两个 USB 转串口,一个是/dev/ttyUSB0(主号 188:0)...一句话概括:devfs 解决了 “从手动到自动” 的 0 到 1 问题,但没解决 “灵活、稳定、易用” 的 1 到 10 问题;而 udev 正好填补了这些空白,完美适配现代 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复合设备的配置和使用。...该部分内容后面将会详细介绍原理和使用方法。USB Gadget Configfs在drivers/usb/gadget/configfs.c文件中实现。
试过很多官方驱动,都不太好,每个驱动都测试了5G, 3.3、不同驱动的对比测试 测试位置:距离路由器隔一堵墙的房间那头, USB3.0无线网卡稳定在130Mbps的下载速度 测网速:www.speedtest.cn
制作 Kali 可启动 USB 驱动器 (Linux) 我们最喜欢的方式,也是最快的方法,启动和运行 Kali Linux 是从 USB 驱动器“实时”运行它。...它是便携的——你可以把 Kali Linux 放在口袋里,并在几分钟内在可用的系统上运行 它是可定制的——你可以滚动你自己定制的 Kali Linux ISO 镜像,并使用相同的程序将它放到 USB...USB 驱动器,该驱动器已从 Kali Linux 的 ISO 映像设置。...Kali Linux Live USB 安装程序 此过程的具体细节取决于您是在Windows、Linux还是macOS/OS X系统上执行此操作。...在 Linux (DD) 上创建可引导 Kali USB 驱动器 在 Linux 环境中创建可引导的 Kali Linux USB 驱动器很容易。