From 968de93c60ecdb0843349d3f306e12385409b23c Mon Sep 17 00:00:00 2001 From: Miguel Fuertes Date: Fri, 3 Oct 2025 11:27:07 +0200 Subject: [PATCH] cherrypicked --- .github/workflows/builder.yml | 37 +-- base_partitions/.gitignore | 2 + devenv/dependencies.sh | 2 + diffconfig | 31 +-- msm89xx/image/flash.sh | 215 ++++++++++++++++++ msm89xx/image/generate_gpt.sh | 50 ++++ msm89xx/image/msm8916.mk | 41 +++- msm89xx/image/tables/gpt-ext4.table | 18 ++ packages/msm-firmware-dumper/Makefile | 8 +- .../files/msm-firmware-dumper.init | 2 +- .../files/msm-firmware-dumper.sh | 7 +- .../files/msm8916-usb-gadget.conf | 13 +- .../files/msm8916-usb-gadget.sh | 65 +++++- packages/uz801-tweaks/Makefile | 2 +- packages/uz801-tweaks/files/uci_defaults | 4 +- readme.md | 13 +- 16 files changed, 425 insertions(+), 85 deletions(-) create mode 100644 base_partitions/.gitignore create mode 100644 msm89xx/image/flash.sh create mode 100755 msm89xx/image/generate_gpt.sh create mode 100644 msm89xx/image/tables/gpt-ext4.table diff --git a/.github/workflows/builder.yml b/.github/workflows/builder.yml index d55523e..543b7b7 100644 --- a/.github/workflows/builder.yml +++ b/.github/workflows/builder.yml @@ -2,23 +2,6 @@ name: OpenWrt Builder on: repository_dispatch: workflow_dispatch: - inputs: - openwrt_version: - description: 'OpenWrt version to build' - required: true - default: 'main' - type: choice - options: - - 'main' - - 'openwrt-24.10' - diffconfig: - description: 'Configuration to use' - required: true - default: 'diffconfig' - type: choice - options: - - 'diffconfig' - - 'diffconfig_tailscale' env: UPLOAD_BIN_DIR: true @@ -46,11 +29,10 @@ jobs: sudo -E apt-get -qq clean sudo timedatectl set-timezone "$TZ" - - name: "Clone source code - Branch: ${{ inputs.openwrt_version }}" + - name: "Clone OpenWrt source code" run: | df -hT $PWD - echo "Cloning OpenWrt version: ${{ inputs.openwrt_version }}" - git clone --depth=1 --branch "${{ inputs.openwrt_version }}" https://git.openwrt.org/openwrt/openwrt.git openwrt + git clone --depth=1 --branch "main" https://git.openwrt.org/openwrt/openwrt.git openwrt - name: Load msm89xx target and uz801 packages run: | @@ -68,9 +50,9 @@ jobs: ./scripts/feeds update -a ./scripts/feeds install -a - - name: "Load config - Using: ${{inputs.diffconfig}}" + - name: "Load diffconfig" run: | - [ -f ${{inputs.diffconfig}} ] && mv ${{inputs.diffconfig}} openwrt/.config + [ -f diffconfig ] && mv diffconfig openwrt/.config - name: Download package id: package @@ -100,7 +82,6 @@ jobs: rm -rf packages echo "FIRMWARE=$PWD" >> $GITHUB_ENV echo "status=success" >> $GITHUB_OUTPUT - echo "imagebuilder=$(ls -l *imagebuilder* | wc -l)" >> $GITHUB_OUTPUT - name: Upload firmware uses: actions/upload-artifact@v4 @@ -108,14 +89,8 @@ jobs: with: name: openwrt_firmware_${{ env.DEVICE_NAME }}_${{ env.FILE_DATE }} path: | + ${{ env.FIRMWARE }}/openwrt-msm89xx-msm8916-yiming-uz801v3-gpt_both0.bin + ${{ env.FIRMWARE }}/openwrt-msm89xx-msm8916-yiming-uz801v3-rootfs_data.img ${{ env.FIRMWARE }}/openwrt-msm89xx-msm8916-yiming-uz801v3-ext4-boot.img ${{ env.FIRMWARE }}/openwrt-msm89xx-msm8916-yiming-uz801v3-ext4-system.img ${{ env.FIRMWARE }}/openwrt-msm89xx-msm8916-yiming-uz801v3.manifest - - - name: Upload image builder - uses: actions/upload-artifact@v4 - if: steps.organize.outputs.imagebuilder != '0' && !cancelled() - with: - name: openwrt_imagebuilder_${{ env.DEVICE_NAME }}_${{ env.FILE_DATE }} - path: | - ${{ env.FIRMWARE }}/openwrt-imagebuilder-msm89xx-msm8916.Linux-x86_64.tar.zst diff --git a/base_partitions/.gitignore b/base_partitions/.gitignore new file mode 100644 index 0000000..1c5dc8c --- /dev/null +++ b/base_partitions/.gitignore @@ -0,0 +1,2 @@ +rootfs_data.* +gpt_both0.* \ No newline at end of file diff --git a/devenv/dependencies.sh b/devenv/dependencies.sh index c1818b4..a4e44b1 100755 --- a/devenv/dependencies.sh +++ b/devenv/dependencies.sh @@ -40,4 +40,6 @@ apt-get update && apt-get install -y --no-install-recommends \ mkbootimg \ zstd \ e2fsprogs \ + fdisk \ + nano \ && rm -rf /var/lib/apt/lists/* diff --git a/diffconfig b/diffconfig index d232c1c..2cd539f 100644 --- a/diffconfig +++ b/diffconfig @@ -1,7 +1,6 @@ CONFIG_TARGET_msm89xx=y CONFIG_TARGET_msm89xx_msm8916=y CONFIG_TARGET_msm89xx_msm8916_DEVICE_yiming-uz801v3=y -CONFIG_IMAGEOPT=y CONFIG_LIBQMI_COLLECTION_BASIC=y CONFIG_LIBQMI_WITH_MBIM_QMUX=y CONFIG_LIBQMI_WITH_QRTR_GLIB=y @@ -9,8 +8,6 @@ CONFIG_MODEMMANAGER_WITH_MBIM=y CONFIG_MODEMMANAGER_WITH_NETIFD=y CONFIG_MODEMMANAGER_WITH_QMI=y CONFIG_MODEMMANAGER_WITH_QRTR=y -CONFIG_PACKAGE_bash=y -CONFIG_PACKAGE_blkid=y CONFIG_PACKAGE_cgi-io=y CONFIG_PACKAGE_coreutils=y CONFIG_PACKAGE_coreutils-dd=y @@ -18,22 +15,12 @@ CONFIG_PACKAGE_coreutils-shuf=y CONFIG_PACKAGE_coreutils-truncate=y CONFIG_PACKAGE_dbus=y CONFIG_PACKAGE_glib2=y -CONFIG_PACKAGE_gre=y CONFIG_PACKAGE_ip-tiny=y +CONFIG_PACKAGE_kmod-crypto-kpp=y CONFIG_PACKAGE_kmod-crypto-lib-chacha20=y CONFIG_PACKAGE_kmod-crypto-lib-chacha20poly1305=y CONFIG_PACKAGE_kmod-crypto-lib-curve25519=y CONFIG_PACKAGE_kmod-crypto-lib-poly1305=y -CONFIG_PACKAGE_kmod-gre=y -CONFIG_PACKAGE_kmod-gre6=y -CONFIG_PACKAGE_kmod-ip6-tunnel=y -CONFIG_PACKAGE_kmod-iptunnel=y -CONFIG_PACKAGE_kmod-iptunnel6=y -CONFIG_PACKAGE_kmod-leds-gpio=y -CONFIG_PACKAGE_kmod-ledtrig-activity=y -CONFIG_PACKAGE_kmod-ledtrig-gpio=y -CONFIG_PACKAGE_kmod-qrtr=y -CONFIG_PACKAGE_kmod-qrtr-tun=y CONFIG_PACKAGE_kmod-tun=y CONFIG_PACKAGE_kmod-udptunnel4=y CONFIG_PACKAGE_kmod-udptunnel6=y @@ -44,6 +31,7 @@ CONFIG_PACKAGE_kmod-wireguard=y CONFIG_PACKAGE_libattr=y CONFIG_PACKAGE_libdbus=y CONFIG_PACKAGE_libexpat=y +CONFIG_PACKAGE_libfdisk=y CONFIG_PACKAGE_libffi=y CONFIG_PACKAGE_libiwinfo=y CONFIG_PACKAGE_libiwinfo-data=y @@ -54,18 +42,16 @@ CONFIG_PACKAGE_libncurses=y CONFIG_PACKAGE_libpcre2=y CONFIG_PACKAGE_libqmi=y CONFIG_PACKAGE_libqrtr-glib=y -CONFIG_PACKAGE_libreadline=y +CONFIG_PACKAGE_lsblk=y CONFIG_PACKAGE_luci=y CONFIG_PACKAGE_luci-app-firewall=y CONFIG_PACKAGE_luci-app-package-manager=y CONFIG_PACKAGE_luci-base=y -CONFIG_PACKAGE_luci-lib-uqr=y CONFIG_PACKAGE_luci-light=y CONFIG_PACKAGE_luci-mod-admin-full=y CONFIG_PACKAGE_luci-mod-network=y CONFIG_PACKAGE_luci-mod-status=y CONFIG_PACKAGE_luci-mod-system=y -CONFIG_PACKAGE_luci-proto-gre=y CONFIG_PACKAGE_luci-proto-ipv6=y CONFIG_PACKAGE_luci-proto-modemmanager=y CONFIG_PACKAGE_luci-proto-ppp=y @@ -73,8 +59,8 @@ CONFIG_PACKAGE_luci-proto-wireguard=y CONFIG_PACKAGE_luci-theme-bootstrap=y CONFIG_PACKAGE_modemmanager=y CONFIG_PACKAGE_msm8916-usb-gadget=y +CONFIG_PACKAGE_mtools=y CONFIG_PACKAGE_nano=y -CONFIG_PACKAGE_qmi-utils=y CONFIG_PACKAGE_resolveip=y CONFIG_PACKAGE_rpcd=y CONFIG_PACKAGE_rpcd-mod-file=y @@ -82,6 +68,7 @@ CONFIG_PACKAGE_rpcd-mod-iwinfo=y CONFIG_PACKAGE_rpcd-mod-luci=y CONFIG_PACKAGE_rpcd-mod-rrdns=y CONFIG_PACKAGE_rpcd-mod-ucode=y +CONFIG_PACKAGE_sfdisk=y CONFIG_PACKAGE_terminfo=y CONFIG_PACKAGE_ucode-mod-html=y CONFIG_PACKAGE_ucode-mod-log=y @@ -89,7 +76,7 @@ CONFIG_PACKAGE_ucode-mod-math=y CONFIG_PACKAGE_uhttpd=y CONFIG_PACKAGE_uhttpd-mod-ubus=y CONFIG_PACKAGE_wireguard-tools=y -# CONFIG_PER_FEED_REPO is not set -# CONFIG_TARGET_IMAGES_GZIP is not set -# CONFIG_TARGET_ROOTFS_SQUASHFS is not set -# CONFIG_PACKAGE_kmod-crypto-kpp is not set +# Squashfs support +CONFIG_TARGET_ROOTFS_SQUASHFS=y +CONFIG_TARGET_ROOTFS_PARTSIZE=128 +# NO desactivar ext4 por si acaso diff --git a/msm89xx/image/flash.sh b/msm89xx/image/flash.sh new file mode 100644 index 0000000..b4fd110 --- /dev/null +++ b/msm89xx/image/flash.sh @@ -0,0 +1,215 @@ +#!/usr/bin/env bash +# Prerequisites: EDL mode. +# Usage: Execute from bin/targets/XXX/YYY/ directory + +# Function to check if image is sparse +is_sparse() { + local file="$1" + [ -f "$file" ] || return 1 + [ "$(hexdump -n 4 -e '4/1 "%02x"' "$file" 2>/dev/null)" = "3aff26ed" ] +} + +# Function to find file by pattern in directory +find_image() { + local dir="$1" + local pattern="$2" + local file + + file=$(find "$dir" -maxdepth 1 -type f -name "$pattern" 2>/dev/null | head -n 1) + + if [[ -z "$file" ]]; then + echo "Error: No se encontró imagen con patrón: $pattern" >&2 + return 1 + fi + + echo "$file" +} + +# Ask filesystem type +echo "=== Filesystem Selection ===" +echo "1) SquashFS (requires rootfs_data)" +echo "2) EXT4 (full writable, no rootfs_data)" +read -p "Select filesystem type (1/2): " fs_choice + +case "$fs_choice" in + 1) + FS_TYPE="squashfs" + NEEDS_ROOTFS_DATA=false + GPT_PATTERN="*-squashfs_gpt_both0.bin" + BOOT_PATTERN="*-squashfs-boot.img" + SYSTEM_PATTERN="*-squashfs-system.img" + ROOTFS_DATA_PATTERN="*-squashfs_rootfs_data.img" + ;; + 2) + FS_TYPE="ext4" + NEEDS_ROOTFS_DATA=false + GPT_PATTERN="*-ext4_gpt_both0.bin" + BOOT_PATTERN="*-ext4-boot.img" + SYSTEM_PATTERN="*-ext4-system.img" + ;; + *) + echo "Error: Invalid choice" + exit 1 + ;; +esac + +echo "Selected: $FS_TYPE" +echo + +# OpenWrt images are in current directory +openwrt_dir="." +echo "=== OpenWrt Images Directory ===" +echo "Usando directorio actual: $(pwd)" +echo + +# Find required OpenWrt images +echo "Detectando imágenes OpenWrt en directorio actual..." +gpt_path=$(find_image "$openwrt_dir" "$GPT_PATTERN") || exit 1 +boot_path=$(find_image "$openwrt_dir" "$BOOT_PATTERN") || exit 1 +system_path=$(find_image "$openwrt_dir" "$SYSTEM_PATTERN") || exit 1 + +echo "✓ GPT: $(basename "$gpt_path")" +echo "✓ Boot: $(basename "$boot_path")" +echo "✓ Rootfs: $(basename "$system_path")" + +if [ "$NEEDS_ROOTFS_DATA" = true ]; then + rootfs_data_path=$(find_image "$openwrt_dir" "$ROOTFS_DATA_PATTERN") || exit 1 + echo "✓ rootfs_data: $(basename "$rootfs_data_path")" +fi + +# Ask for firmware directory (where .mbn files are) +echo +echo "=== Firmware Qualcomm Directory ===" +read -e -r -p "Arrastra la carpeta con los archivos .mbn (aboot, hyp, rpm, sbl1, tz): " firmware_dir + +# Clean quotes and spaces +firmware_dir="${firmware_dir//\"/}" +firmware_dir="${firmware_dir//\'/}" +firmware_dir="${firmware_dir// /}" + +# Validate directory exists +if [[ -z "$firmware_dir" ]]; then + echo "Error: Debes especificar el directorio con los archivos .mbn" + exit 1 +fi + +if [[ ! -d "$firmware_dir" ]]; then + echo "Error: Directorio no encontrado: $firmware_dir" + exit 1 +fi + +echo "Buscando firmware en: $firmware_dir" +echo + +# Check for firmware partitions (.mbn files) +echo "Verificando particiones de firmware Qualcomm..." +missing_mbn=false +for part in aboot hyp rpm sbl1 tz; do + if [[ ! -f "$firmware_dir/${part}.mbn" ]]; then + echo "✗ ${part}.mbn no encontrado" + missing_mbn=true + else + echo "✓ ${part}.mbn" + fi +done + +if [ "$missing_mbn" = true ]; then + echo + echo "ERROR: Faltan archivos .mbn necesarios para el flasheo." + echo "Estos archivos deben extraerse del firmware Android original." + echo "Colócalos en: $firmware_dir" + exit 1 +fi + +echo +read -p "¿Continuar con el flasheo? (y/N): " confirm +if [[ ! "$confirm" =~ ^[Yy]$ ]]; then + echo "Cancelado" + exit 0 +fi + +mkdir -p saved + +# Backup important partitions +echo +echo "=== Backup de particiones ===" +for n in fsc fsg modemst1 modemst2 modem persist sec; do + echo "Backing up partition $n ..." + edl r "$n" "saved/$n.bin" || { echo "Error backing up $n"; exit 1; } +done + +# Install aboot +echo +echo "=== Flasheo de particiones ===" +echo "Flashing aboot via EDL..." +edl w aboot "$firmware_dir/aboot.mbn" || { echo "Error flashing aboot"; exit 1; } + +# Reboot to fastboot +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 mode +echo "Esperando modo fastboot (5 segundos)..." +sleep 5 + +# Flash firmware +echo +echo "Flashing partitions via fastboot..." +fastboot flash partition "$gpt_path" || { echo "Error flashing partition"; exit 1; } + +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; } + +fastboot flash boot "$boot_path" || { echo "Error flashing boot"; exit 1; } +fastboot flash rootfs "$system_path" || { echo "Error flashing rootfs"; exit 1; } + +# Erase rootfs_data only for squashfs (partition doesn't exist in ext4 GPT) +if [ "$NEEDS_ROOTFS_DATA" = true ]; then + echo "Erasing rootfs_data partition..." + fastboot erase rootfs_data || { echo "Error erasing rootfs_data"; exit 1; } +fi + +echo "Rebooting to EDL mode..." +fastboot oem reboot-edl || { echo "Error rebooting to EDL"; exit 1; } + +# Wait for EDL mode +echo "Esperando modo EDL (3 segundos)..." +sleep 3 + +# Restore original partitions +echo +echo "=== Restauración de particiones ===" +for n in fsc fsg modemst1 modemst2 modem persist sec; do + echo "Restoring partition $n ..." + edl w "$n" "saved/$n.bin" || { echo "Error restoring $n"; exit 1; } +done + +# Flash rootfs_data via EDL (REQUIRED for squashfs) +if [ "$NEEDS_ROOTFS_DATA" = true ]; then + echo + echo "=== Flasheo de rootfs_data via EDL ===" + + echo "Detected sparse image, converting..." + unsparsed="$(mktemp --suffix=.raw.img)" + simg2img "$rootfs_data_path" "$unsparsed" || { echo "simg2img failed"; exit 1; } + + edl w rootfs_data "$unsparsed" || { echo "Error flashing rootfs_data via EDL"; exit 1; } + + # Cleanup temp file if created + if [[ "$unsparsed" != "$rootfs_data_path" ]]; then + rm -f "$unsparsed" + fi + + echo "rootfs_data flashed successfully." +else + echo + echo "EXT4 mode: rootfs_data partition not present in GPT" +fi + +echo +echo "=== Process completed successfully ===" +echo "Device should reboot to OpenWrt automatically." diff --git a/msm89xx/image/generate_gpt.sh b/msm89xx/image/generate_gpt.sh new file mode 100755 index 0000000..983cd4f --- /dev/null +++ b/msm89xx/image/generate_gpt.sh @@ -0,0 +1,50 @@ +#!/bin/sh -e +# Usage: generate-gpt.sh [GPT_TABLE_FILE] [GPT_OUTPUT_NAME] + +OUTDIR="$1" +GPT_TABLE="${2:-gpt-squashfs.table}" +GPT_OUTPUT="${3:-squashfs_gpt_both0.bin}" +TMPDIR="$(mktemp -d)" +IMG="${TMPDIR}/gpt.img" +SECTOR_SIZE=512 + +[ -z "${OUTDIR}" ] && { echo "Error: OUTDIR not specified"; exit 1; } +[ ! -f "${GPT_TABLE}" ] && { echo "Error: GPT table '${GPT_TABLE}' not found"; exit 1; } + +mkdir -p "${OUTDIR}" + +SECTORS_TOTAL=7634944 +truncate -s $((SECTORS_TOTAL*SECTOR_SIZE)) "${IMG}" + +sfdisk "${IMG}" < "${GPT_TABLE}" + +# Generar GPT blob con nombre configurable +{ + dd if="${IMG}" bs=${SECTOR_SIZE} count=34 status=none + dd if="${IMG}" bs=${SECTOR_SIZE} skip=$((SECTORS_TOTAL - 33)) count=33 status=none +} > "${OUTDIR}/${GPT_OUTPUT}" + +echo "Wrote: ${OUTDIR}/${GPT_OUTPUT}" + +# Check if rootfs_data partition exists +if grep -q 'name="rootfs_data"' "${GPT_TABLE}"; then + echo "rootfs_data partition detected, creating rootfs_data.img..." + + UD_LINE="$(sfdisk --dump "${IMG}" | awk -F: '/name="rootfs_data"/{print $2}')" + UD_SECTORS="$(printf '%s\n' "${UD_LINE}" | sed -n 's/.*size=\s*\([0-9]\+\).*/\1/p')" + + [ -z "${UD_SECTORS}" ] && { echo "Failed to resolve rootfs_data size"; exit 1; } + UD_BYTES=$((UD_SECTORS*SECTOR_SIZE)) + + RAW="${TMPDIR}/rootfs_data.raw" + SPARSE="${OUTDIR}/rootfs_data.img" + truncate -s "${UD_BYTES}" "${RAW}" + mke2fs -t ext4 -F -L rootfs_data -O ^has_journal "${RAW}" + img2simg "${RAW}" "${SPARSE}" + + echo "Wrote: ${SPARSE}" +else + echo "No rootfs_data partition in table, skipping rootfs_data.img" +fi + +rm -rf "${TMPDIR}" diff --git a/msm89xx/image/msm8916.mk b/msm89xx/image/msm8916.mk index d2cf66d..ceb2121 100644 --- a/msm89xx/image/msm8916.mk +++ b/msm89xx/image/msm8916.mk @@ -2,16 +2,51 @@ ifeq ($(SUBTARGET),msm8916) +define Build/generate-gpt-squashfs + $(TOPDIR)/target/linux/$(BOARD)/image/generate_gpt.sh \ + "$(dir $@)" \ + $(TOPDIR)/target/linux/$(BOARD)/image/tables/gpt-squashfs.table \ + "$(notdir $@)" +endef + +define Build/generate-gpt-ext4 + $(TOPDIR)/target/linux/$(BOARD)/image/generate_gpt.sh \ + "$(dir $@)" \ + $(TOPDIR)/target/linux/$(BOARD)/image/tables/gpt-ext4.table \ + "$(notdir $@)" +endef + +define Build/install-flasher + $(CP) $(TOPDIR)/target/linux/$(BOARD)/image/flash.sh $@ + chmod +x $@ +endef + define Device/msm8916 - SOC := msm8916 - CMDLINE := "earlycon console=tty0 console=ttyMSM0,115200 root=/dev/mmcblk0p14 rw rootwait" + SOC := msm8916 + CMDLINE := "earlycon console=tty0 console=ttyMSM0,115200 root=/dev/mmcblk0p14 rootwait nowatchdog" endef define Device/yiming-uz801v3 $(Device/msm8916) DEVICE_VENDOR := YiMing DEVICE_MODEL := uz801v3 - DEVICE_PACKAGES := uz801-tweaks wpad-basic-wolfssl msm-firmware-dumper + DEVICE_PACKAGES := uz801-tweaks wpad-basic-wolfssl msm-firmware-dumper rmtfs + # rootfs-resizer rootfs-data-formatter + + ifdef CONFIG_TARGET_ROOTFS_SQUASHFS + IMAGE/system.img := append-rootfs | append-metadata + ARTIFACTS += squashfs_gpt_both0.bin squashfs_rootfs_data.img flash.sh + ARTIFACT/squashfs_gpt_both0.bin := generate-gpt-squashfs + ARTIFACT/squashfs_rootfs_data.img := generate-gpt-squashfs + ARTIFACT/flash.sh := install-flasher + endif + + ifdef CONFIG_TARGET_ROOTFS_EXT4FS + IMAGE/system.img := append-rootfs | append-metadata | sparse-img + ARTIFACTS += ext4_gpt_both0.bin flash.sh + ARTIFACT/ext4_gpt_both0.bin := generate-gpt-ext4 + ARTIFACT/flash.sh := install-flasher + endif endef TARGET_DEVICES += yiming-uz801v3 diff --git a/msm89xx/image/tables/gpt-ext4.table b/msm89xx/image/tables/gpt-ext4.table new file mode 100644 index 0000000..1477aae --- /dev/null +++ b/msm89xx/image/tables/gpt-ext4.table @@ -0,0 +1,18 @@ +label: gpt +unit: sectors +sector-size: 512 + +p1 : start= 4096, size= 2, type=57B90A16-22C9-E33B-8F5D-0E81686A68CB, name="fsc" +p2 : start= 4098, size= 3072, type=638FF8E2-22C9-E33B-8F5D-0E81686A68CB, name="fsg" +p3 : start= 7170, size= 131072, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, name="modem" +p4 : start= 138242, size= 3072, type=EBBEADAF-22C9-E33B-8F5D-0E81686A68CB, name="modemst1" +p5 : start= 141314, size= 3072, type=0A288B1F-22C9-E33B-8F5D-0E81686A68CB, name="modemst2" +p6 : start= 144386, size= 65536, type=6C95E238-E343-4BA8-B489-8681ED22AD0B, name="persist" +p7 : start= 209922, size= 32, type=303E6AC3-AF15-4C54-9E9B-D9A8FBECF401, name="sec" +p8 : start= 209954, size= 1024, type=E1A6A689-0C8D-4CC6-B4E8-55A4320FBD8A, name="hyp" +p9 : start= 210978, size= 1024, type=098DF793-D712-413D-9D4E-89D711772228, name="rpm" +p10: start= 212002, size= 1024, type=DEA0BA2C-CBDD-4805-B4F9-F428251C3E98, name="sbl1" +p11: start= 213026, size= 2048, type=A053AA7F-40B8-4B1C-BA08-2F68AC71A4F4, name="tz" +p12: start= 215074, size= 2048, type=400FFDCD-22E0-47E7-9A23-F16ED9382388, name="aboot" +p13: start= 217122, size= 131072, type=20117F86-E985-4357-B9EE-374BC1D8487D, name="boot" +p14: start= 348194, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, name="rootfs" diff --git a/packages/msm-firmware-dumper/Makefile b/packages/msm-firmware-dumper/Makefile index 1295944..b678eb3 100644 --- a/packages/msm-firmware-dumper/Makefile +++ b/packages/msm-firmware-dumper/Makefile @@ -8,10 +8,10 @@ PKG_LICENSE:=BSD-3-Clause 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 + 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 diff --git a/packages/msm-firmware-dumper/files/msm-firmware-dumper.init b/packages/msm-firmware-dumper/files/msm-firmware-dumper.init index 7c9e52d..e9ad488 100644 --- a/packages/msm-firmware-dumper/files/msm-firmware-dumper.init +++ b/packages/msm-firmware-dumper/files/msm-firmware-dumper.init @@ -2,7 +2,7 @@ USE_PROCD=1 START=08 NAME=msm-firmware-dumper -FLAG="/etc/msm-fw-dumped" +FLAG="/lib/firmware/DUMPED" PROG="/usr/bin/msm-firmware-dumper" start_service() { diff --git a/packages/msm-firmware-dumper/files/msm-firmware-dumper.sh b/packages/msm-firmware-dumper/files/msm-firmware-dumper.sh index 31959a9..bc3a93b 100644 --- a/packages/msm-firmware-dumper/files/msm-firmware-dumper.sh +++ b/packages/msm-firmware-dumper/files/msm-firmware-dumper.sh @@ -5,7 +5,7 @@ # env var to override the MCFG relative path within modem/persist. set -e -DEFAULT_MARKER="/etc/msm-firmware-dumped" +DEFAULT_MARKER="/lib/firmware/DUMPED" DEFAULT_MCFG_PATH="image/modem_pr/mcfg/configs/mcfg_sw/generic/common/default/default" MARKER="${MSM_DUMPER_FLAG_FILE:-$DEFAULT_MARKER}" @@ -66,11 +66,6 @@ umount "$MNT/modem" 2>/dev/null || true umount "$MNT/persist" 2>/dev/null || true rmdir "$MNT/persist" "$MNT/modem" 2>/dev/null || true -# Enable WIFI -uci set wireless.@wifi-device[0].disabled='0' -uci set wireless.@wifi-iface[0].disabled='0' -uci commit wireless - # Set marker and reboot once touch "$MARKER" log "done, rebooting" diff --git a/packages/msm8916-usb-gadget/files/msm8916-usb-gadget.conf b/packages/msm8916-usb-gadget/files/msm8916-usb-gadget.conf index 10f0169..6461a68 100644 --- a/packages/msm8916-usb-gadget/files/msm8916-usb-gadget.conf +++ b/packages/msm8916-usb-gadget/files/msm8916-usb-gadget.conf @@ -10,11 +10,11 @@ ### # USB Functions Enable/Disable -ENABLE_RNDIS=1 # MS-Windows compatible ethernet -ENABLE_ECM=0 # CDC ECM ethernet -ENABLE_NCM=0 # CDC NCM ethernet (Best Performance) -ENABLE_UMS=0 # Mass storage -ENABLE_ACM=0 # Serial console +ENABLE_RNDIS=0 # MS-Windows compatible ethernet +ENABLE_ECM=0 # CDC ECM ethernet +ENABLE_NCM=1 # CDC NCM ethernet (Best Performance) +ENABLE_UMS=0 # Mass storage +ENABLE_ACM=0 # Serial console # UMS Configuration (if enabled) UMS_IMAGE="/var/lib/msm8916-gadget/usb_mass_storage.img" @@ -24,6 +24,7 @@ UMS_READONLY=0 # ACM Configuration (if enabled) # NOTE: MSM8916 hardware supports maximum 3 ACM serial ports ACM_COUNT=1 # Number of Serial ports +ACM_SHELL=1 # Enable shell/login on serial ports (1=shell, 0=raw tty) # UDC Device (auto-detect if empty) UDC_DEVICE="" @@ -33,4 +34,4 @@ USB_VENDOR_ID="0x1d6b" # Linux Foundation USB_PRODUCT_ID="0x0104" # Multifunction Composite Gadget USB_DEVICE_VERSION="0x0100" # v1.0.0 USB_MANUFACTURER="MSM8916" -USB_PRODUCT="USB Gadget" \ No newline at end of file +USB_PRODUCT="USB Gadget" diff --git a/packages/msm8916-usb-gadget/files/msm8916-usb-gadget.sh b/packages/msm8916-usb-gadget/files/msm8916-usb-gadget.sh index 408e21e..795c86c 100644 --- a/packages/msm8916-usb-gadget/files/msm8916-usb-gadget.sh +++ b/packages/msm8916-usb-gadget/files/msm8916-usb-gadget.sh @@ -107,6 +107,39 @@ create_storage_image() { log "Storage image created successfully (raw format)" } +setup_serial_consoles() { + if [ "${ENABLE_ACM}" != "1" ]; then + return + fi + + # Check if shell is enabled + if [ "${ACM_SHELL:-0}" != "1" ]; then + log "Serial ports configured as raw TTY (no shell)" + return + fi + + log "Configuring serial console shells" + + # Wait for devices to appear + sleep 2 + + acm_count="${ACM_COUNT:-1}" + for i in $(seq 0 $((acm_count - 1))); do + if [ -c "/dev/ttyGS${i}" ]; then + log "Starting console shell on ttyGS${i}" + # Check if already in inittab + if ! grep -q "ttyGS${i}" /etc/inittab 2>/dev/null; then + echo "ttyGS${i}::askfirst:/usr/libexec/login.sh" >> /etc/inittab + fi + else + log "Warning: /dev/ttyGS${i} not found yet" + fi + done + + # Reload procd to pick up changes + killall -HUP procd 2>/dev/null || true +} + setup_gadget() { log "Setting up USB gadget" @@ -243,6 +276,9 @@ setup_gadget() { log "Using UDC: ${udc}" echo "${udc}" > UDC || error "Failed to enable UDC" + # Configure serial console shells (only if ACM_SHELL=1) + setup_serial_consoles + # Configure network interfaces via UCI setup_network } @@ -305,6 +341,15 @@ teardown_gadget() { # Disable gadget echo "" > UDC || true + # Remove serial consoles from inittab (if shell was enabled) + if [ "${ENABLE_ACM}" = "1" ] && [ "${ACM_SHELL:-0}" = "1" ]; then + acm_count="${ACM_COUNT:-1}" + for i in $(seq 0 $((acm_count - 1))); do + sed -i "/ttyGS${i}/d" /etc/inittab 2>/dev/null || true + done + killall -HUP procd 2>/dev/null || true + fi + # Remove network interfaces from LAN for func in functions/*/ifname; do if [ -f "${func}" ]; then @@ -341,6 +386,24 @@ status() { echo "UDC: $(cat ${GADGET_PATH}/UDC)" echo "Functions:" ls -1 ${GADGET_PATH}/configs/c.1/ 2>/dev/null | grep -v strings + + # Show serial console status + if [ "${ENABLE_ACM}" = "1" ]; then + echo "" + echo "Serial consoles:" + acm_count="${ACM_COUNT:-1}" + for i in $(seq 0 $((acm_count - 1))); do + if [ -c "/dev/ttyGS${i}" ]; then + if [ "${ACM_SHELL:-0}" = "1" ]; then + echo " /dev/ttyGS${i} - available (with shell)" + else + echo " /dev/ttyGS${i} - available (raw TTY)" + fi + else + echo " /dev/ttyGS${i} - not found" + fi + done + fi return 0 else echo "USB Gadget is inactive" @@ -367,4 +430,4 @@ case "$1" in echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; -esac \ No newline at end of file +esac diff --git a/packages/uz801-tweaks/Makefile b/packages/uz801-tweaks/Makefile index 2e88ce7..88750b8 100644 --- a/packages/uz801-tweaks/Makefile +++ b/packages/uz801-tweaks/Makefile @@ -17,7 +17,7 @@ define Package/$(PKG_NAME) SECTION:=Utilities CATEGORY:=Utilities TITLE:=Defaults Setting For uz801v3 - DEPENDS:=+rootfs-resizer +PACKAGE_luci:luci-proto-modemmanager +kmod-usb-lib-composite +rmtfs + DEPENDS:=+PACKAGE_luci:luci-proto-modemmanager endef define Build/Configure diff --git a/packages/uz801-tweaks/files/uci_defaults b/packages/uz801-tweaks/files/uci_defaults index 03be19d..64e3bdf 100644 --- a/packages/uz801-tweaks/files/uci_defaults +++ b/packages/uz801-tweaks/files/uci_defaults @@ -1,8 +1,8 @@ #!/bin/sh # Enabling Wifi -uci set wireless.@wifi-device[0].disabled='0' -uci set wireless.@wifi-iface[0].disabled='0' +# uci set wireless.@wifi-device[0].disabled='0' +# uci set wireless.@wifi-iface[0].disabled='0' # create modem interface uci set network.modem=interface diff --git a/readme.md b/readme.md index 4b0b8ff..b702c72 100644 --- a/readme.md +++ b/readme.md @@ -18,15 +18,14 @@ Modern version of OpenWrt working on UZ801v3: - No shell attached to ACM, just pure raw Serial (/dev/ttyGS0) - TUN installed - Wireguard Installed -- GRE Protocol Installed - `hotplug.d` scripts to manage leds, only on/off if iface, no blinking: - On default Linux Kernel `dts`, leds are swapped! - Wifi Led: [packages/uz801-tweaks/files/wifi-led.hotplug](packages/uz801-tweaks/files/wifi-led.hotplug) - Modem Led: [packages/uz801-tweaks/files/modem-led.hotplug](packages/uz801-tweaks/files/modem-led.hotplug) - Firmware is dumped on first boot from modem/persist partition: - - Small distributable size - Uses the binaries/firmware from the own device. - __This might imply that a port for other devices would be easier... but I have not tested it as I only have this device.___ +- SQUASHFS Enabled: This allows for __*firstboot*__ (factory reset). ### How to build OpenWrt Docker is required! @@ -78,14 +77,12 @@ Once you have selected your region, you'll find folders typically representing T 3. Reboot the device. ### Future: -- squashfs + overlayfs + firstboot: - - This implies new gpt partition table with `boot`, `system` and `userspace`, `system` has `ro` filesystem, and `userspace` has overlayfs. - - gpt table makes `fastboot erase/format` expand `userspace` to full size. +- ACM gadget not working! + - Also test Shell - Custom package server for msm89xx/msm8916 - Any target specific module not present might require to be built from sources. This repo can be used to do that, run `make menuconfig` before `make -j$(nproc)` and select it from the menu. -- `msm-firmware-loader` or `msm-firmware-staging`, to mount firmware instead of bundle to free up almost 40mb from rootfs. - - For more info: [packages/msm-firmware-loader/readme.md](packages/msm-firmware-loader/readme.md) - - Posible solution: use `preinit` script, but not working... bootloop. +- Generate all `base_partitions` with openwrt builder. +- Format `rootfs_data` with openwrt first boot! ## Credits - @ghosthgy https://github.com/ghosthgy/openwrt-msm8916