From 81a703fcc4552c67acfe0020cce8adde3c0a407f Mon Sep 17 00:00:00 2001 From: Miguel Fuertes Date: Tue, 24 Feb 2026 10:46:35 +0100 Subject: [PATCH] Add support for MF68E and M9S devices with necessary patches and configurations - Introduced device tree patches for MF68E and M9S, adding their respective .dts files and updating the Makefile to include them. - Implemented framebuffer driver for the GC9107 LCD controller, enabling display support for the MF68E and M9S devices. - Created UCI defaults for modem management, including network interface configurations and LED handling for modem and WiFi indicators. - Added scripts for automatic formatting of the rootfs_data partition and generating GPT images for MSM8916 eMMC. - Included hotplug scripts for managing LED states based on device actions. - Updated README with instructions for re-integrating the deprecated device support into the main build. --- .github/workflows/build-all.yml | 4 +- .github/workflows/build-package.yml | 77 ++++++++ .github/workflows/build.yml | 4 +- diffconfig_m9s => TBR/diffconfig_m9s | 0 diffconfig_mf68e => TBR/diffconfig_mf68e | 0 TBR/msm8916.mk.devices | 24 +++ .../packages}/configs-mifi/Makefile | 0 .../configs-mifi/files/battery-monitor.init | 0 .../packages}/configs-mifi/files/battery.htm | 0 .../files/hotplugs/50-battery-show | 0 .../configs-mifi/files/hotplugs/99-modem-led | 0 .../configs-mifi/files/hotplugs/99-wifi-led | 0 .../files/luci-app-tailscale-1.2.6-r1.apk | Bin .../configs-mifi/files/rc.button.power | 0 .../packages}/configs-mifi/files/uci_defaults | 0 .../packages}/fbtft-gc9107/Makefile | 0 .../fbtft-gc9107/preinit/05_dim_backlight | 0 .../packages}/rootfs-resizer/Makefile | 0 .../rootfs-resizer/files/rootfs-resizer.init | 0 .../rootfs-resizer/files/rootfs-resizer.sh | 0 .../packages}/router-display/Makefile | 0 .../router-display/files/display-manager.init | 0 .../router-display/files/display-manager.sh | 0 .../router-display/files/display-manager.uci | 0 .../files/hotplugs/20_power_button | 0 .../router-display/files/logos/boot_logo.fb | Bin .../files/logos/poweroff_logo.fb | Bin .../router-display/files/logos/readme.md | 0 .../router-display/files/update-display.sh | 0 .../packages}/router-display/src/main.c | 0 ...4-dts-qcom-add-devices-makefile.patch.orig | 22 +++ ...4-dts-qcom-add-msm8916-generic-mf68e.patch | 0 ...m64-dts-qcom-add-msm8916-generic-m9s.patch | 0 .../patches}/901-fbtft-fb_gc9107.patch | 0 TBR/readme.md | 52 ++++++ diffconfig => diffconfig_uz801 | 0 .../etc/hotplug.d/ieee80211/99-wifi-led | 17 ++ .../etc/hotplug.d/iface/99-modem-led | 15 ++ .../etc/uci-defaults/99-default-config | 11 -- .../lib/preinit}/79-format-rootfs-data | 0 msm89xx/image/flash.sh | 158 +++++++--------- msm89xx/image/generate_firmware.sh | 8 +- ...uahsfs_gpt.sh => generate_squashfs_gpt.sh} | 18 +- msm89xx/image/msm8916.mk | 36 +--- ...-arm64-dts-qcom-add-devices-makefile.patch | 8 +- optional_battery_prompt | 172 ------------------ packages/configs-dongle/Makefile | 57 ------ .../files/hotplugs/99-modem-led | 14 -- .../configs-dongle/files/hotplugs/99-wifi-led | 29 --- .../files/luci-app-tailscale-1.2.6-r1.apk | Bin 9085 -> 0 bytes packages/ledcontrol/Makefile | 31 ---- packages/ledcontrol/ledcontrol.sh | 75 -------- packages/msm-firmware-dumper/Makefile | 26 ++- packages/prepare-rootfs-data/Makefile | 33 ---- packages/qrtr/Makefile | 34 ++-- packages/rmtfs/Makefile | 25 ++- packages/uci-usb-gadget/Makefile | 80 ++++---- 57 files changed, 378 insertions(+), 652 deletions(-) create mode 100644 .github/workflows/build-package.yml rename diffconfig_m9s => TBR/diffconfig_m9s (100%) rename diffconfig_mf68e => TBR/diffconfig_mf68e (100%) create mode 100644 TBR/msm8916.mk.devices rename {packages => TBR/packages}/configs-mifi/Makefile (100%) rename {packages => TBR/packages}/configs-mifi/files/battery-monitor.init (100%) rename {packages => TBR/packages}/configs-mifi/files/battery.htm (100%) rename {packages => TBR/packages}/configs-mifi/files/hotplugs/50-battery-show (100%) rename {packages => TBR/packages}/configs-mifi/files/hotplugs/99-modem-led (100%) rename {packages => TBR/packages}/configs-mifi/files/hotplugs/99-wifi-led (100%) rename {packages/configs-dongle => TBR/packages/configs-mifi}/files/luci-app-tailscale-1.2.6-r1.apk (100%) rename {packages => TBR/packages}/configs-mifi/files/rc.button.power (100%) rename {packages => TBR/packages}/configs-mifi/files/uci_defaults (100%) rename {packages => TBR/packages}/fbtft-gc9107/Makefile (100%) rename {packages => TBR/packages}/fbtft-gc9107/preinit/05_dim_backlight (100%) rename {packages => TBR/packages}/rootfs-resizer/Makefile (100%) rename {packages => TBR/packages}/rootfs-resizer/files/rootfs-resizer.init (100%) rename {packages => TBR/packages}/rootfs-resizer/files/rootfs-resizer.sh (100%) rename {packages => TBR/packages}/router-display/Makefile (100%) rename {packages => TBR/packages}/router-display/files/display-manager.init (100%) rename {packages => TBR/packages}/router-display/files/display-manager.sh (100%) rename {packages => TBR/packages}/router-display/files/display-manager.uci (100%) rename {packages => TBR/packages}/router-display/files/hotplugs/20_power_button (100%) rename {packages => TBR/packages}/router-display/files/logos/boot_logo.fb (100%) rename {packages => TBR/packages}/router-display/files/logos/poweroff_logo.fb (100%) rename {packages => TBR/packages}/router-display/files/logos/readme.md (100%) rename {packages => TBR/packages}/router-display/files/update-display.sh (100%) rename {packages => TBR/packages}/router-display/src/main.c (100%) create mode 100644 TBR/patches/801-arm64-dts-qcom-add-devices-makefile.patch.orig rename {msm89xx/patches-6.12 => TBR/patches}/802-arm64-dts-qcom-add-msm8916-generic-mf68e.patch (100%) rename {msm89xx/patches-6.12 => TBR/patches}/805-arm64-dts-qcom-add-msm8916-generic-m9s.patch (100%) rename {msm89xx/patches-6.12 => TBR/patches}/901-fbtft-fb_gc9107.patch (100%) create mode 100644 TBR/readme.md rename diffconfig => diffconfig_uz801 (100%) create mode 100644 msm89xx/base-files/etc/hotplug.d/ieee80211/99-wifi-led create mode 100644 msm89xx/base-files/etc/hotplug.d/iface/99-modem-led rename packages/configs-dongle/files/uci_defaults => msm89xx/base-files/etc/uci-defaults/99-default-config (75%) mode change 100644 => 100755 rename {packages/prepare-rootfs-data/files => msm89xx/base-files/lib/preinit}/79-format-rootfs-data (100%) mode change 100644 => 100755 rename msm89xx/image/{generate_squahsfs_gpt.sh => generate_squashfs_gpt.sh} (89%) delete mode 100644 optional_battery_prompt delete mode 100644 packages/configs-dongle/Makefile delete mode 100644 packages/configs-dongle/files/hotplugs/99-modem-led delete mode 100644 packages/configs-dongle/files/hotplugs/99-wifi-led delete mode 100644 packages/configs-mifi/files/luci-app-tailscale-1.2.6-r1.apk delete mode 100644 packages/ledcontrol/Makefile delete mode 100644 packages/ledcontrol/ledcontrol.sh delete mode 100644 packages/prepare-rootfs-data/Makefile diff --git a/.github/workflows/build-all.yml b/.github/workflows/build-all.yml index 494f196..8f9b51e 100644 --- a/.github/workflows/build-all.yml +++ b/.github/workflows/build-all.yml @@ -15,7 +15,7 @@ jobs: strategy: fail-fast: false matrix: - device: [uz801, m9s, mf68e, uf02] + device: [uz801, uf02] steps: - name: Checkout @@ -55,7 +55,7 @@ jobs: - name: Load diffconfig run: | DEVICE="${{ matrix.device }}" - DIFFCONFIG=$([ "$DEVICE" = "uz801" ] && echo "diffconfig" || echo "diffconfig_${DEVICE}") + DIFFCONFIG="diffconfig_${DEVICE}" [ -f "$DIFFCONFIG" ] && mv "$DIFFCONFIG" openwrt/.config - name: Download package diff --git a/.github/workflows/build-package.yml b/.github/workflows/build-package.yml new file mode 100644 index 0000000..1b2cac1 --- /dev/null +++ b/.github/workflows/build-package.yml @@ -0,0 +1,77 @@ +name: Build Package + +on: + workflow_dispatch: + inputs: + package: + description: 'Package to build' + required: true + type: string + default: luci-app-tailscale + +env: + TZ: Europe/Madrid + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Initialization environment + env: + DEBIAN_FRONTEND: noninteractive + run: | + sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL + sudo docker image prune --all --force + sudo -E apt-get -qq update + sudo -E ./devenv/dependencies.sh + sudo -E apt-get -qq autoremove --purge + sudo -E apt-get -qq clean + sudo timedatectl set-timezone "$TZ" + + - name: Clone OpenWrt source code + run: | + git clone https://git.openwrt.org/openwrt/openwrt.git openwrt + git -C openwrt checkout 00ceb1ed1763f7479df6edf92ffada948f0e7d45 + + - name: Load msm89xx target and packages + run: | + git apply --unsafe-paths enable_wcn36xx_mac80211.patch + mv msm89xx openwrt/target/linux/msm89xx + mv packages openwrt/package/uz801 + + - name: Update and install feeds + run: | + cd openwrt + rm -rf tmp + ./scripts/feeds update -a + ./scripts/feeds install -a + + - name: Configure for package build + run: | + cd openwrt + mv ../diffconfig_uz801 .config + make defconfig + make download -j8 + find dl -size -1024c -exec rm -f {} \; || true + + - name: Build toolchain and dependencies + run: | + cd openwrt + make tools/install -j$(nproc) + make toolchain/install -j$(nproc) + + - name: Build package + run: | + cd openwrt + make package/${{ inputs.package }}/compile -j$(nproc) V=s + echo "FILE_DATE=$(date +"%Y%m%d%H%M")" >> $GITHUB_ENV + + - name: Upload package + uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.package }}_${{ env.FILE_DATE }} + path: openwrt/bin/packages/**/${{ inputs.package }}*.apk diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fc134f..83e9058 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,8 +11,6 @@ on: default: uz801 options: - uz801 - - m9s - - mf68e - uf02 env: @@ -61,7 +59,7 @@ jobs: - name: Load diffconfig run: | DEVICE="${{ inputs.device || 'uz801' }}" - DIFFCONFIG=$([ "$DEVICE" = "uz801" ] && echo "diffconfig" || echo "diffconfig_${DEVICE}") + DIFFCONFIG="diffconfig_${DEVICE}" [ -f "$DIFFCONFIG" ] && mv "$DIFFCONFIG" openwrt/.config - name: Download package diff --git a/diffconfig_m9s b/TBR/diffconfig_m9s similarity index 100% rename from diffconfig_m9s rename to TBR/diffconfig_m9s diff --git a/diffconfig_mf68e b/TBR/diffconfig_mf68e similarity index 100% rename from diffconfig_mf68e rename to TBR/diffconfig_mf68e diff --git a/TBR/msm8916.mk.devices b/TBR/msm8916.mk.devices new file mode 100644 index 0000000..494c7e2 --- /dev/null +++ b/TBR/msm8916.mk.devices @@ -0,0 +1,24 @@ +## Deprecated device definitions - moved from msm8916.mk + +define Device/generic-mf68e + $(Device/msm8916) + DEVICE_VENDOR := Generic + DEVICE_MODEL := MF68E + FILESYSTEMS := squashfs + CMDLINE := "earlycon console=ttyMSM0,115200 quiet loglevel=0 vt.global_cursor_default=0 vt.cur_default=0 root=/dev/mmcblk0p14 rootfstype=squashfs rootwait nowatchdog" + DEVICE_PACKAGES := configs-mifi wpad-basic-wolfssl rmtfs uci-usb-gadget \ + block-mount f2fs-tools \ + msm-firmware-dumper kmod-fbtft-gc9107 router-display +endef +TARGET_DEVICES += generic-mf68e + +define Device/generic-m9s + $(Device/msm8916) + DEVICE_VENDOR := Generic + DEVICE_MODEL := M9S + FILESYSTEMS := squashfs + DEVICE_PACKAGES := configs-mifi wpad-basic-wolfssl rmtfs uci-usb-gadget \ + block-mount f2fs-tools \ + msm-firmware-dumper +endef +TARGET_DEVICES += generic-m9s diff --git a/packages/configs-mifi/Makefile b/TBR/packages/configs-mifi/Makefile similarity index 100% rename from packages/configs-mifi/Makefile rename to TBR/packages/configs-mifi/Makefile diff --git a/packages/configs-mifi/files/battery-monitor.init b/TBR/packages/configs-mifi/files/battery-monitor.init similarity index 100% rename from packages/configs-mifi/files/battery-monitor.init rename to TBR/packages/configs-mifi/files/battery-monitor.init diff --git a/packages/configs-mifi/files/battery.htm b/TBR/packages/configs-mifi/files/battery.htm similarity index 100% rename from packages/configs-mifi/files/battery.htm rename to TBR/packages/configs-mifi/files/battery.htm diff --git a/packages/configs-mifi/files/hotplugs/50-battery-show b/TBR/packages/configs-mifi/files/hotplugs/50-battery-show similarity index 100% rename from packages/configs-mifi/files/hotplugs/50-battery-show rename to TBR/packages/configs-mifi/files/hotplugs/50-battery-show diff --git a/packages/configs-mifi/files/hotplugs/99-modem-led b/TBR/packages/configs-mifi/files/hotplugs/99-modem-led similarity index 100% rename from packages/configs-mifi/files/hotplugs/99-modem-led rename to TBR/packages/configs-mifi/files/hotplugs/99-modem-led diff --git a/packages/configs-mifi/files/hotplugs/99-wifi-led b/TBR/packages/configs-mifi/files/hotplugs/99-wifi-led similarity index 100% rename from packages/configs-mifi/files/hotplugs/99-wifi-led rename to TBR/packages/configs-mifi/files/hotplugs/99-wifi-led diff --git a/packages/configs-dongle/files/luci-app-tailscale-1.2.6-r1.apk b/TBR/packages/configs-mifi/files/luci-app-tailscale-1.2.6-r1.apk similarity index 100% rename from packages/configs-dongle/files/luci-app-tailscale-1.2.6-r1.apk rename to TBR/packages/configs-mifi/files/luci-app-tailscale-1.2.6-r1.apk diff --git a/packages/configs-mifi/files/rc.button.power b/TBR/packages/configs-mifi/files/rc.button.power similarity index 100% rename from packages/configs-mifi/files/rc.button.power rename to TBR/packages/configs-mifi/files/rc.button.power diff --git a/packages/configs-mifi/files/uci_defaults b/TBR/packages/configs-mifi/files/uci_defaults similarity index 100% rename from packages/configs-mifi/files/uci_defaults rename to TBR/packages/configs-mifi/files/uci_defaults diff --git a/packages/fbtft-gc9107/Makefile b/TBR/packages/fbtft-gc9107/Makefile similarity index 100% rename from packages/fbtft-gc9107/Makefile rename to TBR/packages/fbtft-gc9107/Makefile diff --git a/packages/fbtft-gc9107/preinit/05_dim_backlight b/TBR/packages/fbtft-gc9107/preinit/05_dim_backlight similarity index 100% rename from packages/fbtft-gc9107/preinit/05_dim_backlight rename to TBR/packages/fbtft-gc9107/preinit/05_dim_backlight diff --git a/packages/rootfs-resizer/Makefile b/TBR/packages/rootfs-resizer/Makefile similarity index 100% rename from packages/rootfs-resizer/Makefile rename to TBR/packages/rootfs-resizer/Makefile diff --git a/packages/rootfs-resizer/files/rootfs-resizer.init b/TBR/packages/rootfs-resizer/files/rootfs-resizer.init similarity index 100% rename from packages/rootfs-resizer/files/rootfs-resizer.init rename to TBR/packages/rootfs-resizer/files/rootfs-resizer.init diff --git a/packages/rootfs-resizer/files/rootfs-resizer.sh b/TBR/packages/rootfs-resizer/files/rootfs-resizer.sh similarity index 100% rename from packages/rootfs-resizer/files/rootfs-resizer.sh rename to TBR/packages/rootfs-resizer/files/rootfs-resizer.sh diff --git a/packages/router-display/Makefile b/TBR/packages/router-display/Makefile similarity index 100% rename from packages/router-display/Makefile rename to TBR/packages/router-display/Makefile diff --git a/packages/router-display/files/display-manager.init b/TBR/packages/router-display/files/display-manager.init similarity index 100% rename from packages/router-display/files/display-manager.init rename to TBR/packages/router-display/files/display-manager.init diff --git a/packages/router-display/files/display-manager.sh b/TBR/packages/router-display/files/display-manager.sh similarity index 100% rename from packages/router-display/files/display-manager.sh rename to TBR/packages/router-display/files/display-manager.sh diff --git a/packages/router-display/files/display-manager.uci b/TBR/packages/router-display/files/display-manager.uci similarity index 100% rename from packages/router-display/files/display-manager.uci rename to TBR/packages/router-display/files/display-manager.uci diff --git a/packages/router-display/files/hotplugs/20_power_button b/TBR/packages/router-display/files/hotplugs/20_power_button similarity index 100% rename from packages/router-display/files/hotplugs/20_power_button rename to TBR/packages/router-display/files/hotplugs/20_power_button diff --git a/packages/router-display/files/logos/boot_logo.fb b/TBR/packages/router-display/files/logos/boot_logo.fb similarity index 100% rename from packages/router-display/files/logos/boot_logo.fb rename to TBR/packages/router-display/files/logos/boot_logo.fb diff --git a/packages/router-display/files/logos/poweroff_logo.fb b/TBR/packages/router-display/files/logos/poweroff_logo.fb similarity index 100% rename from packages/router-display/files/logos/poweroff_logo.fb rename to TBR/packages/router-display/files/logos/poweroff_logo.fb diff --git a/packages/router-display/files/logos/readme.md b/TBR/packages/router-display/files/logos/readme.md similarity index 100% rename from packages/router-display/files/logos/readme.md rename to TBR/packages/router-display/files/logos/readme.md diff --git a/packages/router-display/files/update-display.sh b/TBR/packages/router-display/files/update-display.sh similarity index 100% rename from packages/router-display/files/update-display.sh rename to TBR/packages/router-display/files/update-display.sh diff --git a/packages/router-display/src/main.c b/TBR/packages/router-display/src/main.c similarity index 100% rename from packages/router-display/src/main.c rename to TBR/packages/router-display/src/main.c diff --git a/TBR/patches/801-arm64-dts-qcom-add-devices-makefile.patch.orig b/TBR/patches/801-arm64-dts-qcom-add-devices-makefile.patch.orig new file mode 100644 index 0000000..741b197 --- /dev/null +++ b/TBR/patches/801-arm64-dts-qcom-add-devices-makefile.patch.orig @@ -0,0 +1,22 @@ +From: hkfuertes +Date: Sat, 11 Oct 2025 11:49:00 +0200 +Subject: [PATCH] arm64: dts: qcom: Add MF68E and M9S to Makefile + +Add msm8916-generic-mf68e.dtb and msm8916-generic-m9s.dtb to Makefile. + +Signed-off-by: hkfuertes +--- + arch/arm64/boot/dts/qcom/Makefile | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/arch/arm64/boot/dts/qcom/Makefile ++++ b/arch/arm64/boot/dts/qcom/Makefile +@@ -23,6 +23,8 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsu + dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-gt58.dtb + dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-j3ltetw.dtb + dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-j5.dtb ++dtb-$(CONFIG_ARCH_QCOM) += msm8916-generic-mf68e.dtb ++dtb-$(CONFIG_ARCH_QCOM) += msm8916-generic-m9s.dtb + dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-j5x.dtb + dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-rossa.dtb + dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-serranove.dtb diff --git a/msm89xx/patches-6.12/802-arm64-dts-qcom-add-msm8916-generic-mf68e.patch b/TBR/patches/802-arm64-dts-qcom-add-msm8916-generic-mf68e.patch similarity index 100% rename from msm89xx/patches-6.12/802-arm64-dts-qcom-add-msm8916-generic-mf68e.patch rename to TBR/patches/802-arm64-dts-qcom-add-msm8916-generic-mf68e.patch diff --git a/msm89xx/patches-6.12/805-arm64-dts-qcom-add-msm8916-generic-m9s.patch b/TBR/patches/805-arm64-dts-qcom-add-msm8916-generic-m9s.patch similarity index 100% rename from msm89xx/patches-6.12/805-arm64-dts-qcom-add-msm8916-generic-m9s.patch rename to TBR/patches/805-arm64-dts-qcom-add-msm8916-generic-m9s.patch diff --git a/msm89xx/patches-6.12/901-fbtft-fb_gc9107.patch b/TBR/patches/901-fbtft-fb_gc9107.patch similarity index 100% rename from msm89xx/patches-6.12/901-fbtft-fb_gc9107.patch rename to TBR/patches/901-fbtft-fb_gc9107.patch diff --git a/TBR/readme.md b/TBR/readme.md new file mode 100644 index 0000000..7af42ba --- /dev/null +++ b/TBR/readme.md @@ -0,0 +1,52 @@ +# TBR - Deprecated Device Support (MF68E, M9S) + +These files were removed from the main build but are kept here for reference. +They supported MiFi-style devices (MF68E, M9S) with displays, battery monitoring +and power button handling. + +## How to re-integrate + +### 1. Device definitions + +Add the contents of `msm8916.mk.devices` to `msm89xx/image/msm8916.mk`, +before the `endif` line. + +### 2. Kernel patches + +Copy the patches back into `msm89xx/patches-6.12/`: + +```sh +cp patches/802-arm64-dts-qcom-add-msm8916-generic-mf68e.patch ../msm89xx/patches-6.12/ +cp patches/805-arm64-dts-qcom-add-msm8916-generic-m9s.patch ../msm89xx/patches-6.12/ +cp patches/901-fbtft-fb_gc9107.patch ../msm89xx/patches-6.12/ +``` + +The `801-...patch.orig` only adds mf68e and m9s (UF02 is already handled +by the active `801` patch). Both patches touch different lines so they +apply cleanly one after another. + +### 3. Packages + +Move the packages back into the `packages/` directory: + +```sh +cp -r packages/configs-mifi ../packages/ +cp -r packages/router-display ../packages/ +cp -r packages/fbtft-gc9107 ../packages/ +``` + +These packages provide: +- **configs-mifi**: UCI defaults, LED hotplugs, battery monitoring, power button + handling, and a pre-built Tailscale APK for MiFi devices. +- **router-display**: SPI display manager (GC9107) with boot/shutdown logos and + status display for MF68E. +- **fbtft-gc9107**: Kernel module for the GC9107 framebuffer (SPI display). + +### 4. Diffconfigs + +Move `diffconfig_m9s` and `diffconfig_mf68e` back to the repository root. + +### 5. CI/CD + +Add `m9s` and `mf68e` back to the device matrix in `.github/workflows/build-all.yml` +and the choice options in `.github/workflows/build.yml`. diff --git a/diffconfig b/diffconfig_uz801 similarity index 100% rename from diffconfig rename to diffconfig_uz801 diff --git a/msm89xx/base-files/etc/hotplug.d/ieee80211/99-wifi-led b/msm89xx/base-files/etc/hotplug.d/ieee80211/99-wifi-led new file mode 100644 index 0000000..083e1fb --- /dev/null +++ b/msm89xx/base-files/etc/hotplug.d/ieee80211/99-wifi-led @@ -0,0 +1,17 @@ +#!/bin/sh + +LED="/sys/class/leds/blue:wlan" +[ -d "$LED" ] || exit 0 + +case "$ACTION" in + add) + [ "$DEVICENAME" = "phy0" ] || exit 0 + echo none > "$LED/trigger" + echo 1 > "$LED/brightness" + ;; + remove) + [ "$DEVICENAME" = "phy0" ] || exit 0 + echo none > "$LED/trigger" + echo 0 > "$LED/brightness" + ;; +esac diff --git a/msm89xx/base-files/etc/hotplug.d/iface/99-modem-led b/msm89xx/base-files/etc/hotplug.d/iface/99-modem-led new file mode 100644 index 0000000..38bf4d4 --- /dev/null +++ b/msm89xx/base-files/etc/hotplug.d/iface/99-modem-led @@ -0,0 +1,15 @@ +#!/bin/sh + +LED="/sys/class/leds/green:wan" +[ -d "$LED" ] || exit 0 + +case "$ACTION:$INTERFACE" in + ifup:modem) + echo none > "$LED/trigger" + echo 1 > "$LED/brightness" + ;; + ifdown:modem) + echo none > "$LED/trigger" + echo 0 > "$LED/brightness" + ;; +esac diff --git a/packages/configs-dongle/files/uci_defaults b/msm89xx/base-files/etc/uci-defaults/99-default-config old mode 100644 new mode 100755 similarity index 75% rename from packages/configs-dongle/files/uci_defaults rename to msm89xx/base-files/etc/uci-defaults/99-default-config index f39e7b3..ee86f1f --- a/packages/configs-dongle/files/uci_defaults +++ b/msm89xx/base-files/etc/uci-defaults/99-default-config @@ -1,10 +1,5 @@ #!/bin/sh -# Enabling WiFi -uci set wireless.@wifi-device[0].disabled='0' -uci set wireless.@wifi-iface[0].disabled='0' -uci commit wireless - # Create modem interface uci set network.modem=interface uci set network.modem.proto='modemmanager' @@ -14,17 +9,11 @@ uci set network.modem.apn='internet' uci set network.modem.allowedmode='4g|3g' uci set network.modem.preferredmode='4g' uci set network.modem.ifname='wwan0' -uci commit network - uci del_list firewall.@zone[1].network='modem' uci add_list firewall.@zone[1].network='modem' -uci commit firewall # We don't have eth0 uci -q del_list "network.@device[0].ports=eth0" 2>/dev/null || true sed -i 's/"device": "eth0"/"device": "br-lan"/g' /etc/board.json -# Commit all changes uci commit - -exit 0 diff --git a/packages/prepare-rootfs-data/files/79-format-rootfs-data b/msm89xx/base-files/lib/preinit/79-format-rootfs-data old mode 100644 new mode 100755 similarity index 100% rename from packages/prepare-rootfs-data/files/79-format-rootfs-data rename to msm89xx/base-files/lib/preinit/79-format-rootfs-data diff --git a/msm89xx/image/flash.sh b/msm89xx/image/flash.sh index e4c24da..df469a2 100644 --- a/msm89xx/image/flash.sh +++ b/msm89xx/image/flash.sh @@ -1,17 +1,23 @@ -#!/usr/bin/env bash -# Prerequisites: EDL mode and fastboot. -# Usage: Execute from bin/targets/XXX/YYY/ directory -# Notes: -# - Automatically detects "*-firmware.zip" in the current directory, extracts .mbn files to a temp dir, and uses them. -# - Falls back to manual directory selection if the ZIP is not found. +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0-only +# +# Flash OpenWrt to MSM8916 devices entirely via EDL. +# Prerequisites: edl, simg2img +# Usage: run from the build output directory (bin/targets/...) set -euo pipefail -# Find a file by pattern at a given directory depth. +# Must match TOT_SECTORS in generate_squashfs_gpt.sh +TOT_SECTORS=7569408 + +# Temp files - cleaned up on exit +firmware_tmp="" +rootfs_raw="" +gpt_tmp="" +trap 'rm -rf "$firmware_tmp" "$rootfs_raw" "$gpt_tmp"' EXIT + find_image() { - local dir="$1" - local pattern="$2" - local file + local dir="$1" pattern="$2" file file=$(find "$dir" -maxdepth 1 -type f -name "$pattern" 2>/dev/null | head -n 1 || true) if [[ -z "${file:-}" ]]; then echo "[-] Error: Image not found with pattern: $pattern" >&2 @@ -20,37 +26,27 @@ find_image() { echo "$file" } -echo "=== OpenWrt SquashFS Flash Script ===" -echo "[*] Filesystem: SquashFS" -echo - -# Use current directory for images. -openwrt_dir="." -echo "[*] Using current directory: $(pwd)" +echo "=== OpenWrt MSM8916 EDL Flash Script ===" echo # Detect required OpenWrt images. echo "[*] Detecting OpenWrt images..." -gpt_path=$(find_image "$openwrt_dir" "*-squashfs-gpt_both0.bin") || exit 1 -boot_path=$(find_image "$openwrt_dir" "*-squashfs-boot.img") || exit 1 -system_path=$(find_image "$openwrt_dir" "*-squashfs-system.img") || exit 1 +gpt_path=$(find_image "." "*-squashfs-gpt_both0.bin") || exit 1 +boot_path=$(find_image "." "*-squashfs-boot.img") || exit 1 +rootfs_path=$(find_image "." "*-squashfs-system.img") || exit 1 -echo "[+] GPT: $(basename "$gpt_path")" -echo "[+] Boot: $(basename "$boot_path")" -echo "[+] Rootfs: $(basename "$system_path")" +echo "[+] GPT: $(basename "$gpt_path")" +echo "[+] Boot: $(basename "$boot_path")" +echo "[+] Rootfs: $(basename "$rootfs_path")" # Detect firmware ZIP and extract .mbn files. echo echo "=== Firmware bundle (.zip) ===" -zip_path="$(find_image "$openwrt_dir" "*-firmware.zip" || true)" - -firmware_tmp="" -firmware_dir="" +zip_path="$(find_image "." "*-firmware.zip" || true)" if [[ -n "${zip_path:-}" ]]; then echo "[*] Found firmware ZIP: $(basename "$zip_path")" firmware_tmp="$(mktemp -d)" - trap 'if [[ -n "$firmware_tmp" && -d "$firmware_tmp" ]]; then rm -rf "$firmware_tmp"; fi' EXIT echo "[*] Extracting .mbn files..." unzip -q -j -d "$firmware_tmp" "$zip_path" "*.mbn" || { echo "[-] Error: Failed to extract .mbn files from ZIP" @@ -61,13 +57,11 @@ else echo "[!] No firmware ZIP found in the current directory" echo "=== Qualcomm Firmware Directory (fallback) ===" read -e -r -p "Drag the folder with .mbn files (aboot, hyp, rpm, sbl1, tz): " firmware_dir - # Normalize quotes and spaces (useful for drag-and-drop from GUI). firmware_dir="${firmware_dir//\"/}" firmware_dir="${firmware_dir//\'/}" firmware_dir="${firmware_dir// /}" fi -# Validate firmware directory. if [[ -z "$firmware_dir" || ! -d "$firmware_dir" ]]; then echo "[-] Error: Invalid firmware directory: $firmware_dir" exit 1 @@ -77,7 +71,7 @@ echo "[*] Using firmware directory: $firmware_dir" echo # Verify required .mbn files. -echo "[*] Verifying Qualcomm firmware partitions..." +echo "[*] Verifying firmware partitions..." missing_mbn=false for part in aboot hyp rpm sbl1 tz; do if [[ ! -f "$firmware_dir/${part}.mbn" ]]; then @@ -89,15 +83,27 @@ for part in aboot hyp rpm sbl1 tz; do done if [[ "$missing_mbn" == true ]]; then - echo - echo "[-] ERROR: Missing required .mbn files for flashing." - echo "[!] Ensure ZIP extraction succeeded or provide a correct directory." + echo "[-] ERROR: Missing required .mbn files." exit 1 fi +# Convert sparse rootfs to raw if needed (simg2img). +echo +echo "[*] Checking rootfs format..." +if file "$rootfs_path" | grep -q "Android sparse image"; then + echo "[*] Sparse image detected, converting to raw..." + rootfs_raw="$(mktemp --suffix=.img)" + simg2img "$rootfs_path" "$rootfs_raw" || { echo "[-] simg2img failed"; exit 1; } + rootfs_flash="$rootfs_raw" + echo "[+] Converted: $(du -h "$rootfs_raw" | cut -f1)" +else + rootfs_flash="$rootfs_path" + echo "[+] Raw image, no conversion needed" +fi + # Confirm before flashing. echo -read -p "Continue with flashing? (y/N): " confirm +read -r -p "Continue with flashing? (y/N): " confirm if [[ ! "$confirm" =~ ^[Yy]$ ]]; then echo "[!] Cancelled" exit 0 @@ -105,74 +111,48 @@ fi mkdir -p saved -# Backup critical partitions via EDL. +# Backup critical partitions. echo echo "=== Partition Backup (EDL) ===" for n in fsc fsg modemst1 modemst2 modem persist sec; do - echo "[*] Backing up partition $n ..." + echo "[*] Backing up $n..." edl r "$n" "saved/$n.bin" || { echo "[-] Error backing up $n"; exit 1; } done -# Flash aboot via EDL to get a known-good aboot. +# Flash new GPT via raw sector writes first, so all subsequent flashes +# use the correct partition offsets from the OpenWrt GPT. +# gpt_both0.bin layout: [34 sectors primary] [32 sectors backup entries] [1 sector backup header] echo -echo "=== Flashing Partitions (EDL) ===" -echo "[*] Flashing aboot via EDL..." +echo "=== Flashing GPT (EDL) ===" +gpt_tmp="$(mktemp -d)" +dd if="$gpt_path" bs=512 count=34 of="${gpt_tmp}/primary.bin" 2>/dev/null +dd if="$gpt_path" bs=512 skip=34 count=32 of="${gpt_tmp}/backup_entries.bin" 2>/dev/null +dd if="$gpt_path" bs=512 skip=66 count=1 of="${gpt_tmp}/backup_header.bin" 2>/dev/null +edl ws 0 "${gpt_tmp}/primary.bin" || { echo "[-] Error flashing primary GPT"; exit 1; } +edl ws $((TOT_SECTORS - 33)) "${gpt_tmp}/backup_entries.bin" || { echo "[-] Error flashing GPT backup entries"; exit 1; } +edl ws $((TOT_SECTORS - 1)) "${gpt_tmp}/backup_header.bin" || { echo "[-] Error flashing GPT backup header"; exit 1; } + +# Flash firmware, boot, rootfs (new GPT now active, correct offsets). +echo +echo "=== Flashing Firmware + OpenWrt images (EDL) ===" edl w aboot "$firmware_dir/aboot.mbn" || { echo "[-] Error flashing aboot"; exit 1; } +edl w hyp "$firmware_dir/hyp.mbn" || { echo "[-] Error flashing hyp"; exit 1; } +edl w rpm "$firmware_dir/rpm.mbn" || { echo "[-] Error flashing rpm"; exit 1; } +edl w sbl1 "$firmware_dir/sbl1.mbn" || { echo "[-] Error flashing sbl1"; exit 1; } +edl w tz "$firmware_dir/tz.mbn" || { echo "[-] Error flashing tz"; exit 1; } +edl w boot "$boot_path" || { echo "[-] Error flashing boot"; exit 1; } +edl w rootfs "$rootfs_flash" || { echo "[-] Error flashing rootfs"; exit 1; } +edl e rootfs_data || { echo "[-] Error erasing rootfs_data"; exit 1; } -# Reboot to fastboot using EDL commands. -echo "[*] Rebooting to fastboot..." -edl e boot || { echo "[-] Error rebooting to fastboot"; exit 1; } -edl reset || { echo "[-] Error resetting device"; exit 1; } - -# Wait for fastboot to come up. -echo "[*] Waiting for fastboot mode (up to 10s)..." -for i in {1..10}; do - if fastboot devices | grep -qE "fastboot$"; then - echo "[+] Fastboot device detected" - break - fi - sleep 1 - if [[ $i -eq 10 ]]; then - echo "[-] Error: Fastboot device not detected" - exit 1 - fi -done - -# Flash GPT and firmware via fastboot. -echo -echo "=== Flashing partitions (fastboot) ===" -echo "[*] Flashing GPT..." -fastboot flash partition "$gpt_path" || { echo "[-] Error flashing partition"; exit 1; } - -echo "[*] Flashing firmware (.mbn files)..." -fastboot flash aboot "$firmware_dir/aboot.mbn" || { echo "[-] Error flashing aboot"; exit 1; } -fastboot flash hyp "$firmware_dir/hyp.mbn" || { echo "[-] Error flashing hyp"; exit 1; } -fastboot flash rpm "$firmware_dir/rpm.mbn" || { echo "[-] Error flashing rpm"; exit 1; } -fastboot flash sbl1 "$firmware_dir/sbl1.mbn" || { echo "[-] Error flashing sbl1"; exit 1; } -fastboot flash tz "$firmware_dir/tz.mbn" || { echo "[-] Error flashing tz"; exit 1; } - -echo "[*] Flashing OpenWrt images..." -fastboot flash boot "$boot_path" || { echo "[-] Error flashing boot"; exit 1; } -fastboot flash rootfs "$system_path" || { echo "[-] Error flashing rootfs"; exit 1; } -fastboot erase rootfs_data || { echo "[-] Error erasing rootfs_data"; exit 1; } - -# Reboot back to EDL to restore radio-cal data partitions. -echo "[*] Rebooting to EDL mode..." -fastboot oem reboot-edl || { echo "[-] Error rebooting to EDL"; exit 1; } - -# Small wait for EDL to be available. -echo "[*] Waiting for EDL mode (3 seconds)..." -sleep 3 - -# Restore backed-up partitions via EDL. +# Restore radio partitions. echo echo "=== Partition Restoration (EDL) ===" for n in fsc fsg modemst1 modemst2 modem persist sec; do - echo "[*] Restoring partition $n ..." + echo "[*] Restoring $n..." edl w "$n" "saved/$n.bin" || { echo "[-] Error restoring $n"; exit 1; } done echo -echo "[+] Process completed successfully" -echo "[*] Rebooting device..." +echo "[+] Flash completed successfully" +echo "[*] Rebooting..." edl reset || { echo "[-] Error resetting device"; exit 1; } diff --git a/msm89xx/image/generate_firmware.sh b/msm89xx/image/generate_firmware.sh index 8526632..91fbefd 100755 --- a/msm89xx/image/generate_firmware.sh +++ b/msm89xx/image/generate_firmware.sh @@ -1,8 +1,10 @@ #!/bin/bash -# Build firmware bundle: compiles qhypstub (AArch64 asm) and lk2nd (ARM), signs them, and packs a ZIP. -# Works inside OpenWrt build by restoring implicit make rules only for qhypstub and using detected toolchains. +# SPDX-License-Identifier: GPL-2.0-only +# +# Build firmware bundle: compiles qhypstub (AArch64 asm) and lk2nd (ARM), +# signs them with qtestsign, and packs a ZIP. -set -e +set -euo pipefail OUT_FILE="${1:-uz801v3-firmware.zip}" diff --git a/msm89xx/image/generate_squahsfs_gpt.sh b/msm89xx/image/generate_squashfs_gpt.sh similarity index 89% rename from msm89xx/image/generate_squahsfs_gpt.sh rename to msm89xx/image/generate_squashfs_gpt.sh index 873d14f..1dc1ae9 100755 --- a/msm89xx/image/generate_squahsfs_gpt.sh +++ b/msm89xx/image/generate_squashfs_gpt.sh @@ -1,11 +1,16 @@ -#!/bin/sh -e -# Creates GPT table with fixed TOT_SECTORS=7569408 (512B logical sectors) -# To get TOT_SECTORS automatically from EDL: +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0-only +# +# Generate GPT image for MSM8916 eMMC (7569408 x 512B sectors). +# To read TOT_SECTORS from a live device: # HEX=$(edl printgpt 2>&1 | sed -n 's/.*sectors:\(0x[0-9A-Fa-f]\+\).*/\1/p' | tail -n1) # TOT_SECTORS=$((HEX)) +set -e + OUTFILE=${1:-gpt_both0.bin} TMPDIR=$(mktemp -d) +trap 'rm -rf "$TMPDIR"' EXIT IMG="${TMPDIR}/gpt.img" # Total size in 512B sectors @@ -24,13 +29,10 @@ ROOTFS_END=$((ROOTFS_START + ROOTFS_SIZE - 1)) ROOTFSDATA_START=$((ROOTFS_END + 1)) ROOTFSDATA_SIZE=$((LAST_LBA - ROOTFSDATA_START + 1)) -# Validation [ ${ROOTFSDATA_SIZE} -gt 0 ] || { echo "ERROR: No space for rootfs_data"; exit 1; } -# Create image with exact size truncate -s $((TOT_SECTORS * 512)) "${IMG}" -# Generate GPT table sfdisk "${IMG}" <> "${OUTFILE}" dd if="${IMG}" bs=512 skip=$((TOT_SECTORS - 1)) count=1 >> "${OUTFILE}" diff --git a/msm89xx/image/msm8916.mk b/msm89xx/image/msm8916.mk index 4d90a8a..a70e86e 100644 --- a/msm89xx/image/msm8916.mk +++ b/msm89xx/image/msm8916.mk @@ -3,8 +3,8 @@ ifeq ($(SUBTARGET),msm8916) define Build/generate-squashfs-gpt - chmod +x $(TOPDIR)/target/linux/$(BOARD)/image/generate_squahsfs_gpt.sh - $(TOPDIR)/target/linux/$(BOARD)/image/generate_squahsfs_gpt.sh $@ + chmod +x $(TOPDIR)/target/linux/$(BOARD)/image/generate_squashfs_gpt.sh + $(TOPDIR)/target/linux/$(BOARD)/image/generate_squashfs_gpt.sh $@ endef define Build/install-flasher @@ -33,8 +33,8 @@ define Device/yiming-uz801v3 DEVICE_VENDOR := YiMing DEVICE_MODEL := uz801v3 FILESYSTEMS := squashfs - DEVICE_PACKAGES := configs-dongle wpad-basic-wolfssl rmtfs uci-usb-gadget \ - block-mount f2fs-tools prepare-rootfs-data \ + DEVICE_PACKAGES := wpad-basic-wolfssl rmtfs uci-usb-gadget \ + block-mount f2fs-tools \ msm-firmware-dumper endef TARGET_DEVICES += yiming-uz801v3 @@ -44,34 +44,10 @@ define Device/generic-uf02 DEVICE_VENDOR := Generic DEVICE_MODEL := UF02 (250605 V0S) FILESYSTEMS := squashfs - DEVICE_PACKAGES := configs-dongle wpad-basic-wolfssl rmtfs uci-usb-gadget \ - block-mount f2fs-tools prepare-rootfs-data \ + DEVICE_PACKAGES := wpad-basic-wolfssl rmtfs uci-usb-gadget \ + block-mount f2fs-tools \ msm-firmware-dumper endef TARGET_DEVICES += generic-uf02 - -define Device/generic-mf68e - $(Device/msm8916) - DEVICE_VENDOR := Generic - DEVICE_MODEL := MF68E - FILESYSTEMS := squashfs - CMDLINE := "earlycon console=ttyMSM0,115200 quiet loglevel=0 vt.global_cursor_default=0 vt.cur_default=0 root=/dev/mmcblk0p14 rootfstype=squashfs rootwait nowatchdog" - DEVICE_PACKAGES := configs-mifi wpad-basic-wolfssl rmtfs uci-usb-gadget \ - block-mount f2fs-tools prepare-rootfs-data \ - msm-firmware-dumper kmod-fbtft-gc9107 router-display -endef -TARGET_DEVICES += generic-mf68e - -define Device/generic-m9s - $(Device/msm8916) - DEVICE_VENDOR := Generic - DEVICE_MODEL := M9S - FILESYSTEMS := squashfs - DEVICE_PACKAGES := configs-mifi wpad-basic-wolfssl rmtfs uci-usb-gadget \ - block-mount f2fs-tools prepare-rootfs-data \ - msm-firmware-dumper -endef -TARGET_DEVICES += generic-m9s - endif diff --git a/msm89xx/patches-6.12/801-arm64-dts-qcom-add-devices-makefile.patch b/msm89xx/patches-6.12/801-arm64-dts-qcom-add-devices-makefile.patch index 32dedca..a01b85a 100644 --- a/msm89xx/patches-6.12/801-arm64-dts-qcom-add-devices-makefile.patch +++ b/msm89xx/patches-6.12/801-arm64-dts-qcom-add-devices-makefile.patch @@ -1,8 +1,8 @@ From: hkfuertes Date: Sat, 11 Oct 2025 11:49:00 +0200 -Subject: [PATCH] arm64: dts: qcom: Add MF68E to Makefile +Subject: [PATCH] arm64: dts: qcom: Add UF02 to Makefile -Add msm8916-generic-mf68e.dtb to Makefile. +Add msm8916-generic-uf02.dtb to Makefile. Signed-off-by: hkfuertes --- @@ -11,13 +11,11 @@ Signed-off-by: hkfuertes --- a/arch/arm64/boot/dts/qcom/Makefile +++ b/arch/arm64/boot/dts/qcom/Makefile -@@ -23,6 +23,9 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsu +@@ -23,6 +23,7 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsu dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-gt58.dtb dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-j3ltetw.dtb dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-j5.dtb -+dtb-$(CONFIG_ARCH_QCOM) += msm8916-generic-mf68e.dtb +dtb-$(CONFIG_ARCH_QCOM) += msm8916-generic-uf02.dtb -+dtb-$(CONFIG_ARCH_QCOM) += msm8916-generic-m9s.dtb dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-j5x.dtb dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-rossa.dtb dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-serranove.dtb diff --git a/optional_battery_prompt b/optional_battery_prompt deleted file mode 100644 index 1efc1cb..0000000 --- a/optional_battery_prompt +++ /dev/null @@ -1,172 +0,0 @@ -Perfecto. Aquí tienes la **checklist definitiva** para solucionar esto por software en el futuro:[1][2][3] - -## Checklist: Simular batería presente por software - -### 1. **Información que necesito darte** - -Cuando quieras hacer esto en otro dispositivo, dame:[4][5] - -**A) El device tree completo del dispositivo** (archivo `.dts`) -- Para identificar qué GPIOs y canales VADC están definidos - -**B) El device tree base de msm8916** (normalmente `msm8916-ufi.dtsi`) -- Para ver qué tiene el PMIC configurado por defecto - -**C) Logs del kernel con batería vs sin batería** -```bash -dmesg | grep -E "pm8916|bms|vadc|bat" -``` - -**D) Estado actual de los sysfs relevantes** -```bash -ls -la /sys/class/power_supply/ -cat /sys/kernel/debug/iio/iio:device*/in_*_raw -cat /sys/bus/spmi/devices/0-000*/name -``` - -### 2. **Preguntas clave que debes hacerme** - -Cuando tengas esa información, pregúntame:[2][3][1] - -**"¿Cómo simular batería presente en [nombre-dispositivo]?"** - -Y específicamente investigo: - -**a) Identificar el canal VADC de BAT_ID**[1] -``` -¿Qué canal del PM8916 VADC lee el BAT_ID? -``` -Normalmente es `VADC_LR_MUX2_BAT_ID` o similar. - -**b) Localizar GPIO asociado a BAT_ID**[3][2] -``` -¿Hay algún GPIO del PMIC conectado a BAT_ID? -``` - -**c) Ver configuración actual del BMS**[1] -``` -¿Qué propiedades tiene el nodo &pm8916_bms? -``` - -### 3. **Soluciones software que aplicaré** - -Según lo que encuentre, te daré una de estas soluciones:[2][3][1] - -#### Opción A: Desactivar lectura de BAT_ID en VADC - -```dts -&pm8916_vadc { - /* Comentar/eliminar el canal BAT_ID */ - /* - bat-id@12 { - reg = ; - qcom,pre-scaling = <1 1>; - qcom,hw-settle-time = <200>; - }; - */ -}; -``` - -#### Opción B: Forzar GPIO en pull-down permanente - -```dts -&pm8916_gpios { - bat_id_pulldown: bat-id-pulldown-state { - pins = "gpioX"; // X = número de GPIO - function = "normal"; - input-disable; - output-low; - bias-pull-down; - power-source = ; - }; -}; -``` - -#### Opción C: Modificar propiedades del BMS - -```dts -&pm8916_bms { - status = "okay"; - monitored-battery = <&bat>; - power-supplies = <&pm8916_charger>; - - /* Opciones para ignorar BAT_ID */ - qcom,ignore-shutdown-soc; - qcom,force-bms-active-on-charger; - /delete-property/ io-channels; // Elimina referencia a VADC -}; -``` - -#### Opción D: Simular resistencia con GPIO analog - -```dts -&pm8916_gpios { - bat_id_sim: bat-id-simulation { - pins = "gpioX"; - function = "normal"; - qcom,pull-up-strength = ; // 100kΩ equiv - bias-pull-down; - }; -}; -``` - -### 4. **Archivos que necesito ver** - -Cuando me preguntes, adjunta estos archivos:[5][4] - -```bash -# 1. DTS del dispositivo -target/linux/msm89xx/dts/qcom/msm8916-generic-TUDEVICE.dts - -# 2. DTSI base si existe -target/linux/msm89xx/dts/qcom/msm8916-ufi.dtsi - -# 3. Configuración del kernel (opcional pero útil) -target/linux/msm89xx/config-* - -# 4. Output de debugfs con batería conectada -cat /sys/kernel/debug/pm8916-adc/channels -cat /sys/kernel/debug/gpio -``` - -### 5. **Comando diagnóstico rápido** - -Cuando no arranque sin batería, ejecuta esto (con UART/serial):[2][1] - -```bash -# Durante boot, captura: -dmesg | grep -i "bat\|bms\|vadc\|adc" > /tmp/boot_log.txt - -# Y también: -cat /sys/bus/spmi/devices/*/name -cat /proc/interrupts | grep pm8916 -``` - -Y pásame ese log completo. - -### 6. **Resumen: ¿Qué te pregunto yo a ti?** - -Cuando tengas un dispositivo nuevo que no arranca sin batería:[3][1][2] - -> **"Tengo [dispositivo] con MSM8916/PM8916 que no arranca sin batería. Usa el mismo lk2nd que [otro dispositivo] que sí funciona sin batería. Te adjunto:** -> - **DTS de ambos dispositivos** (el que funciona y el que no) -> - **dmesg completo** del que no funciona (si arranca con batería) -> - **Esquemático** si lo tengo -> -> **¿Cómo configuro el device tree para simular BAT_ID por software?**" - -Y con eso, busco las diferencias en VADC, GPIOs y configuración del BMS para darte el patch exacto.[4][5][3][1][2] - -[1](https://www.kernel.org/doc/Documentation/devicetree/bindings/power/supply/qcom,pm8916-bms-vm.yaml) -[2](https://www.kernel.org/doc/Documentation/devicetree/bindings/pinctrl/qcom,pmic-gpio.txt) -[3](https://docs.qualcomm.com/bundle/publicresource/topics/80-88500-4/20_GPIO_registers_configuration.html) -[4](https://ppl-ai-file-upload.s3.amazonaws.com/web/direct-files/attachments/71119587/2cbba375-133e-46d7-b84a-35a4b519f137/802-arm64-dts-qcom-add-msm8916-generic-mf68e.patch) -[5](https://ppl-ai-file-upload.s3.amazonaws.com/web/direct-files/attachments/71119587/bb25f50b-d1d3-4c22-921c-7e22b9b185a8/805-arm64-dts-qcom-add-msm8916-generic-m9s.patch) -[6](https://docs.qualcomm.com/bundle/publicresource/topics/80-88500-1/7_Pin_control_driver.html) -[7](https://www.kernel.org/doc/Documentation/devicetree/bindings/mfd/qcom,spmi-pmic.yaml) -[8](https://sbexr.rabexc.org/latest/sources/6d/8af0298da51217.html) -[9](https://gitlab.com/cunidev/linux-msm8996/-/blob/v3.5-rc5/Documentation/gpio.txt) -[10](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-4/pmic-developer-touchpoints.html) -[11](https://hafnium.googlesource.com/hafnium/third_party/linux/+/refs/heads/master/Documentation/devicetree/bindings/pinctrl/qcom,pmic-gpio.txt) -[12](https://docs.qualcomm.com/bundle/publicresource/topics/80-88500-4/19_Hardware_overview.html) -[13](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-8/pcie.html) \ No newline at end of file diff --git a/packages/configs-dongle/Makefile b/packages/configs-dongle/Makefile deleted file mode 100644 index 96512b1..0000000 --- a/packages/configs-dongle/Makefile +++ /dev/null @@ -1,57 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=configs-dongle -PKG_VERSION:=1.0 - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME) - SECTION:=Utilities - CATEGORY:=Utilities - TITLE:=Default Settings For Dongles - DEPENDS:=+PACKAGE_luci:luci-proto-modemmanager +ledcontrol +kmod-button-hotplug +inotifywait -endef - -# Optional description -define Package/$(PKG_NAME)/description -Tweaks and defaults for Dongles, including cleanup of problematic APK feeds. -endef - -define Build/Configure -endef - -define Build/Compile -endef - -# Install configuration files and payload you already had -define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/etc/uci-defaults - $(INSTALL_BIN) ./files/uci_defaults $(1)/etc/uci-defaults/99-default-config - - $(INSTALL_DIR) $(1)/root/ - $(INSTALL_BIN) ./files/luci-app-tailscale*.apk $(1)/root/ - - $(INSTALL_DIR) $(1)/etc/hotplug.d/ieee80211 - $(INSTALL_DATA) ./files/hotplugs/99-wifi-led $(1)/etc/hotplug.d/ieee80211/ - - $(INSTALL_DIR) $(1)/etc/hotplug.d/iface - $(INSTALL_DATA) ./files/hotplugs/99-modem-led $(1)/etc/hotplug.d/iface/ -endef - -define Package/$(PKG_NAME)/postinst -#!/bin/sh -set -e -FILE="/etc/apk/repositories.d/distfeeds.list" -ROOT="$${IPKG_INSTROOT:-/}" -TARGET_FILE="$$ROOT$$FILE" - -if [ -f "$$TARGET_FILE" ]; then - sed -i '\|/targets/msm89xx/msm8916/packages|d' "$$TARGET_FILE" || true -fi - -exit 0 -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/packages/configs-dongle/files/hotplugs/99-modem-led b/packages/configs-dongle/files/hotplugs/99-modem-led deleted file mode 100644 index d172917..0000000 --- a/packages/configs-dongle/files/hotplugs/99-modem-led +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -# /etc/hotplug.d/iface/99-modem-led -# Modem LED control based on interface status - -case "$ACTION:$INTERFACE" in - ifup:modem) - ledcontrol green:wan on - logger -t modem-led "Modem UP - Green LED ON" - ;; - ifdown:modem) - ledcontrol green:wan off - logger -t modem-led "Modem DOWN - Green LED OFF" - ;; -esac diff --git a/packages/configs-dongle/files/hotplugs/99-wifi-led b/packages/configs-dongle/files/hotplugs/99-wifi-led deleted file mode 100644 index e31d8cc..0000000 --- a/packages/configs-dongle/files/hotplugs/99-wifi-led +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -# /etc/hotplug.d/ieee80211/99-wifi-led -# WiFi LED control based on phy0 status - -case "$ACTION" in - add) - if [ "$DEVICENAME" = "phy0" ]; then - sleep 5 - - # Check interface status - ap_status=$(ip link show phy0-ap0 2>/dev/null | grep -c "state UP") - sta_status=$(ip link show phy0-sta0 2>/dev/null | grep -c "state UP") - - if [ "$ap_status" -gt 0 ] || [ "$sta_status" -gt 0 ]; then - ledcontrol blue:wlan on - logger -t wifi-led "phy0 interface UP, blue LED ON" - else - ledcontrol blue:wlan off - logger -t wifi-led "No phy0 interface UP, blue LED OFF" - fi - fi - ;; - remove) - if [ "$DEVICENAME" = "phy0" ]; then - ledcontrol blue:wlan off - logger -t wifi-led "phy0 removed, blue LED OFF" - fi - ;; -esac diff --git a/packages/configs-mifi/files/luci-app-tailscale-1.2.6-r1.apk b/packages/configs-mifi/files/luci-app-tailscale-1.2.6-r1.apk deleted file mode 100644 index 726f159b4d9b2d5d3708c8f4bbd1d5b18e22995f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9085 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 diff --git a/packages/ledcontrol/Makefile b/packages/ledcontrol/Makefile deleted file mode 100644 index 77a5a27..0000000 --- a/packages/ledcontrol/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=ledcontrol -PKG_VERSION:=1.0 -PKG_RELEASE:=1 -PKG_LICENSE:=GPL-2.0 - -include $(INCLUDE_DIR)/package.mk - -define Package/ledcontrol - SECTION:=utils - CATEGORY:=Utilities - TITLE:=Simple LED control utility - DEPENDS:= -endef - -define Package/ledcontrol/description - Simple utility to control device LEDs via sysfs - Usage: ledcontrol - Includes hotplug scripts for WiFi and modem LED management -endef - -define Build/Compile -endef - -define Package/ledcontrol/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) ./ledcontrol.sh $(1)/usr/bin/ledcontrol -endef - -$(eval $(call BuildPackage,ledcontrol)) diff --git a/packages/ledcontrol/ledcontrol.sh b/packages/ledcontrol/ledcontrol.sh deleted file mode 100644 index 43c81f3..0000000 --- a/packages/ledcontrol/ledcontrol.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh -# LED Control Utility for OpenWrt -# Usage: ledcontrol -# Examples: -# ledcontrol green:wan on -# ledcontrol blue:wlan blink -# ledcontrol red:charging off - -set -e - -# Parse arguments -if [ $# -ne 2 ]; then - echo "Usage: ledcontrol " >&2 - echo "" >&2 - echo "Examples:" >&2 - echo " ledcontrol green:wan on" >&2 - echo " ledcontrol blue:wlan blink" >&2 - echo " ledcontrol red:charging off" >&2 - echo "" >&2 - echo "Available LEDs:" >&2 - ls -1 /sys/class/leds 2>/dev/null | grep -v "^mmc" | sed 's/^/ /' >&2 - exit 1 -fi - -LED_NAME="$1" -ACTION="$2" -LED_PATH="/sys/class/leds/$LED_NAME" - -# Check if LED exists -if [ ! -d "$LED_PATH" ]; then - echo "[!] LED '$LED_NAME' not found" >&2 - echo "[*] Available LEDs:" >&2 - ls -1 /sys/class/leds 2>/dev/null | grep -v "^mmc" | sed 's/^/ /' >&2 - exit 1 -fi - -# Set LED state -case "$ACTION" in - on) - echo none > "$LED_PATH/trigger" 2>/dev/null || true - echo 1 > "$LED_PATH/brightness" - ;; - off) - echo none > "$LED_PATH/trigger" 2>/dev/null || true - echo 0 > "$LED_PATH/brightness" - ;; - blink) - echo timer > "$LED_PATH/trigger" 2>/dev/null || { - echo "[!] Blink not supported, setting ON" >&2 - echo 1 > "$LED_PATH/brightness" - exit 0 - } - echo 500 > "$LED_PATH/delay_on" 2>/dev/null || true - echo 500 > "$LED_PATH/delay_off" 2>/dev/null || true - ;; - blink_fast) - echo timer > "$LED_PATH/trigger" 2>/dev/null || { - echo "[!] Blink not supported, setting ON" >&2 - echo 1 > "$LED_PATH/brightness" - exit 0 - } - echo 100 > "$LED_PATH/delay_on" 2>/dev/null || true - echo 100 > "$LED_PATH/delay_off" 2>/dev/null || true - ;; - *) - echo "[!] Invalid action: $ACTION" >&2 - echo "[*] Valid actions: on, off, blink, blink_fast" >&2 - exit 1 - ;; -esac - -logger -t ledcontrol "LED '$LED_NAME' set to '$ACTION'" - -# Only print to stdout if running interactively (not from a script/service) -[ -t 1 ] && echo "[+] LED '$LED_NAME' set to '$ACTION'" diff --git a/packages/msm-firmware-dumper/Makefile b/packages/msm-firmware-dumper/Makefile index b678eb3..fb7098b 100644 --- a/packages/msm-firmware-dumper/Makefile +++ b/packages/msm-firmware-dumper/Makefile @@ -1,29 +1,37 @@ +# SPDX-License-Identifier: BSD-3-Clause + include $(TOPDIR)/rules.mk PKG_NAME:=msm-firmware-dumper PKG_VERSION:=1.1 PKG_RELEASE:=1 + PKG_LICENSE:=BSD-3-Clause +PKG_MAINTAINER:=Miguel Fuertes include $(INCLUDE_DIR)/package.mk -define Package/$(PKG_NAME) - SECTION:=utils - CATEGORY:=Utilities - TITLE:=One-shot dump of Qualcomm firmware partitions into /lib/firmware - DEPENDS:=+kmod-fs-vfat +kmod-fs-ext4 +kmod-nls-cp437 +kmod-nls-iso8859-1 -endef - -define Build/Configure +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) endef define Build/Compile endef +define Package/$(PKG_NAME) + SECTION:=utils + CATEGORY:=Utilities + TITLE:=Qualcomm firmware partition dump utility + DEPENDS:=+kmod-fs-vfat +kmod-fs-ext4 +kmod-nls-cp437 +kmod-nls-iso8859-1 +endef + +define Package/$(PKG_NAME)/description + Dumps Qualcomm firmware partitions into /lib/firmware on first boot. +endef + define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) ./files/msm-firmware-dumper.sh $(1)/usr/bin/msm-firmware-dumper - $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/msm-firmware-dumper.init $(1)/etc/init.d/msm-firmware-dumper endef diff --git a/packages/prepare-rootfs-data/Makefile b/packages/prepare-rootfs-data/Makefile deleted file mode 100644 index cf2e641..0000000 --- a/packages/prepare-rootfs-data/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# package/system/prepare-rootfs-data/Makefile - -include $(TOPDIR)/rules.mk - -PKG_NAME:=prepare-rootfs-data -PKG_RELEASE:=1 -PKG_LICENSE:=GPL-2.0 - -include $(INCLUDE_DIR)/package.mk - -define Package/prepare-rootfs-data - SECTION:=base - CATEGORY:=Base system - TITLE:=Automatically format rootfs_data on first boot - DEPENDS:=@TARGET_ROOTFS_SQUASHFS +e2fsprogs +blkid - PKGARCH:=all -endef - -define Package/prepare-rootfs-data/description - Preinit script that automatically formats the rootfs_data partition - with ext4 filesystem if it is empty or unformatted, enabling overlay - filesystem to work without manual intervention. -endef - -define Build/Compile -endef - -define Package/prepare-rootfs-data/install - $(INSTALL_DIR) $(1)/lib/preinit - $(INSTALL_BIN) ./files/79-format-rootfs-data $(1)/lib/preinit/79-format-rootfs-data -endef - -$(eval $(call BuildPackage,prepare-rootfs-data)) diff --git a/packages/qrtr/Makefile b/packages/qrtr/Makefile index ebff098..01bc099 100644 --- a/packages/qrtr/Makefile +++ b/packages/qrtr/Makefile @@ -1,4 +1,3 @@ -# Copyright (C) 2025 # SPDX-License-Identifier: BSD-3-Clause include $(TOPDIR)/rules.mk @@ -8,12 +7,13 @@ PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/linux-msm/qrtr.git -# Commit que estás usando PKG_SOURCE_VERSION:=5923eea97377f4a3ed9121b358fd919e3659db7b PKG_LICENSE:=BSD-3-Clause PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Miguel Fuertes +PKG_BUILD_PARALLEL:=1 PKG_INSTALL:=1 include $(INCLUDE_DIR)/package.mk @@ -25,41 +25,35 @@ MESON_ARGS += \ -Dsystemd-service=disabled define Package/libqrtr - SECTION:=libs - CATEGORY:=Libraries - TITLE:=Userspace library for Linux kernel QRTR + SECTION:=libs + CATEGORY:=Libraries + TITLE:=Qualcomm IPC Router userspace library endef define Package/qrtr-utils - SECTION:=utils - CATEGORY:=Utilities - DEPENDS:=+libqrtr - TITLE:=QRTR tools and daemon (qrtr-ns, lookup, etc.) + SECTION:=utils + CATEGORY:=Utilities + DEPENDS:=+libqrtr + TITLE:=Qualcomm IPC Router tools and nameservice daemon endef define Build/InstallDev $(INSTALL_DIR) $(1)/usr/include - $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/ || true - + $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/ $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libqrtr*.so* $(1)/usr/lib/ || true + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libqrtr*.so* $(1)/usr/lib/ endef define Package/libqrtr/install $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libqrtr*.so* $(1)/usr/lib/ || true + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libqrtr*.so* $(1)/usr/lib/ endef define Package/qrtr-utils/install - # Binarios en /usr/bin $(INSTALL_DIR) $(1)/usr/bin - -$(CP) $(PKG_INSTALL_DIR)/usr/bin/qrtr* $(1)/usr/bin/ 2>/dev/null || true - - # Daemon en /usr/sbin + -$(CP) $(PKG_INSTALL_DIR)/usr/bin/qrtr* $(1)/usr/bin/ $(INSTALL_DIR) $(1)/usr/sbin - -$(CP) $(PKG_INSTALL_DIR)/usr/sbin/qrtr-ns $(1)/usr/sbin/ 2>/dev/null || true - - # Init script (opcional): coloca files/qrtrns.init para procd + -$(CP) $(PKG_INSTALL_DIR)/usr/sbin/qrtr-ns $(1)/usr/sbin/ $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/qrtrns.init $(1)/etc/init.d/qrtrns endef diff --git a/packages/rmtfs/Makefile b/packages/rmtfs/Makefile index 884909c..5f95ecb 100644 --- a/packages/rmtfs/Makefile +++ b/packages/rmtfs/Makefile @@ -1,9 +1,4 @@ -# -# Copyright (C) 2020-2021 HandsomeMod Project -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# +# SPDX-License-Identifier: BSD-3-Clause include $(TOPDIR)/rules.mk @@ -11,20 +6,23 @@ PKG_NAME:=rmtfs PKG_VERSION:=1.0 PKG_RELEASE:=1 -PKG_BUILD_DIR:=$(BUILD_DIR)/rmtfs-$(PKG_VERSION) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/linux-msm/rmtfs PKG_SOURCE_VERSION:=586372e575f5cc1a7cbb170219ab6df98f394cae PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Miguel Fuertes + +PKG_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/package.mk define Package/rmtfs - SECTION:=utils - CATEGORY:=Utilities - TITLE:=Qualcomm Remote Filesystem Service Implementation - DEPENDS:=+libudev-zero +libqrtr +qrtr-utils + SECTION:=utils + CATEGORY:=Utilities + TITLE:=Qualcomm Remote Filesystem service daemon + DEPENDS:=+libudev-zero +libqrtr +qrtr-utils endef define Build/Compile @@ -32,11 +30,10 @@ define Build/Compile endef define Package/rmtfs/install - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/rmtfs.init $(1)/etc/init.d/rmtfs - $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/rmtfs $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/rmtfs.init $(1)/etc/init.d/rmtfs endef $(eval $(call BuildPackage,rmtfs)) diff --git a/packages/uci-usb-gadget/Makefile b/packages/uci-usb-gadget/Makefile index 3bb7844..24923e7 100644 --- a/packages/uci-usb-gadget/Makefile +++ b/packages/uci-usb-gadget/Makefile @@ -1,65 +1,57 @@ +# SPDX-License-Identifier: GPL-2.0-only + include $(TOPDIR)/rules.mk PKG_NAME:=uci-usb-gadget PKG_VERSION:=1.0.0 PKG_RELEASE:=1 -PKG_MAINTAINER:=Miguel Fuertes PKG_LICENSE:=GPL-2.0-only +PKG_MAINTAINER:=Miguel Fuertes include $(INCLUDE_DIR)/package.mk -define Package/$(PKG_NAME) - SECTION:=utils - CATEGORY:=Utilities - TITLE:=UCI-based USB Gadget Manager for OpenWrt - DEPENDS:=@USB_GADGET_SUPPORT +kmod-fs-configfs +kmod-usb-gadget +kmod-usb-lib-composite +kmod-usb-gadget-serial +kmod-usb-gadget-mass-storage +kmod-usb-gadget-ncm +coreutils-truncate +coreutils-shuf +coreutils-dd - PKGARCH:=all -endef - -define Package/$(PKG_NAME)/description - UCI-based USB Gadget Manager for OpenWrt using the kernel configfs interface. - - Provides easy configuration and management of USB gadget functions through UCI, - making OpenWrt devices appear as various USB peripherals when connected to a host. - - Supported functions: - - RNDIS: Windows-compatible USB ethernet (plug-and-play) - - ECM: CDC Ethernet for macOS and Linux - - NCM: Modern high-performance USB ethernet - - ACM: Serial console (with optional login shell) - - Mass Storage: Expose storage image as USB drive - - Features: - - Hardware-agnostic: auto-detects UDC controller (works on Raspberry Pi, MSM8916, - Orange Pi, and any device with USB gadget support) - - Network integration: automatically adds USB ethernet interfaces to LAN bridge - - Configurable via UCI: /etc/config/usbgadget - - Persistent serial numbers based on machine-id - - Deterministic MAC address generation - - Perfect for creating USB-based network access, serial consoles, or mass storage - devices from OpenWrt routers and embedded devices. -endef - - -define Package/$(PKG_NAME)/conffiles -/etc/config/usbgadget +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) endef define Build/Compile endef +define Package/$(PKG_NAME) + SECTION:=utils + CATEGORY:=Utilities + TITLE:=UCI-based USB gadget manager + DEPENDS:=@USB_GADGET_SUPPORT \ + +kmod-fs-configfs \ + +kmod-usb-gadget \ + +kmod-usb-lib-composite \ + +kmod-usb-gadget-serial \ + +kmod-usb-gadget-mass-storage \ + +kmod-usb-gadget-ncm \ + +coreutils-truncate \ + +coreutils-shuf \ + +coreutils-dd + PKGARCH:=all +endef + +define Package/$(PKG_NAME)/description + UCI-based USB gadget manager using the kernel configfs interface. + + Configures OpenWrt devices as USB peripherals (RNDIS, ECM, NCM, ACM, + Mass Storage) when connected to a host. Hardware-agnostic: auto-detects + the UDC controller and integrates USB ethernet interfaces into the LAN bridge. +endef + +define Package/$(PKG_NAME)/conffiles +/etc/config/usbgadget +endef + define Package/$(PKG_NAME)/install - # Install main script $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) ./files/usb-gadget.sh $(1)/usr/sbin/usb-gadget - - # Install init script $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/usb-gadget.init $(1)/etc/init.d/usb-gadget - - # Install UCI config $(INSTALL_DIR) $(1)/etc/config $(INSTALL_CONF) ./files/usbgadget.config $(1)/etc/config/usbgadget endef @@ -67,10 +59,7 @@ endef define Package/$(PKG_NAME)/postinst #!/bin/sh [ -n "$${IPKG_INSTROOT}" ] || { - # Enable service on first install /etc/init.d/usb-gadget enable - echo "USB Gadget service installed. Configure in /etc/config/usbgadget" - echo "Start with: /etc/init.d/usb-gadget start" } exit 0 endef @@ -78,7 +67,6 @@ endef define Package/$(PKG_NAME)/prerm #!/bin/sh [ -n "$${IPKG_INSTROOT}" ] || { - # Stop and disable service before removal /etc/init.d/usb-gadget stop /etc/init.d/usb-gadget disable }