Milk-V Jupiter USB Gadget codebase; forked from IdeasOnBoard.org
Find a file
2025-01-25 07:53:46 +08:00
include Initial commit 2024-10-22 19:25:50 +08:00
lib Initial commit 2024-10-22 19:25:50 +08:00
scripts Update for v2.1 2025-01-25 07:53:46 +08:00
src Initial commit 2024-10-22 19:25:50 +08:00
.gitignore Initial commit 2024-10-22 19:25:50 +08:00
20240819-112732.jpg Initial commit 2024-10-22 19:25:50 +08:00
Makefile Initial commit 2024-10-22 19:25:50 +08:00
README.md Update for v2.1 2025-01-25 07:53:46 +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 deviceUVC配置可选用两种方法

  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

另外最新脚本增加快捷运行 dhcp 服务器功能,依赖 busybox udhcpd只需要执行

gadget-setup.sh dhcp

就会自动为网卡配置ip地址并且支持给PC通过DHCP协议分配IP地址具体请查看脚本实现。

PC端设置

目前最新版脚本已经支持Linux、Windows10下自动识别RNDIS设备驱动无需手动安装。
如果二次开发等其他需求需要手动安装驱动,请参考:

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

NCM

不同于RNDIS由微软维护NCM是USB-IF维护网络协议主流操作系统Linux,Windows 11,macOS等具备支持。 注目前Windows 10的ncm驱动实现和Linux 6.6中ncm gadget兼容性不是最佳微软在Windows 11才进行修复。

gadget-setup.sh ncm

另外最新脚本增加快捷运行 dhcp 服务器功能,依赖 busybox udhcpd只需要执行

gadget-setup.sh dhcp

就会自动为网卡配置ip地址并且支持给PC通过DHCP协议分配IP地址具体请查看脚本实现。

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

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

复合设备

举例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

Board Model: spacemit k1-x MUSE-Pi board
# ....
Available DRDs: mv-otg1-role-switch c0a00000.dwc3
# ...

对于支持切换的控制器对应到方案开发板的接口关系如mv-otg-role-switch对应k1烧录口请参考USB开发文档相关章节。

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

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

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