summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEtienne Cordonnier <ecordonnier@snap.com>2026-06-15 15:02:11 +0200
committerKhem Raj <khem.raj@oss.qualcomm.com>2026-06-15 22:43:44 -0700
commit5a96d8bc8948c69e42779101875fb2a507f7932a (patch)
tree67a7d683a907a38a9cd1bcbe474455c47b07dfb7
parenta0ae7ede1788dc0261f2c38a2ea9db3d381ccfd0 (diff)
downloadmeta-openembedded-5a96d8bc8948c69e42779101875fb2a507f7932a.tar.gz
android-tools-conf: replace sysfs implementation with configfs
The android-tools-conf recipe used /sys/class/android_usb/android0/, an interface exported by the out-of-tree android.c USB gadget driver that Google carried in Android kernels but never submitted to mainline Linux. It was never part of any upstream kernel release. The configfs-based USB gadget framework (CONFIG_USB_CONFIGFS) was merged into mainline Linux with kernel 3.10 (June 2013) and is the correct interface for all upstream kernels since then. Additionally, Google's Generic Kernel Image (GKI) initiative dropped android.c from Android common kernels starting with kernel 5.10 (Android 12, 2021), so even custom BSPs targeting modern Android cannot use this interface. Remove android-tools-conf and rename android-tools-conf-configfs to android-tools-conf, since the configfs-based implementation is the only correct one for any modern kernel. Backward compatibility is preserved via PROVIDES/RPROVIDES retaining the old android-tools-conf-configfs name. AI-Generated: Uses GitHub Copilot (Claude Sonnet 4.6) Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com> Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
-rw-r--r--meta-oe/conf/layer.conf1
-rw-r--r--meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-setup40
-rw-r--r--meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs_1.0.bb38
-rw-r--r--meta-oe/recipes-devtools/android-tools/android-tools-conf/10-adbd-configfs.conf (renamed from meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/10-adbd-configfs.conf)0
-rw-r--r--meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-cleanup (renamed from meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-cleanup)0
-rw-r--r--meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-setup63
-rw-r--r--meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-start (renamed from meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-start)0
-rw-r--r--meta-oe/recipes-devtools/android-tools/android-tools-conf_1.0.bb38
8 files changed, 62 insertions, 118 deletions
diff --git a/meta-oe/conf/layer.conf b/meta-oe/conf/layer.conf
index 357cca8cc6..1d7e6cbe57 100644
--- a/meta-oe/conf/layer.conf
+++ b/meta-oe/conf/layer.conf
@@ -53,7 +53,6 @@ LICENSE_PATH += "${LAYERDIR}/licenses"
53PREFERRED_RPROVIDER_libdevmapper = "lvm2" 53PREFERRED_RPROVIDER_libdevmapper = "lvm2"
54PREFERRED_RPROVIDER_libdevmapper-native = "lvm2-native" 54PREFERRED_RPROVIDER_libdevmapper-native = "lvm2-native"
55PREFERRED_RPROVIDER_nativesdk-libdevmapper = "nativesdk-lvm2" 55PREFERRED_RPROVIDER_nativesdk-libdevmapper = "nativesdk-lvm2"
56PREFERRED_PROVIDER_android-tools-conf ?= "android-tools-conf"
57# Those lines configure whether coreutils or uutils-coreutils is used. 56# Those lines configure whether coreutils or uutils-coreutils is used.
58PREFERRED_PROVIDER_coreutils = "coreutils" 57PREFERRED_PROVIDER_coreutils = "coreutils"
59PREFERRED_PROVIDER_coreutils-native = "coreutils-native" 58PREFERRED_PROVIDER_coreutils-native = "coreutils-native"
diff --git a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-setup b/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-setup
deleted file mode 100644
index 2744d1e98e..0000000000
--- a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-setup
+++ /dev/null
@@ -1,40 +0,0 @@
1#!/bin/sh
2
3set -e
4
5conf="Conf 1"
6manufacturer=RPB
7model="Android device"
8product=0xd002
9serial=0123456789ABCDEF
10vendor=0x18d1
11
12if [ -r /etc/android-gadget-setup.machine ] ; then
13 . /etc/android-gadget-setup.machine
14fi
15
16[ -d /sys/kernel/config/usb_gadget ] || modprobe libcomposite
17
18cd /sys/kernel/config/usb_gadget
19
20[ -d adb ] && /usr/bin/android-gadget-cleanup || true
21
22mkdir adb
23cd adb
24
25mkdir configs/c.1
26mkdir functions/ffs.usb0
27mkdir strings/0x409
28mkdir configs/c.1/strings/0x409
29echo -n "$vendor" > idVendor
30echo -n "$product" > idProduct
31echo "$serial" > strings/0x409/serialnumber
32echo "$manufacturer" > strings/0x409/manufacturer
33echo "$model" > strings/0x409/product
34echo "$conf" > configs/c.1/strings/0x409/configuration
35ln -s functions/ffs.usb0 configs/c.1
36
37mkdir -p /dev/usb-ffs/adb
38ADB_UID=$(id -u adb)
39ADB_GID=$(id -g adb)
40mount -t functionfs usb0 /dev/usb-ffs/adb -o "uid=$ADB_UID,gid=$ADB_GID"
diff --git a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs_1.0.bb b/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs_1.0.bb
deleted file mode 100644
index 342e7fd1a5..0000000000
--- a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs_1.0.bb
+++ /dev/null
@@ -1,38 +0,0 @@
1DESCRIPTION = "Different utilities from Android - corressponding configuration files for using ConfigFS"
2SECTION = "console/utils"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
5
6S = "${UNPACKDIR}"
7
8SRC_URI = " \
9 file://android-gadget-setup \
10 file://android-gadget-start \
11 file://android-gadget-cleanup \
12 file://10-adbd-configfs.conf \
13"
14
15PACKAGE_ARCH = "${MACHINE_ARCH}"
16
17do_install() {
18 install -d ${D}${bindir}
19 install -m 0755 ${UNPACKDIR}/android-gadget-setup ${D}${bindir}
20 install -m 0755 ${UNPACKDIR}/android-gadget-start ${D}${bindir}
21 install -m 0755 ${UNPACKDIR}/android-gadget-cleanup ${D}${bindir}
22
23 if [ -r ${UNPACKDIR}/android-gadget-setup.machine ] ; then
24 install -d ${D}${sysconfdir}
25 install -m 0644 ${UNPACKDIR}/android-gadget-setup.machine ${D}${sysconfdir}
26 fi
27
28 install -d ${D}${systemd_unitdir}/system/android-tools-adbd.service.d
29 install -m 0644 ${UNPACKDIR}/10-adbd-configfs.conf ${D}${systemd_unitdir}/system/android-tools-adbd.service.d
30}
31
32FILES:${PN} += " \
33 ${systemd_unitdir}/system/ \
34"
35
36PROVIDES += "android-tools-conf"
37RPROVIDES:${PN} = "android-tools-conf"
38BBCLASSEXTEND = "native"
diff --git a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/10-adbd-configfs.conf b/meta-oe/recipes-devtools/android-tools/android-tools-conf/10-adbd-configfs.conf
index 7971f319c3..7971f319c3 100644
--- a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/10-adbd-configfs.conf
+++ b/meta-oe/recipes-devtools/android-tools/android-tools-conf/10-adbd-configfs.conf
diff --git a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-cleanup b/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-cleanup
index f27d77df51..f27d77df51 100644
--- a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-cleanup
+++ b/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-cleanup
diff --git a/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-setup b/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-setup
index 26cf30eddd..2744d1e98e 100644
--- a/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-setup
+++ b/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-setup
@@ -1,37 +1,40 @@
1#!/bin/sh 1#!/bin/sh
2 2
3[ ! -e /dev/pts ] && mkdir -p /dev/pts 3set -e
4[ ! -e /dev/pts/0 ] && mount devpts /dev/pts -t devpts 4
5 5conf="Conf 1"
6# TODO enable the lines below once we have support for getprop 6manufacturer=RPB
7# retrieve the product info from Android 7model="Android device"
8# manufacturer=$(getprop ro.product.manufacturer Android) 8product=0xd002
9# model=$(getprop ro.product.model Android) 9serial=0123456789ABCDEF
10# serial=$(getprop ro.serialno 0123456789ABCDEF) 10vendor=0x18d1
11 11
12#below are now needed in order to use FunctionFS for ADB, tested to work with 3.4+ kernels 12if [ -r /etc/android-gadget-setup.machine ] ; then
13if grep -q functionfs /proc/filesystems; then 13 . /etc/android-gadget-setup.machine
14 mkdir -p /dev/usb-ffs/adb
15 mount -t functionfs adb /dev/usb-ffs/adb
16 #android-gadget-setup doesn't provide below 2 and without them it won't work, so we provide them here.
17 echo adb > /sys/class/android_usb/android0/f_ffs/aliases
18 echo ffs > /sys/class/android_usb/android0/functions
19fi 14fi
20 15
21manufacturer="$(cat /system/build.prop | grep -o 'ro.product.manufacturer=.*' | cut -d'=' -f 2)" 16[ -d /sys/kernel/config/usb_gadget ] || modprobe libcomposite
22model="$(cat /system/build.prop | grep -o 'ro.product.model=.*' | cut -d'=' -f 2)" 17
23# get the device serial number from /proc/cmdline directly(since we have no getprop on 18cd /sys/kernel/config/usb_gadget
24# GNU/Linux) 19
25serial="$(cat /proc/cmdline | sed 's/.*androidboot.serialno=//' | sed 's/ .*//')" 20[ -d adb ] && /usr/bin/android-gadget-cleanup || true
26 21
27echo $serial > /sys/class/android_usb/android0/iSerial 22mkdir adb
28echo $manufacturer > /sys/class/android_usb/android0/iManufacturer 23cd adb
29echo $model > /sys/class/android_usb/android0/iProduct
30 24
31echo "0" > /sys/class/android_usb/android0/enable 25mkdir configs/c.1
32echo "18d1" > /sys/class/android_usb/android0/idVendor 26mkdir functions/ffs.usb0
33echo "D002" > /sys/class/android_usb/android0/idProduct 27mkdir strings/0x409
34echo "adb" > /sys/class/android_usb/android0/functions 28mkdir configs/c.1/strings/0x409
35echo "1" > /sys/class/android_usb/android0/enable 29echo -n "$vendor" > idVendor
30echo -n "$product" > idProduct
31echo "$serial" > strings/0x409/serialnumber
32echo "$manufacturer" > strings/0x409/manufacturer
33echo "$model" > strings/0x409/product
34echo "$conf" > configs/c.1/strings/0x409/configuration
35ln -s functions/ffs.usb0 configs/c.1
36 36
37sleep 4 37mkdir -p /dev/usb-ffs/adb
38ADB_UID=$(id -u adb)
39ADB_GID=$(id -g adb)
40mount -t functionfs usb0 /dev/usb-ffs/adb -o "uid=$ADB_UID,gid=$ADB_GID"
diff --git a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-start b/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-start
index 4ea688accb..4ea688accb 100644
--- a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-start
+++ b/meta-oe/recipes-devtools/android-tools/android-tools-conf/android-gadget-start
diff --git a/meta-oe/recipes-devtools/android-tools/android-tools-conf_1.0.bb b/meta-oe/recipes-devtools/android-tools/android-tools-conf_1.0.bb
index 7bbac1db75..bb55b3599f 100644
--- a/meta-oe/recipes-devtools/android-tools/android-tools-conf_1.0.bb
+++ b/meta-oe/recipes-devtools/android-tools/android-tools-conf_1.0.bb
@@ -1,20 +1,40 @@
1DESCRIPTION = "Different utilities from Android - corresponding configuration files" 1DESCRIPTION = "Different utilities from Android - corresponding configuration files for using ConfigFS"
2SECTION = "console/utils" 2SECTION = "console/utils"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" 4LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
5 5
6SRC_URI = "file://android-gadget-setup"
7
8S = "${UNPACKDIR}" 6S = "${UNPACKDIR}"
9 7
8SRC_URI = " \
9 file://android-gadget-setup \
10 file://android-gadget-start \
11 file://android-gadget-cleanup \
12 file://10-adbd-configfs.conf \
13"
14
15PACKAGE_ARCH = "${MACHINE_ARCH}"
16
10do_install() { 17do_install() {
11 install -d ${D}${bindir} 18 install -d ${D}${bindir}
12 install -m 0755 ${UNPACKDIR}/android-gadget-setup ${D}${bindir} 19 install -m 0755 ${UNPACKDIR}/android-gadget-setup ${D}${bindir}
13} 20 install -m 0755 ${UNPACKDIR}/android-gadget-start ${D}${bindir}
21 install -m 0755 ${UNPACKDIR}/android-gadget-cleanup ${D}${bindir}
14 22
15python () { 23 if [ -r ${UNPACKDIR}/android-gadget-setup.machine ] ; then
16 pn = d.getVar('PN') 24 install -d ${D}${sysconfdir}
17 profprov = d.getVar("PREFERRED_PROVIDER_" + pn) 25 install -m 0644 ${UNPACKDIR}/android-gadget-setup.machine ${D}${sysconfdir}
18 if profprov and pn != profprov: 26 fi
19 raise bb.parse.SkipRecipe("PREFERRED_PROVIDER_%s set to %s, not %s" % (pn, profprov, pn)) 27
28 install -d ${D}${systemd_unitdir}/system/android-tools-adbd.service.d
29 install -m 0644 ${UNPACKDIR}/10-adbd-configfs.conf ${D}${systemd_unitdir}/system/android-tools-adbd.service.d
20} 30}
31
32FILES:${PN} += " \
33 ${systemd_unitdir}/system/ \
34"
35
36PROVIDES += "android-tools-conf-configfs"
37RPROVIDES:${PN} = "android-tools-conf-configfs"
38RREPLACES:${PN} = "android-tools-conf-configfs"
39RCONFLICTS:${PN} = "android-tools-conf-configfs"
40BBCLASSEXTEND = "native"