Skip to content

# 18.4. J6X USB device 模式

J6X USB device模式主要支持两类功能：

- USB下载，如Bootrom DFU、SBL DFU、U-Boot Fastboot等；

- kernel下通过configfs配置设备作为U盘、adb设备等。

USB下载说明参考 J6X USB下载功能说明

## 18.4.1. configfs简介

Linux USB gadget 可以连接到USB host用于扩展额外的功能，比如串口或者大容量存储设备。 主机将gadget视为一组配置，每个配置包含一些interface，从gadget的角度来看， 这些interface被称为funtion。每个funtion代表了一个功能，例如串口或SCSI磁盘。 Linux内核提供了一种简单的方式（configfs）来配置USB device。

下面的例子展示了通过configfs将设备配置成20MB的大容量存储设备：

    # prepare：modprobe usb相关驱动
    cd /sys/kernel/config/usb_gadget
    # 创建 gadget 1
    mkdir g1 && cd g1
    echo 0x3652 >> idVendor
    echo 0x6610 >> idProduct
    cd strings
    # en_US
    mkdir 0x409
    cd 0x409
    echo "Horizon Robotics" >> manufacturer
    echo "Journey 6E" >> product
    echo "0xabcdefg" >> serialnumber

    # 配置USB config
    cd configs
    mkdir c.1
    cd strings && mkdir 0x409
    echo "Mass Storage" >> 0x409/configuration

    # 配置function
    cd functions/
    mkdir mass_storage.usb0

    # 设置文件系统
    dd if=/dev/zero of=mass_stor.img bs=1M count=20
    # losetup -f找到一个空的loop设备
    losetup /dev/loop1 ./mass_stor.img
    # 格式化成 fat32
    mkfs.vfat -F 32 /dev/loop1

    # 设置mass-storage的file
    echo /dev/loop0 > ./config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file

    # 使能config & UDC
    ln -s /functions/mass_storage.usb0/ c.1/
    echo 39820000.dwc3 >> UDC

此时将设备连接到Windows主机可以看到大小为20MB的U盘。