DRD driver DRD驱动在usb/dwc3 1.1 dts dwc3@44000000 { /* Compatible ID used by the Linux driver for this...>; }; extcon_dwc3: extcon_dwc3 { compatible = "linux,extcon-usb-gpio"; id-gpio = ; }; dr_mode...3)然后调用 dwc3_core_init()初始化usb PHY interface和usb PHY,usb PHY的初始化参照第4节。...= "linux,extcon-usb-gpio", }, { /* sentinel */ } }; static struct platform_driver usb_extcon_driver..., }; 1)首先根据"linux,extcon-usb-gpio"进行dts和driver的匹配,执行usb_extcon_probe() 2)在 usb_extcon_probe()中,先调用devm_extcon_dev_register
是Linux内核描述USB设备控制器端点的通用数据结构。...[include/linux/usb/gadget.h] struct usb_ep { // USB设备模式端点通用数据结构 const char *name; // 名字 const...[include/linux/usb/gadget.h] struct usb_ep_ops { int (*enable) (struct usb_ep *ep, const struct usb_endpoint_descriptor...[include/linux/usb/gadget.h] struct usb_request { // 用于描述一个I/O请求 void *buf; // 发送或接收数据的缓冲区...事件 R 参考资料 Rockchip RK3399TRM V1.3 Part1 Rockchip RK3399TRM V1.3 Part2 Linux内核4.4.179版本源码
[include/linux/usb/gadget.h] int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)...void usb_gadget_udc_stop(struct usb_udc *udc); [include/linux/usb/gadget.h] int usb_udc_attach_driver...[include/linux/usb/gadget.h] int usb_gadget_map_request(struct usb_gadget *gadget, struct usb_request...[include/linux/usb/gadget.h] void usb_gadget_giveback_request(struct usb_ep *ep, struct usb_request *...[include/linux/usb/gadget.h] int usb_ep_set_halt(struct usb_ep *ep); int usb_ep_clear_halt(struct usb_ep
本文主要针对主控 Soc 作为 USB 从机的情况,Linux 为其提供了 Gadget 框架。...4.2 STM32MP157的核心函数 STM32MP157 芯片中 USB 控制器型号是 dwc2,在Linux-5.4\drivers\usb\dwc2\gadget.c中注册了中断函数: dwc2...不使用 DMA 时:调用dwc2_hsotg_handle_rx来处理 以dwc2_hsotg_epint为例进行分析,对于 endpoint 0 的数据处理流程如下: // Linux-5.4\drivers...(hsotg, ep, 1); } 函数dwc2_hsotg_epint中,对于 endpoint 0 的处理如下: // Linux-5.4\drivers\usb\dwc2\gadget.c...STM32MP157: Linux-5.4\drivers\usb\dwc2\gadget.c, 函数 dwc2_hsotg_complete_setup gadget driver:涉及描述符的操作
、电源、extcon(用于USB模式切换),另一个在synopsys提供的驱动中初始化,位于drivers/usb/dwc3/core.c文件中,这部分和USB3.0控制器密切相关,如USB3.0控制器内部寄存器地址...// 创建文件 dwc3_core_init主要的工作是初始化USB控制器硬件,主要流程如下: (1)获取USB控制器IP的版本,便于后续进行不同的配置,USB控制器不同IP版本之间有差别,将Linux..._GSNPSID) // 获取Global SNPS ID Register中的内容 /* Write Linux Version Code to our GUID register so..., DWC3_GUID, LINUX_VERSION_CODE) dwc3_writel(dwc->regs, DWC3_GUID, LINUX_VERSION_CODE)...// dwc->dr_mode == USB_DR_MODE_PERIPHERAL dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE) // 设置USB
一系列相互独立的端点在一起构成了USB逻辑设备,在系统结构中,位于下方红色方框内: 二、端点的分类 每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对...USB设备进行访问。...五、端点与管道 1、管道的概念 管道是主机软件(数据缓存区),和USB设备各各端点之间的数据传输连接,他是两者之间通信流的抽象(实际上数据传输是USB总线接口完成)。...1)、“流”指不具有USB定义格式的数据流,流通道中的数据是流的形式,也就是该数据内容不具有USB要求的结构。...2)、“消息”指具有某种USB定义格式的数据流。消息通道与端点的关系同流通道与端点的关系是不同的。
在树莓派系统/boot/overlays/README中,关于 USB controller driver的描述如下(文末附录关于dwc_otg与dwc2的区别): Name: dwc-otg Info...: Selects the dwc_otg USB controller driver which has fiq support....Load: dtoverlay=dwc-otg Params: Name: dwc2 Info: Selects the dwc2 USB controller driver...故在交互菜单栏中有Flash U Disk选项,以便在Export log后更新U盘显示内容 附录 dwc_otg与dwc2 dwc_otg is the driver that has been heavily...to 169.254.64.64, or by using raspberrypi.local if your computer has Bonjour installed (Mac and most Linux
然后根据官方的安装指引将镜像烧写到 SD 卡中,对于 *NIX 系统而言,推荐直接使用 dd 烧写: dd bs=4M if=2021-01-11-raspios-buster-armhf.img of=/dev/sdX 当然 Linux...如下在挂载的 SD 卡中启用串口: echo enable_uart=1 >> /Volumes/config.txt 默认情况下主串口分配给了 Linux console,因此开机后就可以从串口登录...其他 对于树莓派 Zero 而言,我们还可以使用 OTG Ether Gadget,将树莓派本身配置(模拟)成 USB 网卡,然后通过 USB 去连接树莓派。...一般启用 USB 网卡模拟的方式如下: 在 /boot/config.txt 中添加 dtoverlay=dwc2。dwc2 是一个 OTG 驱动,用于检测 USB 口的模式。...=dwc2,g_ether。
嵌入式开发环境 主控芯片: Amlogic A113X Linux Kernel : 4.9 eMMc : 金士顿 4GB ?...mask = ; }; cache:cache -- 1.9.1 内存大小配置 memory@00000000 { device_type = "memory"; linux...bus registered, assigned bus number 2 [ 2.859554@3] usb usb2: We don't know the algorithms for LPM...: usb0: type: 2 speed: 0, config: 0, dma: 0, id: 0, phy: ffe09000, ctrl: 0 [ 3.190782@0] dwc_otg:...dwc_otg: curmode: 0, host_only: 0 [ 3.211743@0] dwc_otg: Using Buffer DMA mode [ 3.211763@0] dwc_otg
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
该实现分为三部分:模拟HID键盘, 模拟Payload解释器和内容输入 模拟HID键盘 初始环境设置 # Enable dwc2 on the Pi echo "dtoverlay=dwc2" | sudo...tee -a /boot/config.txt # Enable dwc2 initialisation echo "dwc2" | sudo tee -a /etc/modules echo "libcomposite...# Device description echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # Multifunction...hid.usb0/protocol echo 1 > functions/hid.usb0/subclass echo 8 > functions/hid.usb0/report_length echo...USB实现--U盘模式和网卡模式 基于树莓派的多功能USB实现--无线AP模式 ?
但是最主要的优势是: that USB port is not a standard type A port, instead it is a 'USB On-The-Go' port 一般来说,USB...其他树莓派的USB port都只支持作为 Host,而树莓派 Zero 和 Zero w 同时支持作为 Host 和 Device,这为树莓派做Bad USB提供了前提 材料购买和组装 由于要做多功能USB...Plan B 1、烧录完成后,在电脑上插入这个 SD 卡,在根目录下面的config.txt文件的末尾添加一行 dtoverlay=dwc2 2、打开 cmdline.txt 在 rootwait 后面添加如下内容...modules-load=dwc2,g_ether 3、在 SD 卡根目录下面创建一个名为ssh的文件或目录。...如果这个不能通过这个主机名连接,那么你可能需要给 Windows 系统的电脑上安装 Bonjour、iTunes 或 Quicktime;给 Linux 系统安装 Avahi Daemon 以确保可以通过主机名
四、 linux内核下USB相关的API函数与数据结构 前面介绍了USB相关一些基础概念与重要的数据结构,接下来就分析在linux内核中如何编写一个USB 驱动程序,编写与一个USB设备驱动程序的方法和其他总线驱动方式类似.../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
通过扫描以下目录获取物理节点所有 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
Linux3.11版本引入了基于configfs的usb gadget configfs。....dwc3 > /sys/kernel/config/usb_gadget/g1/UDC } function stop_uac2() { # Disabling the gadget echo...(gadget_strings, gadget_info); [include/linux/usb/gadget_configfs.h] #define USB_CONFIG_STRINGS_LANG(...3.2.4.驱动绑定 如下图所示,当用户空间执行echo fe800000.dwc3 > /sys/kernel/config/usb_gadget/g1/UDC时,内核会调用USB gadget configfs...反之调用usb_udc_attach_driver函数进行匹配USB设备控制器。 遍历udc_list链表,查找fe800000.dwc3 USB设备控制器。
在usb2.0中我们有诸如“ehci,uhci,ohci,dwc2”等多个不同的控制器ip。...dwc2则是拥有otg功能的控制器 在usb3.0中,控制器则只剩了xhci,与dwc3,同样的dwc3也是拥有otg功能。 usb phy Usb phy主要负责实际的物理信号。...USB3.0 OTG (1) ConfigFS 在《带你遨游USB世界》中,我们介绍了android.c的gadget配置方式,在早期时,linux的gadget驱动都是固定功能,即开机后usb功能就已固定...再此之后,android.c的方式沿用了很久,直到linux更新了新的gadget驱动----configfs子系统,满足了移动端的所有需求。...在新的linux代码中,configfs基本替代了android.c,因此我们对configfs做一定的介绍 启动流程: ?
2.Gadget Function驱动 Linux内核的USB Gadget Function驱动都在drivers/usb/gadget/function/目录下,有通讯设备类(Communication...gadget指向dwc3结构体中的usb_gadget。req在Composite驱动注册的时候就提前分配好,用于响应主机发送的控制请求。config指向当前使用的usb配置。...gadget_driver; }; struct usb_composite_dev { // 复合设备 // 只读,usb设备控制器的抽象,指向dwc3结构体中的usb_gadget...Linux 3.11版本引入了USB Gadget Configfs。在用户层可以通过暴漏出来的API定义USB Gadget设备的任意功能和配置,极大的方便了USB复合设备的配置和使用。...这些函数内部会调用具体的USB设备控制器的UDC驱动。RK3399平台上,就会调用dwc3实现的UDC驱动。至于具体内容,后面章节在分析dwc3的UDC驱动时会详细说明。
领取专属 10元无门槛券
手把手带您无忧上云