体验Linux USB 驱动
目录
一、USB OTG
二、I.MX6ULL USB 接口简介
硬件原理图
1、USB HUB 原理图
2 、USB OTG 原理图
三、使能驱动
1、打开 HID 驱动
2、 使能 USB 键盘和鼠标驱动
3 、使能 Linux 内核中的 SCSI 协议
4、使能 U 盘驱动
四、测试u盘
五、 Linux 内核自带 USB OTG
USB 是很常用的接口,目前大多数的设备都是 USB 接口的,比如鼠标、键盘、 USB 摄像
头等,我们在实际开发中也常常遇到 USB 接口的设备,来学习一下如何使能 Linux内核自带的 USB 驱动
一、USB OTG
USB 分为 HOST(主机)和从机(或 DEVICE),有些设备可能有时候需要做HOST,有时候又需要做 DEVICE,配两个 USB 口当然可以实现,但是太浪费资源了。如果一个 USB 接口既可以做 HOST 又可以做 DEVICE 那就太好了,使用起来就方便很多。为此, USBOTG 应运而生, OTG 是 On-The-Go 的缩写,支持 USB OTG 功能的 USB 接口既可以做 HOST,也可以做 DEVICE。Mini USB 插头有 5 根线,其中一条就是 ID 线。 ID 线的高低电平表示 USB 口工作在 HOST 还是 DEVICE 模式:
ID=1: OTG 设备工作在从机模式。
ID=0: OTG 设备工作在主机模式。
二、I.MX6ULL USB 接口简介
I.MX6ULL 内部集成了两个独立的 USB 控制器,这两个 USB 控制器都支持 OTG 功能。
I.MX6ULL 内部 USB 控制器特性如下:
①、有两个 USB2.0 控制器内核分别为 Core0 和 Core1,这两个 Core 分别连接到 OTG1 和OTG2。
②、两个 USB2.0 控制器都支持 HS、 FS 和 LS 模式,不管是主机还是从机模式都支持HS/FS/LS,硬件支持 OTG 信号、会话请求协议和主机协商协议,支持 8 个双向端点。
③、支持低功耗模式,本地或远端可以唤醒。
④、每个控制器都有一个 DMA
每个 USB 控制器都有两个模式:正常模式(normal mode)和低功耗模式(low power mode)。
每个 USB OTG 控制器都可以运行在高速模式(HS 480Mbps)、全速模式(LS 12Mbps)和低速模式
(1.5Mbps)。正常模式下每个 OTG 控制器都可以工作在主机(HOST)或从机(DEVICE)模式下,每
个 USB 控制器都有其对应的接口。低功耗模式顾名思义就是为了节省功耗, USB2.0 协议中要
求,设备在上行端口检测到空闲状态以后就可以进入挂起状态。在从机(DEVICE)模式下,端口
停止活动 3ms 以后 OTG 控制器内核进入挂起状态。
硬件原理图
1、USB HUB 原理图
I.MX6ULL 的 USB OTG2 扩展成了 4 路 HOST 接口,其中一路供 4G 模块使用,因此就剩下了三个通用的 USB A 插座,U10 就是 USB HUB 芯片 GL850G, GL850G 是一款符合 USB2.0 标准的 USB HUB 芯片,支持一拖四扩展,可以将一路 USB 扩展为 4 路 USB HOST 接口
2 、USB OTG 原理图
开发板上还有一路 USB OTG 接口,使用 I.MX6ULL 的 USB OTG1 接口。此路 USB OTG 既可以作为主机(HOST),也可以作为从机(DEVICE),从而实现完整的 OTG 功能,左侧的为 Mini USB 插座,当 OTG 作为从机(DEVICE)的时候 USB 线接入此接口。右侧为 USB A 插座,当 OTG 作为主机的时候将 USB 设备插入到此接口中,另外开发板上集成了一个 USB HOST 接口
主机(HOST)模式: 主机模式下必须将 Mini USB 线拔出来,将 USB 设备连接到对应的USB HOST 接口上。 Mini USB 线拔出来以后 USB_OTG_VBUS 就没有电压了,此时 USB_OTG1_ID线就被 R31 这个 100K 电阻下拉到地,因此 USB_OTG1_ID 线的电压就为 0,当 ID 线为 0 的时候就表示 OTG 工作在主机模式。
从机(DEVICE)模式: USB_OTG_VBUS 是 Mini USB 的电源线,只有插入Mini USB 线以后 USB_OTG_VBUS 才有效(5V)。插入 Mini USB 线就表示开发板此时要做从机(此时不考虑接 OTG 线的情况), USB_OTG_VBUS 就是电脑供的 5V 电压,由于分压电阻 R111和 R31 的作用,此时 USB_OTG1_ID 的电压就是 4.5V 左右,很明显这一个高电平。当 ID 线为高的时候就表示 OTG 工作在从机模式
三、使能驱动
NXP 官方的 Linux 内核默认已经使能了 USB 键盘鼠标和 U 盘驱动
1、打开 HID 驱动
-> Device Drivers
-> HID support-> HID bus support (HID [=y])
-> <*> Generic HID driver
2、 使能 USB 键盘和鼠标驱动
-> Device Drivers
-> HID support
-> USB HID support
-> <*> USB HID transport layer
3 、使能 Linux 内核中的 SCSI 协议
-> Device Drivers
-> SCSI device support
-> <*> SCSI disk support
4、使能 U 盘驱动
-> Device Drivers
-> USB support (USB_SUPPORT [=y])
-> Support for Host-side USB (USB [=y])
-> <*> USB Mass Storage support
注意 U 盘要为 FAT32 格式的!NTFS 和 exFAT 由于版权问题所以在 Linux下支持的不完善,操作的话可能会有问题,比如只能读,不能写或者无法识别等
编译内核用新的zImage和设备树启动开发板
四、测试u盘
插上u盘在开发版就会打印下面信息
进入dev目录就能看到这个目录
/dev/sda 是整个 U盘, /dev/sda1 是 U 盘的第一个分区,我们一般使用 U 盘的时候都是只有一个分区。要想访问 U盘我们需要先对 U 盘进行挂载,理论上挂载到任意一个目录下都可以,这里我创建一个/mnt/usb_disk 目录,然后将 U 盘挂载到/mnt/usb_disk 目录下,命令如下
mkdir /mnt/usb_disk -p //创建目录
mount /dev/sda1 /mnt/usb_disk/ -t vfat -o iocharset=utf8 //挂载
-t 指定挂载所使用的文件系统类型,这里设置为 vfat,也就是 FAT 文件系统,“-o iocharset”设置硬盘编码格式为 utf8,否则的话 U 盘里面的中文会显示乱码
上图可以看到,挂载成功以后进入到/mnt/usb_disk 目录下能读能写
至此 U 盘就能正常读写操作了,直接对/mnt/usb_disk 目录进行操作就行了。如果要拔出 U盘要执行一个 sync 命令进行同步,然后在使用 unmount 进行 U 盘卸载,命令如下所示:
sync //同步
cd / //如果处于/mnt/usb_disk 目录先退出来,否则卸载的提示设备忙,导致卸载失败
umount /mnt/usb_disk //卸载
五、 Linux 内核自带 USB OTG
这里因为开发板为了在板子上集成 OTG 的主机和从机接口对 ID 线做了修改,需要修改 ID 引脚的电气属性
查阅原理图可以知道, USB OTG1 的 ID 引脚连接到了 I.MX6ULL 的 GPIO1_IO00 这个引
脚上, USB OTG 默认工作在主机(HOST)模式下,因此 ID 线应该是低电平。这里需要修改设备树中 GPIO1_IO00 这个引脚的电气属性,将其设置为默认下拉
MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x13058
就是将 GPIO1_IO00 复用为 OTG1 ID,并且设置电气属性为 0X13058,默认下拉,设备树修改好以后重新编译并用新的设备树启动系统,系统重启成功以后就可以正常使用 USB OTG1 接口, OTG 既可以做主机,也可以做从机,做主机的话测试,直接在开发板的 OTG HOST 接口上插入 USB 鼠标键盘、 U 盘等设备。
相关文章:

