I have an application that depends on the Linux HID USB gadget via configfs on the USB OTG port. It works under Raspberry Pi OS (2020-05-27-buster-lite), but I'm having trouble getting it to work under Armbian (Armbian_20.05.2_Odroidc2_buster_current_5.6.15).
Specifically, I'm having trouble getting the configfs module to run.
What I've done so far:
Removed the J1 jumper as described on the ODROID wiki.
Recompiled /boot/dtbs/amlogic/meson-gxbb-odroidc2.dtb to set dr_mode = "peripheral"; as described in this ODROID magazine article.
When I run this script with sudo:
#!/usr/bin/env bash
modprobe libcomposite
cd /sys/kernel/config/usb_gadget/
mkdir -p g1
cd g1
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
STRINGS_DIR="strings/0x409"
mkdir -p "$STRINGS_DIR"
echo "6b65796d696d6570690" > "${STRINGS_DIR}/serialnumber"
echo "Linux Foundation" > "${STRINGS_DIR}/manufacturer"
echo "Generic USB Keyboard" > "${STRINGS_DIR}/product"
FUNCTIONS_DIR="functions/hid.usb0"
mkdir -p "$FUNCTIONS_DIR"
echo 1 > "${FUNCTIONS_DIR}/protocol" # Keyboard
echo 1 > "${FUNCTIONS_DIR}/subclass" # Boot interface subclass
echo 8 > "${FUNCTIONS_DIR}/report_length"
# Write the report descriptor
# Source: https://www.kernel.org/doc/html/latest/usb/gadget_hid.html
echo -ne \\x05\\x01\\x09\\x06\\xa1\\x01\\x05\\x07\\x19\\xe0\\x29\\xe7\\x15\\x00\\x25\\x01\\x75\\x01\\x95\\x08\\x81\\x02\\x95\\x01\\x75\\x08\\x81\\x03\\x95\\x05\\x75\\x01\\x05\\x08\\x19\\x01\\x29\\x05\\x91\\x02\\x95\\x01\\x75\\x03\\x91\\x03\\x95\\x06\\x75\\x08\\x15\\x00\\x25\\x65\\x05\\x07\\x19\\x00\\x29\\x65\\x81\\x00\\xc0 > "${FUNCTIONS_DIR}/report_desc"
CONFIG_INDEX=1
CONFIGS_DIR="configs/c.${CONFIG_INDEX}"
mkdir -p "$CONFIGS_DIR"
echo 250 > "${CONFIGS_DIR}/MaxPower"
CONFIGS_STRINGS_DIR="${CONFIGS_DIR}/strings/0x409"
mkdir -p "$CONFIGS_STRINGS_DIR"
echo "Config ${CONFIG_INDEX}: ECM network" > "${CONFIGS_STRINGS_DIR}/configuration"
ln -s "$FUNCTIONS_DIR" "${CONFIGS_DIR}/"
ls /sys/class/udc > UDC
chmod 777 /dev/hidg0
It fails with on the last line with:
chmod: cannot access '/dev/hidg0': No such file or directory
And /sys/class/udc is not a symlink, as it's expected to be:
$ ls /sys/class/udc -l
total 0
Also, when I run dmesg | grep configfs, I get nothing, whereas on RasPiOS I see a message about dwc2 loading the configfs-gadget.
It there anything else I can do to enable the USB HID gadget on Armbian?