Jump to content

ODROID C2: Trouble enabling HID USB gadget


mtlynch

Recommended Posts

Armbianmonitor:

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

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

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

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines