<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.uotan.cn/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BigfootACA</id>
	<title>Uotan Wiki · 刷机百科 - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.uotan.cn/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BigfootACA"/>
	<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/BigfootACA"/>
	<updated>2026-06-13T20:55:28Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=USB_Gadget&amp;diff=600</id>
		<title>USB Gadget</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=USB_Gadget&amp;diff=600"/>
		<updated>2024-03-20T04:06:56Z</updated>

		<summary type="html">&lt;p&gt;BigfootACA：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;linux-usb-gadget&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Linux USB Gadget =&lt;br /&gt;
&lt;br /&gt;
== 概述 ==&lt;br /&gt;
&lt;br /&gt;
Linux在configfs中提供了usb_gadget用于支持USB设备模式。[[关于USB]]&lt;br /&gt;
&lt;br /&gt;
== 准备configfs ==&lt;br /&gt;
&lt;br /&gt;
在默认情况下，系统会自动挂载configfs，根据发行版不同，可能会挂在到不同的目录：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 系统&lt;br /&gt;
! 目录&lt;br /&gt;
|-&lt;br /&gt;
| Android&lt;br /&gt;
| /config&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| /sys/kernel/config&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
也可以通过以下命令来查看&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mount | grep configfs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果没有挂载，也可以通过以下命令挂载&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mount -t configfs configfs /sys/kernel/config&amp;lt;/pre&amp;gt;&lt;br /&gt;
注：usb_gadget的configfs接口由模块&amp;lt;code&amp;gt;libcomposite&amp;lt;/code&amp;gt;提供&lt;br /&gt;
&lt;br /&gt;
== 创建gadget ==&lt;br /&gt;
&lt;br /&gt;
简单的使用mkdir即可创建一个gadget。如要创建一个名为my_gadget：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget&amp;lt;/pre&amp;gt;&lt;br /&gt;
创建完成后，configfs会自动添加虚拟文件，以下是参照表&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 文件/文件夹名称&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| bcdDevice&lt;br /&gt;
| 设备版本，使用带0x前缀的四个十六进制数字（0x1234，0x89AB）&lt;br /&gt;
|-&lt;br /&gt;
| bcdUSB&lt;br /&gt;
| USB的协议版本，使用带0x前缀的四个十六进制数字（0x0200，0x0301）&lt;br /&gt;
|-&lt;br /&gt;
| idProduct&lt;br /&gt;
| USB设备的产品ID，使用带0x前缀的四个十六进制数字（0x1234，0x89AB）&lt;br /&gt;
|-&lt;br /&gt;
| idVendor&lt;br /&gt;
| USB设备的制造商ID，使用带0x前缀的四个十六进制数字（0x1234，0x89AB）&lt;br /&gt;
|-&lt;br /&gt;
| bDeviceClass&lt;br /&gt;
| USB设备识别的设备类，使用带0x前缀的两个十六进制数字（0x34，0x9A）&lt;br /&gt;
|-&lt;br /&gt;
| bDeviceSubClass&lt;br /&gt;
| USB设备识别的设备子类，使用带0x前缀的两个十六进制数字（0x34，0x9A）&lt;br /&gt;
|-&lt;br /&gt;
| bDeviceProtocol&lt;br /&gt;
| USB设备识别的设备协议，使用带0x前缀的两个十六进制数字（0x34，0x9A）&lt;br /&gt;
|-&lt;br /&gt;
| bMaxPacketSize0&lt;br /&gt;
| 单次包最大传输大小&lt;br /&gt;
|-&lt;br /&gt;
| configs/&lt;br /&gt;
| gadget的配置文件&lt;br /&gt;
|-&lt;br /&gt;
| functions/&lt;br /&gt;
| gadget的子功能&lt;br /&gt;
|-&lt;br /&gt;
| strings/&lt;br /&gt;
| 向主机上报的设备名称&lt;br /&gt;
|-&lt;br /&gt;
| max_speed&lt;br /&gt;
| 支持的最大速度&lt;br /&gt;
|-&lt;br /&gt;
| os_desc&lt;br /&gt;
| 向主机展示的操作系统相关的描述&lt;br /&gt;
|-&lt;br /&gt;
| UDC&lt;br /&gt;
| 使用的USB设备控制器，可以在&amp;lt;code&amp;gt;/sys/class/udc&amp;lt;/code&amp;gt;中选择&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vendor ID、Product ID列表：http://www.linux-usb.org/usb.ids&lt;br /&gt;
&lt;br /&gt;
Class、SubClass、Protocol列表：https://www.usb.org/defined-class-codes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;填写设备id&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 填写设备ID ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo 0x05F9 &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/idVendor&lt;br /&gt;
echo 0x1234 &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/idProduct&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 填写设备字符串描述 ==&lt;br /&gt;
&lt;br /&gt;
参考： [[USB Gadget#附注语言id|语言ID]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409&lt;br /&gt;
echo &amp;quot;My Vendor&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409/manufacturer&lt;br /&gt;
echo &amp;quot;My Product&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409/product&lt;br /&gt;
echo &amp;quot;123456789&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409/serialnumber&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 创建功能 ==&lt;br /&gt;
&lt;br /&gt;
gadget子系统支持非常多的usb功能，也可以使用用户空间的functionfs和主机进行通信。这里演示大容量存储和RNDIS网络&lt;br /&gt;
&lt;br /&gt;
格式：&amp;lt;pre&amp;gt;functions/%FUNC%.%NAME%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 符号&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| FUNC&lt;br /&gt;
| 要使用的功能名称&lt;br /&gt;
|-&lt;br /&gt;
| NAME&lt;br /&gt;
| 创建的自定义名字&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 创建并配置大容量存储 ====&lt;br /&gt;
&lt;br /&gt;
创建功能：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img&amp;lt;/pre&amp;gt;&lt;br /&gt;
选择设备或者镜像&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo /mnt/a_virtual_disk.img &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img/lun.0/file&lt;br /&gt;
echo 1 &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img/lun.0/removable&amp;lt;/pre&amp;gt;&lt;br /&gt;
Linux内核的mass_storage支持多个lun，默认会创建lun.0，也可以手动创建其它lun以映射多个设备（不推荐，多lun的大容量存储兼容性不好，建议可以使用多个大容量存储功能替代）&lt;br /&gt;
&lt;br /&gt;
lun.X下有以下内容，可以根据情况填写&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 文件名&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| cdrom&lt;br /&gt;
| 指示是否映射为虚拟光盘(0:普通磁盘，1:虚拟光盘)&lt;br /&gt;
|-&lt;br /&gt;
| file&lt;br /&gt;
| 映射的后端文件或设备绝对路径&lt;br /&gt;
|-&lt;br /&gt;
| forced_eject&lt;br /&gt;
| 写入这个文件将导致lun被强制分离&lt;br /&gt;
|-&lt;br /&gt;
| inquiry_string&lt;br /&gt;
| 设置显示在主机的设备名称&lt;br /&gt;
|-&lt;br /&gt;
| nofua&lt;br /&gt;
| 指示是否使用SCSI FUA标志&lt;br /&gt;
|-&lt;br /&gt;
| removable&lt;br /&gt;
| 指示是否可移除设备(0:不可移除设备，1:可移除设备)&lt;br /&gt;
|-&lt;br /&gt;
| ro&lt;br /&gt;
| 指示是否只读设备(0:可读写，1:只读)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;创建并配置rndis&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== 创建并配置RNDIS ====&lt;br /&gt;
&lt;br /&gt;
创建功能：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/functions/rndis.my_net&amp;lt;/pre&amp;gt;&lt;br /&gt;
初始化成功后，将会创建一个usb0网卡，对端连接到主机&lt;br /&gt;
&lt;br /&gt;
==== 其它功能列表 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 功能&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| mass_storage&lt;br /&gt;
| 大容量存储(BOT协议)&lt;br /&gt;
|-&lt;br /&gt;
| rndis&lt;br /&gt;
| RNDIS虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| ffs&lt;br /&gt;
| FunctionFS 用户空间设备&lt;br /&gt;
|-&lt;br /&gt;
| acm&lt;br /&gt;
| CDC ACM虚拟串口&lt;br /&gt;
|-&lt;br /&gt;
| obex&lt;br /&gt;
| CDC OBEX对象交换&lt;br /&gt;
|-&lt;br /&gt;
| ecm&lt;br /&gt;
| CDC ECM虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| eem&lt;br /&gt;
| CDC EEM虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| ncm&lt;br /&gt;
| CDC NCM虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| geth&lt;br /&gt;
| CDC Subset虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| gser&lt;br /&gt;
| USB串口&lt;br /&gt;
|-&lt;br /&gt;
| hid&lt;br /&gt;
| HID 人类输入设备（鼠标/键盘等）&lt;br /&gt;
|-&lt;br /&gt;
| printer&lt;br /&gt;
| 模拟打印机&lt;br /&gt;
|-&lt;br /&gt;
| tcm&lt;br /&gt;
| SCSI目标映射大容量存储 (UASP协议)&lt;br /&gt;
|-&lt;br /&gt;
| uac1&lt;br /&gt;
| USB音频1.0&lt;br /&gt;
|-&lt;br /&gt;
| uac2&lt;br /&gt;
| USB音频2.0&lt;br /&gt;
|-&lt;br /&gt;
| uvc&lt;br /&gt;
| USB视频(摄像头)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
使用前，可以使用&amp;lt;code&amp;gt;modprobe usbfunc:功能&amp;lt;/code&amp;gt;来加载所需模块。如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;modprobe usbfunc:mass_storage&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 创建配置 ==&lt;br /&gt;
&lt;br /&gt;
创建完功能后，还需要将其链接到配置文件。默认不会创建任何配置文件，需要手动创建&lt;br /&gt;
&lt;br /&gt;
=== 创建一个配置 ===&lt;br /&gt;
&lt;br /&gt;
格式：&amp;lt;code&amp;gt;configs/%NAME%.%INDEX%&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 符号&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| NAME&lt;br /&gt;
| 创建的自定义名字&lt;br /&gt;
|-&lt;br /&gt;
| INDEX&lt;br /&gt;
| 配置文件的序号 必须大于1，且不能重复&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/configs/a.1&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== 链接功能到配置 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ln -s /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/my_func.1&lt;br /&gt;
ln -s /sys/kernel/config/usb_gadget/my_gadget/functions/rndis.my_net /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/my_func.2&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== 填写字符串描述 ===&lt;br /&gt;
&lt;br /&gt;
参考： [[USB Gadget#附注语言id|语言ID]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/strings/0x0409&lt;br /&gt;
echo &amp;quot;MY MASS + RNDIS&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/strings/0x0409/configuration&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 启动设备 ==&lt;br /&gt;
&lt;br /&gt;
在&amp;lt;code&amp;gt;/sys/class/udc&amp;lt;/code&amp;gt;中有可用的USB设备器列表，将其名字写入UDC即可启动gadget&lt;br /&gt;
&lt;br /&gt;
=== 查看可用 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ls -l /sys/class/udc/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;ffff0000.usb&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== 启动gadget ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo ffff0000.usb &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/UDC&amp;lt;/pre&amp;gt;&lt;br /&gt;
此时，主机会成功发现设备&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;[12345.000000] usb 1-1.1: new high-speed USB device number 1 using xhci_hcd&lt;br /&gt;
[12345.000015] usb 1-1.1: New USB device found, idVendor=05f9, idProduct=1234, bcdDevice= 6.08&lt;br /&gt;
[12345.000030] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[12345.000045] usb 1-1.1: Product: My Product&lt;br /&gt;
[12345.000060] usb 1-1.1: Manufacturer: My Vendor&lt;br /&gt;
[12345.000075] usb 1-1.1: SerialNumber: 123456789&lt;br /&gt;
[12345.000100] usb-storage 1-1.1:1.0: USB Mass Storage device detected&lt;br /&gt;
[12345.000115] scsi host0: usb-storage 1-1.1:1.0&lt;br /&gt;
[12345.000130] scsi 0:0:0:0: Direct-Access     Linux    UMS disk 0       ffff PQ: 0 ANSI: 2&lt;br /&gt;
[12345.000145] sd 0:0:0:0: Attached scsi generic sg0 type 0&lt;br /&gt;
[12345.000160] sd 0:0:0:0: [sda] 61071360 512-byte logical blocks: (31.3 GB/29.1 GiB)&lt;br /&gt;
[12345.000175] sd 0:0:0:0: [sda] Write Protect is off&lt;br /&gt;
[12345.000190] sd 0:0:0:0: [sda] Mode Sense: 0f 00 00 00&lt;br /&gt;
[12345.000205] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA&lt;br /&gt;
[12345.000220]  sda: sda1&lt;br /&gt;
[12345.000235] sd 0:0:0:0: [sda] Attached SCSI removable disk&lt;br /&gt;
[12345.000300] rndis_host 1-1.1:1.1 usb0: register 'rndis_host' at usb-0000:01:00.0-1.1, RNDIS device, 1a:2b:3c:4d:5e:6f&lt;br /&gt;
[12345.000315] rndis_host 1-1.1:1.1 enp1s0u1u1: renamed from usb0&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== 停止gadget ===&lt;br /&gt;
&lt;br /&gt;
如果想要停止gadget，则直接写空即可&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/UDC&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;附注语言id&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 附注：语言ID ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID&lt;br /&gt;
! 标识符&lt;br /&gt;
! 语言&lt;br /&gt;
|-&lt;br /&gt;
| 0x0409&lt;br /&gt;
| en-us&lt;br /&gt;
| 英语(美国)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0804&lt;br /&gt;
| zh-cn&lt;br /&gt;
| 中文(中国)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
关于语言ID: https://learn.microsoft.com/en-us/windows/win32/intl/language-identifiers&lt;/div&gt;</summary>
		<author><name>BigfootACA</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=USB_Gadget&amp;diff=599</id>
		<title>USB Gadget</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=USB_Gadget&amp;diff=599"/>
		<updated>2024-03-20T04:06:32Z</updated>

		<summary type="html">&lt;p&gt;BigfootACA：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;linux-usb-gadget&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Linux USB Gadget =&lt;br /&gt;
&lt;br /&gt;
== 概述 ==&lt;br /&gt;
&lt;br /&gt;
Linux在configfs中提供了usb_gadget用于支持USB设备模式。[[关于USB.md|关于USB]]&lt;br /&gt;
&lt;br /&gt;
== 准备configfs ==&lt;br /&gt;
&lt;br /&gt;
在默认情况下，系统会自动挂载configfs，根据发行版不同，可能会挂在到不同的目录：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 系统&lt;br /&gt;
! 目录&lt;br /&gt;
|-&lt;br /&gt;
| Android&lt;br /&gt;
| /config&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| /sys/kernel/config&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
也可以通过以下命令来查看&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mount | grep configfs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果没有挂载，也可以通过以下命令挂载&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mount -t configfs configfs /sys/kernel/config&amp;lt;/pre&amp;gt;&lt;br /&gt;
注：usb_gadget的configfs接口由模块&amp;lt;code&amp;gt;libcomposite&amp;lt;/code&amp;gt;提供&lt;br /&gt;
&lt;br /&gt;
== 创建gadget ==&lt;br /&gt;
&lt;br /&gt;
简单的使用mkdir即可创建一个gadget。如要创建一个名为my_gadget：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget&amp;lt;/pre&amp;gt;&lt;br /&gt;
创建完成后，configfs会自动添加虚拟文件，以下是参照表&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 文件/文件夹名称&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| bcdDevice&lt;br /&gt;
| 设备版本，使用带0x前缀的四个十六进制数字（0x1234，0x89AB）&lt;br /&gt;
|-&lt;br /&gt;
| bcdUSB&lt;br /&gt;
| USB的协议版本，使用带0x前缀的四个十六进制数字（0x0200，0x0301）&lt;br /&gt;
|-&lt;br /&gt;
| idProduct&lt;br /&gt;
| USB设备的产品ID，使用带0x前缀的四个十六进制数字（0x1234，0x89AB）&lt;br /&gt;
|-&lt;br /&gt;
| idVendor&lt;br /&gt;
| USB设备的制造商ID，使用带0x前缀的四个十六进制数字（0x1234，0x89AB）&lt;br /&gt;
|-&lt;br /&gt;
| bDeviceClass&lt;br /&gt;
| USB设备识别的设备类，使用带0x前缀的两个十六进制数字（0x34，0x9A）&lt;br /&gt;
|-&lt;br /&gt;
| bDeviceSubClass&lt;br /&gt;
| USB设备识别的设备子类，使用带0x前缀的两个十六进制数字（0x34，0x9A）&lt;br /&gt;
|-&lt;br /&gt;
| bDeviceProtocol&lt;br /&gt;
| USB设备识别的设备协议，使用带0x前缀的两个十六进制数字（0x34，0x9A）&lt;br /&gt;
|-&lt;br /&gt;
| bMaxPacketSize0&lt;br /&gt;
| 单次包最大传输大小&lt;br /&gt;
|-&lt;br /&gt;
| configs/&lt;br /&gt;
| gadget的配置文件&lt;br /&gt;
|-&lt;br /&gt;
| functions/&lt;br /&gt;
| gadget的子功能&lt;br /&gt;
|-&lt;br /&gt;
| strings/&lt;br /&gt;
| 向主机上报的设备名称&lt;br /&gt;
|-&lt;br /&gt;
| max_speed&lt;br /&gt;
| 支持的最大速度&lt;br /&gt;
|-&lt;br /&gt;
| os_desc&lt;br /&gt;
| 向主机展示的操作系统相关的描述&lt;br /&gt;
|-&lt;br /&gt;
| UDC&lt;br /&gt;
| 使用的USB设备控制器，可以在&amp;lt;code&amp;gt;/sys/class/udc&amp;lt;/code&amp;gt;中选择&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vendor ID、Product ID列表：http://www.linux-usb.org/usb.ids&lt;br /&gt;
&lt;br /&gt;
Class、SubClass、Protocol列表：https://www.usb.org/defined-class-codes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;填写设备id&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 填写设备ID ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo 0x05F9 &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/idVendor&lt;br /&gt;
echo 0x1234 &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/idProduct&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 填写设备字符串描述 ==&lt;br /&gt;
&lt;br /&gt;
参考： [[#附注语言id|语言ID]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409&lt;br /&gt;
echo &amp;quot;My Vendor&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409/manufacturer&lt;br /&gt;
echo &amp;quot;My Product&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409/product&lt;br /&gt;
echo &amp;quot;123456789&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409/serialnumber&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 创建功能 ==&lt;br /&gt;
&lt;br /&gt;
gadget子系统支持非常多的usb功能，也可以使用用户空间的functionfs和主机进行通信。这里演示大容量存储和RNDIS网络&lt;br /&gt;
&lt;br /&gt;
格式：&amp;lt;pre&amp;gt;functions/%FUNC%.%NAME%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 符号&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| FUNC&lt;br /&gt;
| 要使用的功能名称&lt;br /&gt;
|-&lt;br /&gt;
| NAME&lt;br /&gt;
| 创建的自定义名字&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 创建并配置大容量存储 ====&lt;br /&gt;
&lt;br /&gt;
创建功能：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img&amp;lt;/pre&amp;gt;&lt;br /&gt;
选择设备或者镜像&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo /mnt/a_virtual_disk.img &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img/lun.0/file&lt;br /&gt;
echo 1 &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img/lun.0/removable&amp;lt;/pre&amp;gt;&lt;br /&gt;
Linux内核的mass_storage支持多个lun，默认会创建lun.0，也可以手动创建其它lun以映射多个设备（不推荐，多lun的大容量存储兼容性不好，建议可以使用多个大容量存储功能替代）&lt;br /&gt;
&lt;br /&gt;
lun.X下有以下内容，可以根据情况填写&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 文件名&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| cdrom&lt;br /&gt;
| 指示是否映射为虚拟光盘(0:普通磁盘，1:虚拟光盘)&lt;br /&gt;
|-&lt;br /&gt;
| file&lt;br /&gt;
| 映射的后端文件或设备绝对路径&lt;br /&gt;
|-&lt;br /&gt;
| forced_eject&lt;br /&gt;
| 写入这个文件将导致lun被强制分离&lt;br /&gt;
|-&lt;br /&gt;
| inquiry_string&lt;br /&gt;
| 设置显示在主机的设备名称&lt;br /&gt;
|-&lt;br /&gt;
| nofua&lt;br /&gt;
| 指示是否使用SCSI FUA标志&lt;br /&gt;
|-&lt;br /&gt;
| removable&lt;br /&gt;
| 指示是否可移除设备(0:不可移除设备，1:可移除设备)&lt;br /&gt;
|-&lt;br /&gt;
| ro&lt;br /&gt;
| 指示是否只读设备(0:可读写，1:只读)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;创建并配置rndis&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== 创建并配置RNDIS ====&lt;br /&gt;
&lt;br /&gt;
创建功能：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/functions/rndis.my_net&amp;lt;/pre&amp;gt;&lt;br /&gt;
初始化成功后，将会创建一个usb0网卡，对端连接到主机&lt;br /&gt;
&lt;br /&gt;
==== 其它功能列表 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 功能&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| mass_storage&lt;br /&gt;
| 大容量存储(BOT协议)&lt;br /&gt;
|-&lt;br /&gt;
| rndis&lt;br /&gt;
| RNDIS虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| ffs&lt;br /&gt;
| FunctionFS 用户空间设备&lt;br /&gt;
|-&lt;br /&gt;
| acm&lt;br /&gt;
| CDC ACM虚拟串口&lt;br /&gt;
|-&lt;br /&gt;
| obex&lt;br /&gt;
| CDC OBEX对象交换&lt;br /&gt;
|-&lt;br /&gt;
| ecm&lt;br /&gt;
| CDC ECM虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| eem&lt;br /&gt;
| CDC EEM虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| ncm&lt;br /&gt;
| CDC NCM虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| geth&lt;br /&gt;
| CDC Subset虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| gser&lt;br /&gt;
| USB串口&lt;br /&gt;
|-&lt;br /&gt;
| hid&lt;br /&gt;
| HID 人类输入设备（鼠标/键盘等）&lt;br /&gt;
|-&lt;br /&gt;
| printer&lt;br /&gt;
| 模拟打印机&lt;br /&gt;
|-&lt;br /&gt;
| tcm&lt;br /&gt;
| SCSI目标映射大容量存储 (UASP协议)&lt;br /&gt;
|-&lt;br /&gt;
| uac1&lt;br /&gt;
| USB音频1.0&lt;br /&gt;
|-&lt;br /&gt;
| uac2&lt;br /&gt;
| USB音频2.0&lt;br /&gt;
|-&lt;br /&gt;
| uvc&lt;br /&gt;
| USB视频(摄像头)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
使用前，可以使用&amp;lt;code&amp;gt;modprobe usbfunc:功能&amp;lt;/code&amp;gt;来加载所需模块。如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;modprobe usbfunc:mass_storage&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 创建配置 ==&lt;br /&gt;
&lt;br /&gt;
创建完功能后，还需要将其链接到配置文件。默认不会创建任何配置文件，需要手动创建&lt;br /&gt;
&lt;br /&gt;
=== 创建一个配置 ===&lt;br /&gt;
&lt;br /&gt;
格式：&amp;lt;code&amp;gt;configs/%NAME%.%INDEX%&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 符号&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| NAME&lt;br /&gt;
| 创建的自定义名字&lt;br /&gt;
|-&lt;br /&gt;
| INDEX&lt;br /&gt;
| 配置文件的序号 必须大于1，且不能重复&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/configs/a.1&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== 链接功能到配置 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ln -s /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/my_func.1&lt;br /&gt;
ln -s /sys/kernel/config/usb_gadget/my_gadget/functions/rndis.my_net /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/my_func.2&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== 填写字符串描述 ===&lt;br /&gt;
&lt;br /&gt;
参考： [[#附注语言id|语言ID]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/strings/0x0409&lt;br /&gt;
echo &amp;quot;MY MASS + RNDIS&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/strings/0x0409/configuration&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 启动设备 ==&lt;br /&gt;
&lt;br /&gt;
在&amp;lt;code&amp;gt;/sys/class/udc&amp;lt;/code&amp;gt;中有可用的USB设备器列表，将其名字写入UDC即可启动gadget&lt;br /&gt;
&lt;br /&gt;
=== 查看可用 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ls -l /sys/class/udc/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;ffff0000.usb&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== 启动gadget ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo ffff0000.usb &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/UDC&amp;lt;/pre&amp;gt;&lt;br /&gt;
此时，主机会成功发现设备&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;[12345.000000] usb 1-1.1: new high-speed USB device number 1 using xhci_hcd&lt;br /&gt;
[12345.000015] usb 1-1.1: New USB device found, idVendor=05f9, idProduct=1234, bcdDevice= 6.08&lt;br /&gt;
[12345.000030] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[12345.000045] usb 1-1.1: Product: My Product&lt;br /&gt;
[12345.000060] usb 1-1.1: Manufacturer: My Vendor&lt;br /&gt;
[12345.000075] usb 1-1.1: SerialNumber: 123456789&lt;br /&gt;
[12345.000100] usb-storage 1-1.1:1.0: USB Mass Storage device detected&lt;br /&gt;
[12345.000115] scsi host0: usb-storage 1-1.1:1.0&lt;br /&gt;
[12345.000130] scsi 0:0:0:0: Direct-Access     Linux    UMS disk 0       ffff PQ: 0 ANSI: 2&lt;br /&gt;
[12345.000145] sd 0:0:0:0: Attached scsi generic sg0 type 0&lt;br /&gt;
[12345.000160] sd 0:0:0:0: [sda] 61071360 512-byte logical blocks: (31.3 GB/29.1 GiB)&lt;br /&gt;
[12345.000175] sd 0:0:0:0: [sda] Write Protect is off&lt;br /&gt;
[12345.000190] sd 0:0:0:0: [sda] Mode Sense: 0f 00 00 00&lt;br /&gt;
[12345.000205] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA&lt;br /&gt;
[12345.000220]  sda: sda1&lt;br /&gt;
[12345.000235] sd 0:0:0:0: [sda] Attached SCSI removable disk&lt;br /&gt;
[12345.000300] rndis_host 1-1.1:1.1 usb0: register 'rndis_host' at usb-0000:01:00.0-1.1, RNDIS device, 1a:2b:3c:4d:5e:6f&lt;br /&gt;
[12345.000315] rndis_host 1-1.1:1.1 enp1s0u1u1: renamed from usb0&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== 停止gadget ===&lt;br /&gt;
&lt;br /&gt;
如果想要停止gadget，则直接写空即可&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/UDC&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;附注语言id&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 附注：语言ID ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID&lt;br /&gt;
! 标识符&lt;br /&gt;
! 语言&lt;br /&gt;
|-&lt;br /&gt;
| 0x0409&lt;br /&gt;
| en-us&lt;br /&gt;
| 英语(美国)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0804&lt;br /&gt;
| zh-cn&lt;br /&gt;
| 中文(中国)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
关于语言ID: https://learn.microsoft.com/en-us/windows/win32/intl/language-identifiers&lt;/div&gt;</summary>
		<author><name>BigfootACA</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=USB_Gadget&amp;diff=598</id>
		<title>USB Gadget</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=USB_Gadget&amp;diff=598"/>
		<updated>2024-03-20T04:02:00Z</updated>

		<summary type="html">&lt;p&gt;BigfootACA：​创建页面，内容为“&amp;lt;span id=&amp;quot;linux-usb-gadget&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; = Linux USB Gadget =  == 概述 ==  Linux在configfs中提供了usb_gadget用于支持USB设备模式。关于USB  == 准备configfs ==  在默认情况下，系统会自动挂载configfs，根据发行版不同，可能会挂在到不同的目录：  {| class=&amp;quot;wikitable&amp;quot; |- ! 系统 ! 目录 |- | Android | /config |- | GNU/Linux | /sys/kernel/config |}  也可以通过以下命令来查看  &amp;lt;code&amp;gt;mount | gre…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;linux-usb-gadget&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Linux USB Gadget =&lt;br /&gt;
&lt;br /&gt;
== 概述 ==&lt;br /&gt;
&lt;br /&gt;
Linux在configfs中提供了usb_gadget用于支持USB设备模式。[[关于USB.md|关于USB]]&lt;br /&gt;
&lt;br /&gt;
== 准备configfs ==&lt;br /&gt;
&lt;br /&gt;
在默认情况下，系统会自动挂载configfs，根据发行版不同，可能会挂在到不同的目录：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 系统&lt;br /&gt;
! 目录&lt;br /&gt;
|-&lt;br /&gt;
| Android&lt;br /&gt;
| /config&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux&lt;br /&gt;
| /sys/kernel/config&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
也可以通过以下命令来查看&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mount | grep configfs&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果没有挂载，也可以通过以下命令挂载&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mount -t configfs configfs /sys/kernel/config&amp;lt;/code&amp;gt;&lt;br /&gt;
注：usb_gadget的configfs接口由模块&amp;lt;code&amp;gt;libcomposite&amp;lt;/code&amp;gt;提供&lt;br /&gt;
&lt;br /&gt;
== 创建gadget ==&lt;br /&gt;
&lt;br /&gt;
简单的使用mkdir即可创建一个gadget。如要创建一个名为my_gadget：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget&amp;lt;/code&amp;gt;&lt;br /&gt;
创建完成后，configfs会自动添加虚拟文件，以下是参照表&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 文件/文件夹名称&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| bcdDevice&lt;br /&gt;
| 设备版本，使用带0x前缀的四个十六进制数字（0x1234，0x89AB）&lt;br /&gt;
|-&lt;br /&gt;
| bcdUSB&lt;br /&gt;
| USB的协议版本，使用带0x前缀的四个十六进制数字（0x0200，0x0301）&lt;br /&gt;
|-&lt;br /&gt;
| idProduct&lt;br /&gt;
| USB设备的产品ID，使用带0x前缀的四个十六进制数字（0x1234，0x89AB）&lt;br /&gt;
|-&lt;br /&gt;
| idVendor&lt;br /&gt;
| USB设备的制造商ID，使用带0x前缀的四个十六进制数字（0x1234，0x89AB）&lt;br /&gt;
|-&lt;br /&gt;
| bDeviceClass&lt;br /&gt;
| USB设备识别的设备类，使用带0x前缀的两个十六进制数字（0x34，0x9A）&lt;br /&gt;
|-&lt;br /&gt;
| bDeviceSubClass&lt;br /&gt;
| USB设备识别的设备子类，使用带0x前缀的两个十六进制数字（0x34，0x9A）&lt;br /&gt;
|-&lt;br /&gt;
| bDeviceProtocol&lt;br /&gt;
| USB设备识别的设备协议，使用带0x前缀的两个十六进制数字（0x34，0x9A）&lt;br /&gt;
|-&lt;br /&gt;
| bMaxPacketSize0&lt;br /&gt;
| 单次包最大传输大小&lt;br /&gt;
|-&lt;br /&gt;
| configs/&lt;br /&gt;
| gadget的配置文件&lt;br /&gt;
|-&lt;br /&gt;
| functions/&lt;br /&gt;
| gadget的子功能&lt;br /&gt;
|-&lt;br /&gt;
| strings/&lt;br /&gt;
| 向主机上报的设备名称&lt;br /&gt;
|-&lt;br /&gt;
| max_speed&lt;br /&gt;
| 支持的最大速度&lt;br /&gt;
|-&lt;br /&gt;
| os_desc&lt;br /&gt;
| 向主机展示的操作系统相关的描述&lt;br /&gt;
|-&lt;br /&gt;
| UDC&lt;br /&gt;
| 使用的USB设备控制器，可以在&amp;lt;code&amp;gt;/sys/class/udc&amp;lt;/code&amp;gt;中选择&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vendor ID、Product ID列表：http://www.linux-usb.org/usb.ids&lt;br /&gt;
&lt;br /&gt;
Class、SubClass、Protocol列表：https://www.usb.org/defined-class-codes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;填写设备id&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 填写设备ID ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo 0x05F9 &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/idVendor&lt;br /&gt;
echo 0x1234 &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/idProduct&amp;lt;/code&amp;gt;&lt;br /&gt;
== 填写设备字符串描述 ==&lt;br /&gt;
&lt;br /&gt;
参考： [[#附注语言id|语言ID]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409&lt;br /&gt;
echo &amp;quot;My Vendor&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409/manufacturer&lt;br /&gt;
echo &amp;quot;My Product&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409/product&lt;br /&gt;
echo &amp;quot;123456789&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/strings/0x0409/serialnumber&amp;lt;/code&amp;gt;&lt;br /&gt;
== 创建功能 ==&lt;br /&gt;
&lt;br /&gt;
gadget子系统支持非常多的usb功能，也可以使用用户空间的functionfs和主机进行通信。这里演示大容量存储和RNDIS网络&lt;br /&gt;
&lt;br /&gt;
格式：&amp;lt;code&amp;gt;functions/%FUNC%.%NAME%&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 符号&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| FUNC&lt;br /&gt;
| 要使用的功能名称&lt;br /&gt;
|-&lt;br /&gt;
| NAME&lt;br /&gt;
| 创建的自定义名字&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 创建并配置大容量存储 ====&lt;br /&gt;
&lt;br /&gt;
创建功能：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img&amp;lt;/code&amp;gt;&lt;br /&gt;
选择设备或者镜像&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo /mnt/a_virtual_disk.img &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img/lun.0/file&lt;br /&gt;
echo 1 &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img/lun.0/removable&amp;lt;/code&amp;gt;&lt;br /&gt;
Linux内核的mass_storage支持多个lun，默认会创建lun.0，也可以手动创建其它lun以映射多个设备（不推荐，多lun的大容量存储兼容性不好，建议可以使用多个大容量存储功能替代）&lt;br /&gt;
&lt;br /&gt;
lun.X下有以下内容，可以根据情况填写&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 文件名&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| cdrom&lt;br /&gt;
| 指示是否映射为虚拟光盘(0:普通磁盘，1:虚拟光盘)&lt;br /&gt;
|-&lt;br /&gt;
| file&lt;br /&gt;
| 映射的后端文件或设备绝对路径&lt;br /&gt;
|-&lt;br /&gt;
| forced_eject&lt;br /&gt;
| 写入这个文件将导致lun被强制分离&lt;br /&gt;
|-&lt;br /&gt;
| inquiry_string&lt;br /&gt;
| 设置显示在主机的设备名称&lt;br /&gt;
|-&lt;br /&gt;
| nofua&lt;br /&gt;
| 指示是否使用SCSI FUA标志&lt;br /&gt;
|-&lt;br /&gt;
| removable&lt;br /&gt;
| 指示是否可移除设备(0:不可移除设备，1:可移除设备)&lt;br /&gt;
|-&lt;br /&gt;
| ro&lt;br /&gt;
| 指示是否只读设备(0:可读写，1:只读)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;创建并配置rndis&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== 创建并配置RNDIS ====&lt;br /&gt;
&lt;br /&gt;
创建功能：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/functions/rndis.my_net&amp;lt;/code&amp;gt;&lt;br /&gt;
初始化成功后，将会创建一个usb0网卡，对端连接到主机&lt;br /&gt;
&lt;br /&gt;
==== 其它功能列表 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 功能&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| mass_storage&lt;br /&gt;
| 大容量存储(BOT协议)&lt;br /&gt;
|-&lt;br /&gt;
| rndis&lt;br /&gt;
| RNDIS虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| ffs&lt;br /&gt;
| FunctionFS 用户空间设备&lt;br /&gt;
|-&lt;br /&gt;
| acm&lt;br /&gt;
| CDC ACM虚拟串口&lt;br /&gt;
|-&lt;br /&gt;
| obex&lt;br /&gt;
| CDC OBEX对象交换&lt;br /&gt;
|-&lt;br /&gt;
| ecm&lt;br /&gt;
| CDC ECM虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| eem&lt;br /&gt;
| CDC EEM虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| ncm&lt;br /&gt;
| CDC NCM虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| geth&lt;br /&gt;
| CDC Subset虚拟网卡&lt;br /&gt;
|-&lt;br /&gt;
| gser&lt;br /&gt;
| USB串口&lt;br /&gt;
|-&lt;br /&gt;
| hid&lt;br /&gt;
| HID 人类输入设备（鼠标/键盘等）&lt;br /&gt;
|-&lt;br /&gt;
| printer&lt;br /&gt;
| 模拟打印机&lt;br /&gt;
|-&lt;br /&gt;
| tcm&lt;br /&gt;
| SCSI目标映射大容量存储 (UASP协议)&lt;br /&gt;
|-&lt;br /&gt;
| uac1&lt;br /&gt;
| USB音频1.0&lt;br /&gt;
|-&lt;br /&gt;
| uac2&lt;br /&gt;
| USB音频2.0&lt;br /&gt;
|-&lt;br /&gt;
| uvc&lt;br /&gt;
| USB视频(摄像头)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
使用前，可以使用&amp;lt;code&amp;gt;modprobe usbfunc:功能&amp;lt;/code&amp;gt;来加载所需模块。如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;modprobe usbfunc:mass_storage&amp;lt;/code&amp;gt;&lt;br /&gt;
== 创建配置 ==&lt;br /&gt;
&lt;br /&gt;
创建完功能后，还需要将其链接到配置文件。默认不会创建任何配置文件，需要手动创建&lt;br /&gt;
&lt;br /&gt;
=== 创建一个配置 ===&lt;br /&gt;
&lt;br /&gt;
格式：&amp;lt;code&amp;gt;configs/%NAME%.%INDEX%&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 符号&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| NAME&lt;br /&gt;
| 创建的自定义名字&lt;br /&gt;
|-&lt;br /&gt;
| INDEX&lt;br /&gt;
| 配置文件的序号 必须大于1，且不能重复&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/configs/a.1&amp;lt;/code&amp;gt;&lt;br /&gt;
=== 链接功能到配置 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /sys/kernel/config/usb_gadget/my_gadget/functions/mass_storage.my_img /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/my_func.1&lt;br /&gt;
ln -s /sys/kernel/config/usb_gadget/my_gadget/functions/rndis.my_net /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/my_func.2&amp;lt;/code&amp;gt;&lt;br /&gt;
=== 填写字符串描述 ===&lt;br /&gt;
&lt;br /&gt;
参考： [[#附注语言id|语言ID]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/strings/0x0409&lt;br /&gt;
echo &amp;quot;MY MASS + RNDIS&amp;quot; &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/configs/a.1/strings/0x0409/configuration&amp;lt;/code&amp;gt;&lt;br /&gt;
== 启动设备 ==&lt;br /&gt;
&lt;br /&gt;
在&amp;lt;code&amp;gt;/sys/class/udc&amp;lt;/code&amp;gt;中有可用的USB设备器列表，将其名字写入UDC即可启动gadget&lt;br /&gt;
&lt;br /&gt;
=== 查看可用 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls -l /sys/class/udc/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;ffff0000.usb&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== 启动gadget ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo ffff0000.usb &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/UDC&amp;lt;/code&amp;gt;&lt;br /&gt;
此时，主机会成功发现设备&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;[12345.000000] usb 1-1.1: new high-speed USB device number 1 using xhci_hcd&lt;br /&gt;
[12345.000015] usb 1-1.1: New USB device found, idVendor=05f9, idProduct=1234, bcdDevice= 6.08&lt;br /&gt;
[12345.000030] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[12345.000045] usb 1-1.1: Product: My Product&lt;br /&gt;
[12345.000060] usb 1-1.1: Manufacturer: My Vendor&lt;br /&gt;
[12345.000075] usb 1-1.1: SerialNumber: 123456789&lt;br /&gt;
[12345.000100] usb-storage 1-1.1:1.0: USB Mass Storage device detected&lt;br /&gt;
[12345.000115] scsi host0: usb-storage 1-1.1:1.0&lt;br /&gt;
[12345.000130] scsi 0:0:0:0: Direct-Access     Linux    UMS disk 0       ffff PQ: 0 ANSI: 2&lt;br /&gt;
[12345.000145] sd 0:0:0:0: Attached scsi generic sg0 type 0&lt;br /&gt;
[12345.000160] sd 0:0:0:0: [sda] 61071360 512-byte logical blocks: (31.3 GB/29.1 GiB)&lt;br /&gt;
[12345.000175] sd 0:0:0:0: [sda] Write Protect is off&lt;br /&gt;
[12345.000190] sd 0:0:0:0: [sda] Mode Sense: 0f 00 00 00&lt;br /&gt;
[12345.000205] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA&lt;br /&gt;
[12345.000220]  sda: sda1&lt;br /&gt;
[12345.000235] sd 0:0:0:0: [sda] Attached SCSI removable disk&lt;br /&gt;
[12345.000300] rndis_host 1-1.1:1.1 usb0: register 'rndis_host' at usb-0000:01:00.0-1.1, RNDIS device, 1a:2b:3c:4d:5e:6f&lt;br /&gt;
[12345.000315] rndis_host 1-1.1:1.1 enp1s0u1u1: renamed from usb0&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== 停止gadget ===&lt;br /&gt;
&lt;br /&gt;
如果想要停止gadget，则直接写空即可&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo &amp;gt; /sys/kernel/config/usb_gadget/my_gadget/UDC&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;附注语言id&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 附注：语言ID ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID&lt;br /&gt;
! 标识符&lt;br /&gt;
! 语言&lt;br /&gt;
|-&lt;br /&gt;
| 0x0409&lt;br /&gt;
| en-us&lt;br /&gt;
| 英语(美国)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0804&lt;br /&gt;
| zh-cn&lt;br /&gt;
| 中文(中国)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
关于语言ID: https://learn.microsoft.com/en-us/windows/win32/intl/language-identifiers&lt;/div&gt;</summary>
		<author><name>BigfootACA</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E5%85%B3%E4%BA%8EUSB&amp;diff=597</id>
		<title>关于USB</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E5%85%B3%E4%BA%8EUSB&amp;diff=597"/>
		<updated>2024-03-20T03:54:27Z</updated>

		<summary type="html">&lt;p&gt;BigfootACA：​创建页面，内容为“&amp;lt;span id=&amp;quot;usb&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; = USB =  &amp;lt;span id=&amp;quot;usb简述&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; == USB简述 ==  众所周知，USB分为Host(主机)和Device(设备)两种模式，像普通的PC通常工作在主机端，U盘、鼠标等设备则工作在设备端。在移动设备上则有OTG(On The Go)，可以根据需要选择作为主机端或者设备端。  USB: Universal Serial Bus  &amp;lt;span id=&amp;quot;usb版本&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; == USB版本 ==  &amp;lt;span id=&amp;quot;usb-10&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; === USB 1.0 ===  USB 1.0至USB 2.…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;usb&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= USB =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb简述&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== USB简述 ==&lt;br /&gt;
&lt;br /&gt;
众所周知，USB分为Host(主机)和Device(设备)两种模式，像普通的PC通常工作在主机端，U盘、鼠标等设备则工作在设备端。在移动设备上则有OTG(On The Go)，可以根据需要选择作为主机端或者设备端。&lt;br /&gt;
&lt;br /&gt;
USB: Universal Serial Bus&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb版本&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== USB版本 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-10&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB 1.0 ===&lt;br /&gt;
&lt;br /&gt;
USB 1.0至USB 2.0具有一对差分线对(半双工 D+, D-)&lt;br /&gt;
&lt;br /&gt;
最大速度1.5Mbit/s，标准名称为Low-Speed(LS)，常用控制器ohci&lt;br /&gt;
&lt;br /&gt;
常见于：鼠标/键盘/串口转换器/低速单片机&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-11&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB 1.1 ===&lt;br /&gt;
&lt;br /&gt;
最大速度12Mbit/s，标准名称为Full-Speed(FS)，常用控制器ohci&lt;br /&gt;
&lt;br /&gt;
常见于：鼠标/键盘/串口转换器/低速单片机&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-20&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB 2.0 ===&lt;br /&gt;
&lt;br /&gt;
最大速度480Mbit/s，标准名称为High-Speed(HS)，常用控制器ehci&lt;br /&gt;
&lt;br /&gt;
这个版本是最为常见的USB版本&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-30&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB 3.0 ===&lt;br /&gt;
&lt;br /&gt;
最大速度5Gbit/s，标准名称为Super-Speed(SS)，常用控制器xhci&lt;br /&gt;
&lt;br /&gt;
常见于：高速U盘/移动硬盘/手机等&lt;br /&gt;
&lt;br /&gt;
注：从这个版本开始，USB 2及以前的差分信号线和USB 3的差分信号线分开，在物理上为两个USB控制器，D+和D-用于向下兼容USB 2及以前的版本，另外两对差分信号线则专门用于传输USB 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-31&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB 3.1 ===&lt;br /&gt;
&lt;br /&gt;
最大速度10Gbit/s，标准名称为Super-Speed+(SS+)，常用控制器xhci&lt;br /&gt;
&lt;br /&gt;
分为Gen 2x1、Gen 1x2两种&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-32&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB 3.2 ===&lt;br /&gt;
&lt;br /&gt;
最大速度40Gbit/s&lt;br /&gt;
&lt;br /&gt;
基于雷电3(Thunderbolt 3)协议&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB 4.0 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;附注usb-3-gen-1x1gen-1x2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 附注：USB 3 Gen 1x1、Gen 1x2 ===&lt;br /&gt;
&lt;br /&gt;
具有两对差分线对 (全双工 SSTX+, SSTX-, SSRX+, SSRX-)&lt;br /&gt;
&lt;br /&gt;
Gen 1x1 速度为5Gbit&lt;br /&gt;
&lt;br /&gt;
Gen 1x2 速度为10Gbit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;附注usb-3-gen-2x1gen-2x2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 附注：USB 3 Gen 2x1、Gen 2x2 ===&lt;br /&gt;
&lt;br /&gt;
具有四对差分线对 (全双工 SSTX1+, SSTX1-, SSRX1+, SSRX1-, SSTX2+, SSTX2-, SSRX2+, SSRX2-)&lt;br /&gt;
&lt;br /&gt;
Gen 2x1 速度为10Gbit&lt;br /&gt;
&lt;br /&gt;
Gen 2x2 速度为20Gbit&lt;br /&gt;
&lt;br /&gt;
不同于Gen 1x1、Gen 1x2，这个版本只支持USB Type-C(引脚数量较多)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;常见的usb接口&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 常见的USB接口 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-type-a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB Type-A ===&lt;br /&gt;
&lt;br /&gt;
[[File:https://bkimg.cdn.bcebos.com/pic/7ab514d196f4eee3572c84fb|thumb|none]]&lt;br /&gt;
&lt;br /&gt;
这个接口常见于大部分PC和设备，分为公口和母口。标准实现的Type-A同时只支持主机端(母口)或者设备端(公口)。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-101120-引脚定义&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== USB 1.0/1.1/2.0 引脚定义 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 引脚&lt;br /&gt;
! 功能&lt;br /&gt;
|-&lt;br /&gt;
| VBUS&lt;br /&gt;
| 电源正(红)&lt;br /&gt;
|-&lt;br /&gt;
| D-&lt;br /&gt;
| USB差分数据负(白)&lt;br /&gt;
|-&lt;br /&gt;
| D+&lt;br /&gt;
| USB差分数据正(绿)&lt;br /&gt;
|-&lt;br /&gt;
| GND&lt;br /&gt;
| 电源地(黑)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-3031-额外引脚定义&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB 3.0/3.1 额外引脚定义 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 引脚&lt;br /&gt;
! 功能&lt;br /&gt;
|-&lt;br /&gt;
| SSTX+&lt;br /&gt;
| USB 3 差分发送正&lt;br /&gt;
|-&lt;br /&gt;
| SSTX−&lt;br /&gt;
| USB 3 差分发送负&lt;br /&gt;
|-&lt;br /&gt;
| GND&lt;br /&gt;
| 信号地&lt;br /&gt;
|-&lt;br /&gt;
| SSRX+&lt;br /&gt;
| USB 3 差分接收正&lt;br /&gt;
|-&lt;br /&gt;
| SSRX−&lt;br /&gt;
| USB 3 差分接收负&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-micro-b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB Micro-B ===&lt;br /&gt;
&lt;br /&gt;
[[File:https://bkimg.cdn.bcebos.com/pic/63d9f2d3572c11df988d7c4e622762d0f703c27b|thumb|none]]&lt;br /&gt;
&lt;br /&gt;
可以在较旧的可移动电子设备找到，支持OTG（通过ID脚）&lt;br /&gt;
&lt;br /&gt;
==== 引脚定义 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 引脚&lt;br /&gt;
! 功能&lt;br /&gt;
|-&lt;br /&gt;
| VBUS&lt;br /&gt;
| 电源正&lt;br /&gt;
|-&lt;br /&gt;
| D-&lt;br /&gt;
| USB差分数据负&lt;br /&gt;
|-&lt;br /&gt;
| D+&lt;br /&gt;
| USB差分数据正&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| 模式检测&lt;br /&gt;
|-&lt;br /&gt;
| GND&lt;br /&gt;
| 电源地&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;usb-type-c&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== USB Type-C ===&lt;br /&gt;
&lt;br /&gt;
[[File:https://bkimg.cdn.bcebos.com/pic/a6efce1b9d16fdfa211d01e4bb8f8c5494ee7b43|thumb|none]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;引脚定义-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== 引脚定义 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 功能A&lt;br /&gt;
! 引脚A&lt;br /&gt;
! 引脚B&lt;br /&gt;
! 功能B&lt;br /&gt;
|-&lt;br /&gt;
| 接地&lt;br /&gt;
| GND&lt;br /&gt;
| GND&lt;br /&gt;
| 接地&lt;br /&gt;
|-&lt;br /&gt;
| USB 3 差分1发送正&lt;br /&gt;
| SSTX1+&lt;br /&gt;
| SSRX1+&lt;br /&gt;
| USB 3 差分1接收正&lt;br /&gt;
|-&lt;br /&gt;
| USB 3 差分1发送负&lt;br /&gt;
| SSTX1-&lt;br /&gt;
| SSRX1-&lt;br /&gt;
| USB 3 差分1接收负&lt;br /&gt;
|-&lt;br /&gt;
| 电源正&lt;br /&gt;
| VBUS&lt;br /&gt;
| VBUS&lt;br /&gt;
| 电源正&lt;br /&gt;
|-&lt;br /&gt;
| 配置通道1&lt;br /&gt;
| CC1&lt;br /&gt;
| SBU2&lt;br /&gt;
| 边带使用2&lt;br /&gt;
|-&lt;br /&gt;
| USB差分数据正&lt;br /&gt;
| D+&lt;br /&gt;
| D-&lt;br /&gt;
| USB差分数据负&lt;br /&gt;
|-&lt;br /&gt;
| USB差分数据负&lt;br /&gt;
| D-&lt;br /&gt;
| D+&lt;br /&gt;
| USB差分数据正&lt;br /&gt;
|-&lt;br /&gt;
| 边带使用1&lt;br /&gt;
| SBU1&lt;br /&gt;
| CC2&lt;br /&gt;
| 配置通道2&lt;br /&gt;
|-&lt;br /&gt;
| 电源正&lt;br /&gt;
| VBUS&lt;br /&gt;
| VBUS&lt;br /&gt;
| 电源正&lt;br /&gt;
|-&lt;br /&gt;
| USB 3 差分2接收负&lt;br /&gt;
| SSRX2-&lt;br /&gt;
| SSTX2-&lt;br /&gt;
| USB 3 差分2发送负&lt;br /&gt;
|-&lt;br /&gt;
| USB 3 差分2接收正&lt;br /&gt;
| SSRX2+&lt;br /&gt;
| SSTX2+&lt;br /&gt;
| USB 3 差分2发送正&lt;br /&gt;
|-&lt;br /&gt;
| 接地&lt;br /&gt;
| GND&lt;br /&gt;
| GND&lt;br /&gt;
| 接地&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 其它可参考资料 ==&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/USB&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/USB-C&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/USB_On-The-Go&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/USB_hardware&lt;/div&gt;</summary>
		<author><name>BigfootACA</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=ARM-v8a%E5%BC%82%E5%B8%B8%E7%AD%89%E7%BA%A7&amp;diff=562</id>
		<title>ARM-v8a异常等级</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=ARM-v8a%E5%BC%82%E5%B8%B8%E7%AD%89%E7%BA%A7&amp;diff=562"/>
		<updated>2024-02-20T10:58:48Z</updated>

		<summary type="html">&lt;p&gt;BigfootACA：​创建页面，内容为“{| class=&amp;quot;wikitable&amp;quot; |+ !等级 !值 !长名称 !描述 !调用指令 |- |EL3 |0xC/12 |Secure Monitor |固件或安全监视器 |SMC |- |EL2 |0x8/8 |Hyper Visor |虚拟化管理器 |HVC |- |EL1 |0x4/4 |Super Visor |操作系统内核 |SVC |- |EL0 | - |Application |用户程序 | - |} 每个异常等级都拥有自己的MMU页表，内存可隔离，高等级的环境可以访问低等级的寄存器和内存  当程序执行调用指令时，会进入目标等…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!等级&lt;br /&gt;
!值&lt;br /&gt;
!长名称&lt;br /&gt;
!描述&lt;br /&gt;
!调用指令&lt;br /&gt;
|-&lt;br /&gt;
|EL3&lt;br /&gt;
|0xC/12&lt;br /&gt;
|Secure Monitor&lt;br /&gt;
|固件或安全监视器&lt;br /&gt;
|SMC&lt;br /&gt;
|-&lt;br /&gt;
|EL2&lt;br /&gt;
|0x8/8&lt;br /&gt;
|Hyper Visor&lt;br /&gt;
|虚拟化管理器&lt;br /&gt;
|HVC&lt;br /&gt;
|-&lt;br /&gt;
|EL1&lt;br /&gt;
|0x4/4&lt;br /&gt;
|Super Visor&lt;br /&gt;
|操作系统内核&lt;br /&gt;
|SVC&lt;br /&gt;
|-&lt;br /&gt;
|EL0&lt;br /&gt;
| -&lt;br /&gt;
|Application&lt;br /&gt;
|用户程序&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
每个异常等级都拥有自己的MMU页表，内存可隔离，高等级的环境可以访问低等级的寄存器和内存&lt;br /&gt;
&lt;br /&gt;
当程序执行调用指令时，会进入目标等级先前设置的向量表（VBAR_ELX）以处理调用&lt;br /&gt;
&lt;br /&gt;
当程序进行跨级调用时，直属上级可以截获并处理调用，并将返回地址设置在ELR寄存器。触发ERET时，将回到低等级的ELR处继续执行&lt;br /&gt;
&lt;br /&gt;
Linux操作系统内核的KVM需要Linux内核以EL2等级进行启动，vhe将会在EL2下保持运行成为Hypervisor&lt;br /&gt;
&lt;br /&gt;
==== 高通平台启动示意图 ====&lt;br /&gt;
[[文件:20210127170824367.png|居中]]&lt;/div&gt;</summary>
		<author><name>BigfootACA</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:20210127170824367.png&amp;diff=561</id>
		<title>文件:20210127170824367.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=%E6%96%87%E4%BB%B6:20210127170824367.png&amp;diff=561"/>
		<updated>2024-02-20T10:54:47Z</updated>

		<summary type="html">&lt;p&gt;BigfootACA：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>BigfootACA</name></author>
	</entry>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Fastboot%E5%8D%8F%E8%AE%AE&amp;diff=559</id>
		<title>Fastboot协议</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastboot%E5%8D%8F%E8%AE%AE&amp;diff=559"/>
		<updated>2024-02-20T10:15:19Z</updated>

		<summary type="html">&lt;p&gt;BigfootACA：​简单添加Fastboot协议描述&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;大部分安卓手机的引导程序实现了一个名为Fastboot的协议，可以通过USB向设备刷写/启动操作系统，或者读取一些信息。常见的BL锁指的就是fastboot和avb(Android Verified Boot安卓验证启动）是否强制验证签名。&lt;br /&gt;
&lt;br /&gt;
==== 设备识别ID ====&lt;br /&gt;
USB Class: 0xFF, SubClass: 0x42, Protocol: 0x03&lt;br /&gt;
&lt;br /&gt;
DeviceInterfaceGUIDs: {F72FE0D4-CBCB-407D-8814-9ED673D0DD6B}&lt;br /&gt;
&lt;br /&gt;
Windows: USB\MS_COMP_WINUSB&lt;br /&gt;
&lt;br /&gt;
Windows: USB\Class_ff&amp;amp;SubClass_42&amp;amp;Prot_03&lt;br /&gt;
&lt;br /&gt;
==== 关于驱动 ====&lt;br /&gt;
Fastboot不需要驱动。&lt;br /&gt;
&lt;br /&gt;
在Linux下，fastboot工具直接读写/dev/bus/usb/XXX/XXX设备进行通信&lt;br /&gt;
&lt;br /&gt;
在Windows下，fastboot工具通过WinUSB（对于裸USB设备的包装，Windows不允许直接读写USB设备，此驱动系统内置）和设备进行通信&lt;br /&gt;
&lt;br /&gt;
WINUSB: C:\Windows\INF\winusb.INF  C:\Windows\System32\drivers\winusb.sys&lt;br /&gt;
&lt;br /&gt;
==== 主机端命令请求格式： ====&lt;br /&gt;
&lt;br /&gt;
* getvar:%s&lt;br /&gt;
&lt;br /&gt;
该命令用于从设备读取一个变量&lt;br /&gt;
&lt;br /&gt;
getvar:current-slot&lt;br /&gt;
&lt;br /&gt;
%s：任意字符串（变量名称）&lt;br /&gt;
&lt;br /&gt;
* download:%08x&lt;br /&gt;
&lt;br /&gt;
该命令表示即将向设备的缓冲区发送指定大小的数据用于刷写/启动等等&lt;br /&gt;
&lt;br /&gt;
%08x: 8字长的十六进制数（数据大小）&lt;br /&gt;
&lt;br /&gt;
小写x表示数字以小写十六进制表示，8表示不满8字长则填充，0表示使用0填充&lt;br /&gt;
&lt;br /&gt;
示例：download:0000A000&lt;br /&gt;
&lt;br /&gt;
* flash:%s&lt;br /&gt;
&lt;br /&gt;
将缓冲区中的数据刷入指定分区&lt;br /&gt;
&lt;br /&gt;
%s：任意字符串（分区名称）&lt;br /&gt;
&lt;br /&gt;
* reboot&lt;br /&gt;
&lt;br /&gt;
重启设备&lt;br /&gt;
&lt;br /&gt;
==== 设备端响应格式 ====&lt;br /&gt;
&lt;br /&gt;
* OKAY / OKAY%s&lt;br /&gt;
&lt;br /&gt;
表示命令已成功执行，并附带信息&lt;br /&gt;
&lt;br /&gt;
%s：任意字符串（状态信息）&lt;br /&gt;
&lt;br /&gt;
示例：OKAY&lt;br /&gt;
&lt;br /&gt;
示例：OKAYyes&lt;br /&gt;
&lt;br /&gt;
示例：OKAYcommand done&lt;br /&gt;
&lt;br /&gt;
* INFO%s&lt;br /&gt;
&lt;br /&gt;
命令执行中上报状态信息&lt;br /&gt;
&lt;br /&gt;
%s：任意字符串（状态信息）&lt;br /&gt;
&lt;br /&gt;
示例：INFOflashing&lt;br /&gt;
&lt;br /&gt;
* FAIL / FAIL%s&lt;br /&gt;
&lt;br /&gt;
表示命令执行失败，并附带信息&lt;br /&gt;
&lt;br /&gt;
%s：任意字符串（状态信息）&lt;br /&gt;
&lt;br /&gt;
示例：FAIL&lt;br /&gt;
&lt;br /&gt;
示例：FAILunknown command&lt;br /&gt;
&lt;br /&gt;
示例：FAILwrite failed&lt;br /&gt;
&lt;br /&gt;
* DATA%08x&lt;br /&gt;
&lt;br /&gt;
表示设备已准备好接收主机端发来的数据（通常由download:%08x发起）&lt;br /&gt;
&lt;br /&gt;
%08x: 8字长的十六进制数（数据大小）&lt;br /&gt;
&lt;br /&gt;
小写x表示数字以小写十六进制表示，8表示不满8字长则填充，0表示使用0填充&lt;br /&gt;
&lt;br /&gt;
示例：DATA0000A000&lt;br /&gt;
&lt;br /&gt;
==== 示例命令分析 ====&lt;br /&gt;
&lt;br /&gt;
* fastboot getvar kernel&lt;br /&gt;
&lt;br /&gt;
主机：getvar:kernel&lt;br /&gt;
&lt;br /&gt;
设备：OKAYuefi&lt;br /&gt;
&lt;br /&gt;
* fastboot flash boot boot.img&lt;br /&gt;
&lt;br /&gt;
主机：download:00100000&lt;br /&gt;
&lt;br /&gt;
设备：DATA00100000&lt;br /&gt;
&lt;br /&gt;
主机：（发送boot.img的内容）&lt;br /&gt;
&lt;br /&gt;
设备：OKAY&lt;br /&gt;
&lt;br /&gt;
主机：flash:boot&lt;br /&gt;
&lt;br /&gt;
设备：INFOflashing...&lt;br /&gt;
&lt;br /&gt;
设备：OKAY&lt;br /&gt;
&lt;br /&gt;
==== 其它注意事项 ====&lt;br /&gt;
&lt;br /&gt;
* 向设备发送数据(download)时，数据不能大于max-download-size变量（缓冲区大小）的值。&lt;br /&gt;
&lt;br /&gt;
当需要刷写的数据超过缓冲区大小时，则使用sparse对文件分段处理。&lt;br /&gt;
&lt;br /&gt;
''（待补充...）''&lt;br /&gt;
&lt;br /&gt;
==== Fastboot实现 ====&lt;br /&gt;
Qualcomm ABL: https://git.codelinaro.org/clo/la/abl/tianocore/edk2/-/tree/uefi.lnx.4.0.r37-rel/QcomModulePkg/Library/FastbootLib&lt;br /&gt;
&lt;br /&gt;
lk2nd: https://github.com/msm8916-mainline/lk2nd/blob/master/app/aboot/fastboot.c&lt;br /&gt;
&lt;br /&gt;
U-Boot: https://github.com/u-boot/u-boot/tree/master/drivers/fastboot&lt;br /&gt;
&lt;br /&gt;
Userspace Fastbootd: https://android.googlesource.com/platform/system/core/+/refs/heads/main/fastboot/device/&lt;br /&gt;
&lt;br /&gt;
linux-simple-mass-storage: https://github.com/BigfootACA/linux-simple-mass-storage/tree/master/src/fastboot&lt;br /&gt;
&lt;br /&gt;
==== 其它参考文档 ====&lt;br /&gt;
https://android.googlesource.com/platform/system/core/+/master/fastboot/README.md&lt;/div&gt;</summary>
		<author><name>BigfootACA</name></author>
	</entry>
</feed>