mtlynch Posted August 20, 2020 Share Posted August 20, 2020 Armbianmonitor: http://ix.io/2uKE 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? Link to comment Share on other sites More sharing options...
usual user Posted August 21, 2020 Share Posted August 21, 2020 8 hours ago, mtlynch said: /sys/class/udc is not a symlink "/sys/class/udc/" is not a symlink, it is a directory which will hold symlinks to available UDCs. If none is there, the UDC is not set up properly. You have to fix this up first so the USB gadget framework can make use of it. Link to comment Share on other sites More sharing options...
mtlynch Posted August 21, 2020 Author Share Posted August 21, 2020 4 hours ago, usual user said: "/sys/class/udc/" is not a symlink, it is a directory which will hold symlinks to available UDCs. If none is there, the UDC is not set up properly. You have to fix this up first so the USB gadget framework can make use of it. Thanks for that clarification. It is indeed an empty directory. Do you have any suggestions as to how to fix that? Link to comment Share on other sites More sharing options...
usual user Posted August 21, 2020 Share Posted August 21, 2020 41 minutes ago, mtlynch said: Do you have any suggestions as to how to fix that? The directory gets populated by the UDC driver. I don't know your SOC so I can' t tell in which state the UDC support in the kernel is. When you define a hardware feature in DT, supporting code is not automatically generated in a magical way. Perhaps another forum reader can clarify the status of the UDC support for your SOC. Link to comment Share on other sites More sharing options...
Recommended Posts