体验Linux USB 驱动
目录 一、USB OTG 二、I.MX6ULL USB 接口简介 硬件原理图 1、USB HUB 原理图 2 、USB OTG 原理图 三、使能驱动 1、打开 HID 驱动 2、 使能 USB 键盘和鼠标驱动 3 、使能 Linux 内核中的 SCSI 协议 4、使能 U 盘驱动 四、测试u盘 五、 Linux 内核自带 USB OTG USB 是…...
servlet 中的ServletConfig与servletContext
ServletConfig对象:servlet配置对象,主要把servlet的初始化参数封装到这个对象中。 一个网站中可能会存在多个servletConfig对象,一个servletConfig对象就封装了一个servlet的配置信息。 可以在web.xml中通过<init-param></init-p…...

Hadoop3.1.3单机(伪分布式配置)
参考:林子雨老师网站博客 Hadoop安装搭建伪分布式教程(全面)吐血整理 环境 Vmare12 Ubuntu16.04 创建Hadoop用户 若安装Ubuntu不是用的“hadoop”用户,则需要增加一个名为"hadoop"的用户 直接快捷键ctrlaltt或者点…...

HBase---浅谈HBase原理
浅谈HBase原理 文章目录浅谈HBase原理HBase定义HBase逻辑结构HBase物理存储结构TimeStampType数据模型NaneSpaceRegionRowColumnTineStampCellHBase架构MasterMaster 架构Meta 表格介绍Region ServerRegionServer 架构MemStoreWALBlockCacheZookeeperHDFSHBase写数据流程HBase读…...
学习笔记四:dockerfile
Dockerfile概述dockerfile语法详解FROMMAINTAINERRUN:指定在当前镜像构建过程中要运行的命令EXPOSE指令CMDENTERYPOINTCOPYADDVOLUMEWORKDIRENVUSERONBUILDLABELHEALTHCHECKARG概述 Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜…...

微服务里的小问题
1.微服务为什么设置不同的namespace 为了实现三种服务三种情况下的隔离。 2.为什么要用nginx为naocos集群结点做负载均衡? 2.1 正向代理 就像我们访问外网需要一个代理。 2.2 反向代理 我们不需要访问真实的ip,只需要访问 这个服务的代理服务器即可&a…...

数据库之基本功:Where 中常用运算符
1. 运算符及优先级 ( )优先级最高 SQL> show user; USER is "SCOTT" SQL> select ename, job, sal, comm from emp where jobSALESMAN OR jobPRESIDENT and sal> 1500;ENAME JOB SAL COMM …...

浅谈 Nodejs原型链污染
一直在做php的题目,对其它语言做的很少。刚好在西湖论剑2022复现时,遇到了一道原型链污染的题目,借此机会开始简单学习一下 Nodejs的洞 p🐂讲解的十分清楚,因此下面举例子就直接用p🐂的例子进行解释了 目…...

Linux系统安装Docker
目录 Linux系统安装Docker 1、如果之前安装过旧版本的Docker,可以使用下面命令卸载 2、安装docker 3、启动docker 4、配置镜像加速 Linux系统安装Docker 前提:Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10࿰…...

MCP2515国产替代DP2515带有SPI 接口的独立CAN 控制器
DP2515是一款独立控制器局域网络(Controller AreaNetwork, CAN)协议控制器,完全支持CAN V2.0B 技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。DP2515自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的…...
【Kubernetes】第二十篇 - k8s 污点和容忍度
一,前言 上一篇,介绍了 k8s ConfigMap 管理服务环境变量; 本篇,介绍 k8s 污点和容忍度; 二,污点与容忍度介绍 通过污点和容忍度配置可以干预 Pod 部署到特定的节点; 比如: 不想让…...

60% 程序员大呼:我要远程办公!
近几年数字化的普及,白领们从挤地铁、打卡、开会、写日报转变成“早上9点视频会议”,企业的办公场所也从写字楼、会议室、工位变成了手机、电脑中的线上会议室,远程办公已经成为一种流行的办公形式。《财富》杂志发现,75%的员工表…...

jmeter+ant+jenkins接口自动化测试框架
大致思路:Jmeter可以做接口测试,也能做压力测试,而且是开源软件;Ant是基与java的构建工具,完成脚本执行并收集结果生成报告,可以跨平台,Jenkins是持续集成工具。将这三者结合起来可以搭建一套We…...

【protoc自定义插件】「go语言」实现rpc的服务映射成http的服务,protoc生成gin的插件,(详解实现原理及过程)
文章目录前言一、工程实践中如何更好的使用proto文件?二、protoc命令如何查询依赖的proto文件以及执行原理1. protoc命令如何查询依赖的proto文件2. protoc执行的插件加载原理是什么?3. proto文件中的package和go_package的作用三、protoc插件开发原理体…...
【C语言】3天速刷C语言(语句、函数)
语句分支语句if语句if语句语法结构语法结构: if(表达式)语句; if(表达式)语句1; else语句2; //多分支 if(表达式1)语句1; else if(表达式2)语句2; else语句3;表达式如果成立,则执行,不成立则弹出。switch语句语法结构:switch(…...

Linux系统中指针的详细分析与操作
文章目录 一、指针 二、指针的初始化 三、指针的运算 四、指针与数组 五、指针与字符串 六、函数指针 七、NULL 指针 八、对复杂指针的解释 C 语言指针真正精髓的地方在于指针可以进行加减法,这一点极大的提升了程序的对指针使用的灵活性,同时也…...

工程(十一)——NUC11+D435i+VINS-FUSION+ESDF建图(github代码)
博主的合并代码gitgithub.com:huashu996/VINS-FUSION-ESDFmap.git一、D435i深度相机配置1.1 SDKROS参考我之前的博客,步骤和所遇见的问题已经写的很详细了https://blog.csdn.net/HUASHUDEYANJING/article/details/129323834?spm1001.2014.3001.55011.2 相机标定参数…...

第十四届蓝桥杯三月真题刷题训练——第 4 天
目录 题目 1 :九数算式_dfs回溯(全排列) 题目描述 运行限制 代码: 题目2:完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 2 样例输出 2 评测用例规模与约定 运行限制 代码: 题目 1 &am…...

Hadoop 运行环境搭建(开发重点)
文章目录Hadoop 运行环境搭建(开发重点)一、安装JDK二、安装配置 Hadoop1、安装 hadoop2、hadoop 目录结构3、设置免密登录4、完全分布式模式(开发重点)1)分发jdk2)集群配置(1) 集群部署规划(2) 配置文件说…...

在社交媒体上行之有效的个人IP趋势
如果您认为无论是获得一份工作、建立一家企业还是推动个人职业发展,社交媒体都是帮助您实现目标的可靠工具,那么个人IP就是推动这一工具前进的燃料。个人IP反映了您是谁,您在所处领域的专业程度,以及您与他人的区别。社交媒体将有…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...