Skip to content

[hoki] USB Mode selection broken on both 2.0-release and 2.1-nightly #297

Description

@0x53A

I got a Skagen Falster Gen 6 (based on Fossil Gen 6) and installed Asteroid OS. First nightly, then release. On neither was I able to select SSH over USB, the watch was stuck in ADB mode.

As ADB is working, I tried to diagnose the issue with the help of AI. Following is the AI report, which sounds plausible to me:


Device: Fossil Gen 6 (Skagen variant), codename hoki
Affected versions:

  • AsteroidOS 2.0, build 20260216211137
  • AsteroidOS 2.1-nightly, build 20260227003819
    Kernel: 4.14.206

All evidence below was collected on AsteroidOS 2.0 and verified identical on 2.1-nightly.

Symptom

Selecting "SSH" in the AsteroidOS USB settings has no effect. The watch stays in ADB-only mode — no RNDIS network interface appears on the host.

Root cause

usb-moded.service fails on boot and enters a restart loop. Its ExecStartPre script (/usr/bin/init_ffs) writes to legacy sysfs nodes that don't exist on this kernel. The kernel uses configfs USB gadgets instead.

Evidence

1. usb-moded.service is failed:

# systemctl status usb-moded.service -l
x usb-moded.service - usb-moded USB gadget controller
     Loaded: loaded (/usr/lib/systemd/system/usb-moded.service; disabled; preset: disabled)
     Active: failed (Result: exit-code) since Thu 2025-05-29 16:30:42 UTC; 9 months 4 days ago
 Invocation: 092ac16214a04e3387e260aced43e77a
    Process: 779 ExecStartPre=/usr/bin/init_ffs (code=exited, status=1/FAILURE)

May 29 16:30:42 hoki systemd[1]: usb-moded.service: Scheduled restart job, restart counter is at 5.
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Start request repeated too quickly.
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Failed with result 'exit-code'.
May 29 16:30:42 hoki systemd[1]: Failed to start usb-moded USB gadget controller.

2. Journal shows init_ffs failing to write to missing sysfs nodes:

# journalctl -u usb-moded.service --no-pager -b -l
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Scheduled restart job, restart counter is at 3.
May 29 16:30:42 hoki systemd[1]: Starting usb-moded USB gadget controller...
May 29 16:30:42 hoki init_ffs[733]: /usr/bin/init_ffs: line 3: /sys/class/android_usb/android0/enable: Permission denied
May 29 16:30:42 hoki init_ffs[733]: /usr/bin/init_ffs: line 9: /sys/class/android_usb/android0/iSerial: Permission denied
May 29 16:30:42 hoki init_ffs[733]: /usr/bin/init_ffs: line 10: /sys/class/android_usb/android0/iManufacturer: Permission denied
May 29 16:30:42 hoki init_ffs[733]: /usr/bin/init_ffs: line 11: /sys/class/android_usb/android0/iProduct: Permission denied
May 29 16:30:42 hoki init_ffs[733]: /usr/bin/init_ffs: line 13: /sys/class/android_usb/android0/enable: Permission denied
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Control process exited, code=exited, status=1/FAILURE
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Failed with result 'exit-code'.
May 29 16:30:42 hoki systemd[1]: Failed to start usb-moded USB gadget controller.
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Scheduled restart job, restart counter is at 4.
May 29 16:30:42 hoki systemd[1]: Starting usb-moded USB gadget controller...
May 29 16:30:42 hoki init_ffs[779]: /usr/bin/init_ffs: line 3: /sys/class/android_usb/android0/enable: Permission denied
May 29 16:30:42 hoki init_ffs[779]: /usr/bin/init_ffs: line 9: /sys/class/android_usb/android0/iSerial: Permission denied
May 29 16:30:42 hoki init_ffs[779]: /usr/bin/init_ffs: line 10: /sys/class/android_usb/android0/iManufacturer: Permission denied
May 29 16:30:42 hoki init_ffs[779]: /usr/bin/init_ffs: line 11: /sys/class/android_usb/android0/iProduct: Permission denied
May 29 16:30:42 hoki init_ffs[779]: /usr/bin/init_ffs: line 13: /sys/class/android_usb/android0/enable: Permission denied
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Control process exited, code=exited, status=1/FAILURE
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Failed with result 'exit-code'.
May 29 16:30:42 hoki systemd[1]: Failed to start usb-moded USB gadget controller.
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Scheduled restart job, restart counter is at 5.
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Start request repeated too quickly.
May 29 16:30:42 hoki systemd[1]: usb-moded.service: Failed with result 'exit-code'.
May 29 16:30:42 hoki systemd[1]: Failed to start usb-moded USB gadget controller.

3. The init_ffs script expects legacy android_usb sysfs:

# cat /usr/bin/init_ffs
#!/bin/sh

echo "0" > /sys/class/android_usb/android0/enable

manufacturer="$(cat /system/build.prop | grep -o 'ro.product.manufacturer=.*' | cut -d'=' -f 2)"
model="$(cat /system/build.prop | grep -o 'ro.product.model=.*' | cut -d'=' -f 2)"
serial="$(cat /proc/cmdline | sed 's/.*androidboot.serialno=//' | sed 's/ .*//')"

echo $serial       > /sys/class/android_usb/android0/iSerial
echo $manufacturer > /sys/class/android_usb/android0/iManufacturer
echo $model        > /sys/class/android_usb/android0/iProduct

echo "1" >  /sys/class/android_usb/android0/enable

4. The legacy sysfs node is a stub — missing enable, iSerial, etc.:

# ls /sys/devices/virtual/android_usb/android0/
power  state  subsystem  uevent

5. The kernel uses configfs USB gadgets instead:

# find /sys/kernel/config/usb_gadget/ -maxdepth 3
/sys/kernel/config/usb_gadget/
/sys/kernel/config/usb_gadget/g1
/sys/kernel/config/usb_gadget/g1/os_desc
/sys/kernel/config/usb_gadget/g1/os_desc/qw_sign
/sys/kernel/config/usb_gadget/g1/os_desc/b_vendor_code
/sys/kernel/config/usb_gadget/g1/os_desc/use
/sys/kernel/config/usb_gadget/g1/strings
/sys/kernel/config/usb_gadget/g1/strings/0x409
/sys/kernel/config/usb_gadget/g1/configs
/sys/kernel/config/usb_gadget/g1/configs/c.1
/sys/kernel/config/usb_gadget/g1/functions
/sys/kernel/config/usb_gadget/g1/functions/ffs.adb
/sys/kernel/config/usb_gadget/g1/UDC
/sys/kernel/config/usb_gadget/g1/bcdUSB
/sys/kernel/config/usb_gadget/g1/bcdDevice
/sys/kernel/config/usb_gadget/g1/idProduct
/sys/kernel/config/usb_gadget/g1/idVendor
/sys/kernel/config/usb_gadget/g1/bMaxPacketSize0
/sys/kernel/config/usb_gadget/g1/bDeviceProtocol
/sys/kernel/config/usb_gadget/g1/bDeviceSubClass
/sys/kernel/config/usb_gadget/g1/bDeviceClass

Fix needed

/usr/bin/init_ffs (and likely usb-moded configuration) needs to be updated to use the configfs gadget API at /sys/kernel/config/usb_gadget/g1/ instead of the legacy /sys/class/android_usb/android0/ interface. An RNDIS function needs to be created under configfs for SSH mode to work.

Metadata

Metadata

Assignees

No one assigned

    Labels

    hokiFossil Gen 6

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions