Milk-V Jupiter USB Gadget codebase; forked from IdeasOnBoard.org
  • C 70%
  • Shell 20.2%
  • C++ 9.3%
  • Makefile 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2024-09-14 17:24:02 +08:00
include initial commit 2024-08-19 10:27:41 +08:00
lib initial commit 2024-08-19 10:27:41 +08:00
scripts update scripts to v0.5 2024-09-14 17:24:02 +08:00
src initial commit 2024-08-19 10:27:41 +08:00
.gitignore initial commit 2024-08-19 10:27:41 +08:00
20240819-112732.jpg add 20240819-112732.jpg 2024-08-19 11:29:15 +08:00
Makefile initial commit 2024-08-19 10:27:41 +08:00
README.md update scripts to v0.5 2024-09-14 17:24:02 +08:00

编译

如果需要板子作为usb device提供uvc功能,则需以下编译步骤,否则无需编译。只需把scripts目录下的脚本拷贝到板子上,运行脚本配置相应功能即可。

导出交叉工具链到环境变量,或者在Bianbu desktop上执行

$ make
#产出uvc-gadget-new

配置脚本

本仓库提供两个 usb gadget 配置脚本,分别是:

  1. 用于配置 uvc gadget 的 scripts/uvc-gadget-setup.sh
  2. 用于配置 adb、rndis、uvc、mass storage 的 scripts/gadget-setup.sh

具体使用方法可以查看对应脚本 help 命令及参考本文档的后续章节。

查看脚本使用帮助:

uvc-gadget-setup.sh help
gadget-setup.sh help

UVC

板子做usb device,UVC配置可选用两种方法:

  1. 使用专用uvc脚本,支持更多uvc配置,独立USB PID(推荐):
$ /etc/init.d/S50adb-setup stop
$ uvc-gadget-setup.sh start
$ uvc-gadget-new
  1. 使用composite gadget脚本,支持uvc与其他功能同时使用。
$ /etc/init.d/S50adb-setup stop
$ gadget-setup.sh uvc
$ uvc-gadget-new

RNDIS

gadget-setup.sh rndis

PC端设置

img_v3_02dr_d968d898-83fe-4f63-a236-1dade8dc0c4g

ADB

gadget-setup.sh 通用脚本集成了 ADB功能。

注:Bianbu desktop/linux有默认集成adb功能,gadget-setup.sh不能和系统集成的同时使用。

# 配置 adb
gadget-setup.sh adb
# 停止 adb
gadget-setup.sh stop

Mass Storage (BOT协议)

先安装sudo apt install dosfstools

gadget-setup.sh msc:<镜像或设备节点>
# 举例
gadget-setup.sh msc:/dev/nvme0n1

#使用内存盘
gadget-setup.sh msc

Mass Storage (支持UASP协议)

先安装sudo apt install dosfstools

UASP协议提升了传输效率。

gadget-setup.sh uas:<镜像或设备节点>
# 举例
gadget-setup.sh uas:/dev/nvme0n1

复合设备

举例:rndis + adb:

gadget-setup.sh rndis,adb

手动选择控制器

由于当前硬件平台可能有多个支持device的usb控制器(udc),可以用以下命令查看可用的 udc:

~ # gadget-setup info
SpacemiT gadget-setup tool v0.5-SUPPORTROLESW

Board Model: spacemit k1-x MUSE-Pi board
# ....
Available UDCs: c0900100.udc c0980100.udc1 c0a00000.dwc3
# ...

# 或者直接适用:
~ # ls /sys/class/udc/
c0900100.udc   c0980100.udc1  c0a00000.dwc3

默认脚本选用 /sys/class/udc/ 目录下的第一个 udc。

用户可以通过环境变量指定特定 udc,举例:

# 选择第二个 udc
USB_UDC_IDX=2 gadget-setup.sh ...
USB_UDC_IDX=2 uvc-gadget-setup.sh ...
# 选择 c0a00000.dwc3
USB_UDC=c0a00000.dwc3 gadget-setup.sh ...
USB_UDC=c0a00000.dwc3 uvc-gadget-setup.sh ...

其中 ... 省略了脚本的其他参数。

手动切换控制器角色

在usb控制器支持手动切换的方案中,可以通过以下命令来查看支持切换的控制器:

gadget-setup.sh info

通过以下命令来切换控制器角色 host 或 device:

gadget-setup.sh role <控制器/otg名称> <device或者host>
# 举例:
gadget-setup.sh role c0a00000.dwc3 device

注:切换至device模式时如果对应USB接口存在额外的vbus配置,需要手动关闭,见具体方案文档。