zefie icon

Pi0 USB Multi-Gadget config (serial+ethernet)

zefie | PRO | 07/26/18 11:56:39 PM UTC | 0 ⭐ | 905 👁️ | Never ⏰ | []
Bash |

1.77 KB

|

None

|

0 👍

/

0 👎

#!/bin/bash
 
ID_VENDOR="0x1d6b"
ID_PRODUCT="0x0104"
 
SERIAL="$(grep Serial /proc/cpuinfo | sed 's/Serial\s*: 0000\(\w*\)/\1/')"
MAC="$(echo ${SERIAL} | sed 's/\(\w\w\)/:\1/g' | cut -b 2-)"
MAC_HOST="12$(echo ${MAC} | cut -b 3-)"
MAC_DEV="02$(echo ${MAC} | cut -b 3-)"
g="/sys/kernel/config/usb_gadget/g"
 
modprobe libcomposite
 
write_config() {
    if [ ! -d "${g}/$(dirname $2)" ]; then
        mkdir -p ${g}/$(dirname $2)
    fi
    if [ -f "${g}/$2" ]; then
        if [ "$(cat ${g}/$2)" != "$1" ]; then
            echo "$1" > "${g}/$2"
        fi
    else
        echo "$1" > "${g}/$2"
    fi
}
 
write_config "" UDC
 
write_config ${ID_VENDOR} idVendor  # Linux Foundation
write_config ${ID_PRODUCT} idProduct # Multifunction Composite Gadget
write_config 0x0100 bcdDevice
write_config 0x0200 bcdUSB
write_config 0xEF bDeviceClass
write_config 0x02 bDeviceSubClass
write_config 0x01 bDeviceProtocol
 
mkdir -p ${g}/strings/0x409
write_config "${SERIAL}" strings/0x409/serialnumber
write_config "Zefie Networks" strings/0x409/manufacturer
write_config "Raspberry Pi Zero Gadget" strings/0x409/product
 
write_config 1 os_desc/use
write_config 0xcd os_desc/b_vendor_code
write_config MSFT100 os_desc/qw_sign
 
mkdir -p ${g}/functions/acm.GS0  # serial
mkdir -p ${g}/functions/rndis.usb0 # network
 
write_config $MAC_HOST functions/rndis.usb0/host_addr
write_config $MAC_DEV functions/rndis.usb0/dev_addr
write_config RNDIS functions/rndis.usb0/os_desc/interface.rndis/compatible_id
write_config 5162001 functions/rndis.usb0/os_desc/interface.rndis/sub_compatible_id
 
write_config 250 configs/c.1/MaxPower
ln -s ${g}/configs/c.1 ${g}/os_desc
ln -s ${g}/functions/rndis.usb0 ${g}/configs/c.1/
ln -s ${g}/functions/acm.GS0 ${g}/configs/c.1/
 
udevadm settle -t 5 || :
write_config $(ls -1 /sys/class/udc) UDC

Comments