only one board

This commit is contained in:
Miguel Fuertes committed 2025-10-10 19:57:22 +02:00
1 parent 5a3015637b
commit eccd2f8735
12 files changed
+15 -385

No files matched your search

-11
View File
@@ -39,15 +39,4 @@ define Device/yiming-uz801v3
endef
TARGET_DEVICES += yiming-uz801v3
define Device/generic-sp970
$(Device/msm8916)
DEVICE_VENDOR := Generic
DEVICE_MODEL := SP970
FILESYSTEMS := squashfs
DEVICE_PACKAGES := configs-sp970 wpad-basic-wolfssl rmtfs uci-usb-gadget \
block-mount f2fs-tools prepare-rootfs-data \
msm-firmware-dumper
endef
TARGET_DEVICES += generic-sp970
endif
@@ -1,56 +0,0 @@
diff --git a/arch/arm64/boot/dts/qcom/msm8916-generic-sp970.dts b/arch/arm64/boot/dts/qcom/msm8916-generic-sp970.dts
new file mode 100644
index 000000000000..222222222222
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/msm8916-generic-sp970.dts
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+/dts-v1/;
+
+#include "msm8916-ufi.dtsi"
+
+/ {
+ model = "Generic SP970 4G LTE WiFi Modem";
+ compatible = "generic,sp970", "qcom,msm8916";
+};
+
+/* Reset button (active low) */
+&button_restart {
+ gpios = <&tlmm 107 GPIO_ACTIVE_LOW>;
+};
+
+/* RGB LEDs */
+&led_r {
+ gpios = <&tlmm 9 GPIO_ACTIVE_HIGH>;
+};
+
+&led_g {
+ gpios = <&tlmm 10 GPIO_ACTIVE_HIGH>;
+};
+
+&led_b {
+ gpios = <&tlmm 28 GPIO_ACTIVE_HIGH>;
+};
+
+/* Pinctrl for button and LEDs */
+&button_default {
+ pins = "gpio107";
+ bias-pull-up;
+};
+
+&gpio_leds_default {
+ pins = "gpio9", "gpio10", "gpio28";
+};
+
+/* Sleep clock aligned to the typical 32.768 kHz crystal */
+&sleep_clk {
+ clock-frequency = <32768>;
+};
+
+/* WCN3660B WiFi/BT - Add critical XO clock */
+&wcnss_iris {
+ compatible = "qcom,wcn3660b";
+ clocks = <&rpmcc RPM_SMD_RF_CLK2>;
+ clock-names = "xo";
+};
@@ -1,12 +0,0 @@
Index: linux-6.12.50/arch/arm64/boot/dts/qcom/Makefile
===================================================================
--- linux-6.12.50.orig/arch/arm64/boot/dts/qcom/Makefile
+++ linux-6.12.50/arch/arm64/boot/dts/qcom/Makefile
@@ -59,6 +59,7 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8916-wingt
dtb-$(CONFIG_ARCH_QCOM) += msm8916-wingtech-wt86528.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8916-wingtech-wt88047.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8916-yiming-uz801v3.dtb
+dtb-$(CONFIG_ARCH_QCOM) += msm8916-generic-sp970.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8929-wingtech-wt82918hd.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8939-huawei-kiwi.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8939-longcheer-l9100.dtb
-58
View File
@@ -1,58 +0,0 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=configs-sp970
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:=Defaults Setting For sp970
DEPENDS:=+PACKAGE_luci:luci-proto-modemmanager
endef
# (Opcional) Descripción
define Package/$(PKG_NAME)/description
Tweaks y defaults para sp970, incluyendo limpieza de feeds APK problemáticos.
endef
define Build/Configure
endef
define Build/Compile
endef
# Instala ficheros de configuración y payload que ya tenías
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_DATA) ./files/luci-app-tailscale*.apk $(1)/root/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/uim_selection $(1)/etc/init.d/
$(INSTALL_DIR) $(1)/lib/firmware
$(INSTALL_DATA) ./files/mcfg_sw.mbn $(1)/lib/firmware/MCFG_SW.MBN
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)))
Binary file not shown.
-33
View File
@@ -1,33 +0,0 @@
#!/bin/sh
# Enabling WiFi
uci set wireless.@wifi-device[0].disabled='0'
uci set wireless.@wifi-iface[0].disabled='0'
uci set wireless.radio0.band='2g'
uci set wireless.radio0.channel='auto'
uci set wireless.radio0.cell_density='0'
# Create modem interface
uci set network.modem=interface
uci set network.modem.proto='modemmanager'
uci set network.modem.device='qcom-soc'
uci set network.modem.auth='none'
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 del_list firewall.@zone[1].network='modem'
uci add_list firewall.@zone[1].network='modem'
# 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
# Apply network and wireless configuration
wifi reload
/etc/init.d/network restart
exit 0
-100
View File
@@ -1,100 +0,0 @@
#!/bin/sh /etc/rc.common
# This script tries to automatically configure UIM application for Qualcomm QMI
# modems with more than one sim slot.
# Adapted from pmOS:
# https://gitlab.com/postmarketOS/pmaports/-/blob/master/modem/msm-modem/msm-modem-uim-selection.initd
eend() { echo $@; }
veinfo() { echo $@; }
ewarn() { echo $@; }
# Must run after rmtfs but before ModemManager
START=30
start() {
case "$(cat /sys/devices/soc0/machine)" in
APQ*)
eend 0 'Skipping SIM configuration on APQ SoC.'
return 0
esac
# libqmi must be present to use this script.
if ! [ -x "$(command -v qmicli)" ]
then
eend 1 'qmicli is not installed.'
return 1
fi
# Prepare a qmicli command with desired modem path.
# The modem may appear after some delay, wait for it.
count=0
while [ -z "$QMICLI_MODEM" ] && [ "$count" -lt "45" ]
do
# Check if legacy rpmsg exported device exists.
if [ -e "/dev/modem" ]
then
QMICLI_MODEM="qmicli --silent -d /dev/modem"
veinfo "Using /dev/modem"
# Check if the qmi device from wwan driver exists.
elif [ -e "/dev/wwan0qmi0" ]
then
# Using --device-open-qmi flag as we may have libqmi
# version that can't automatically detect the type yet.
QMICLI_MODEM="qmicli --silent -d /dev/wwan0qmi0 --device-open-qmi"
veinfo "Using /dev/wwan0qmi0"
# Check if QRTR is available for new devices.
elif qmicli --silent -pd qrtr://0 --uim-noop > /dev/null
then
QMICLI_MODEM="qmicli --silent -pd qrtr://0"
veinfo "Using qrtr://0"
fi
sleep 1
count=$((count+1))
done
veinfo "Waited $count seconds for modem device to appear"
if [ -z "$QMICLI_MODEM" ]
then
eend 2 'No modem available.'
return 2
fi
QMI_CARDS=$($QMICLI_MODEM --uim-get-card-status)
# Fail if all slots are empty but wait a bit for the sim to appear.
count=0
while ! printf "%s" "$QMI_CARDS" | grep -Fq "Card state: 'present'"
do
if [ "$count" -ge "$sim_wait_time" ]
then
eend 4 "No sim detected after $sim_wait_time seconds."
return 4
fi
sleep 1
count=$((count+1))
QMI_CARDS=$($QMICLI_MODEM --uim-get-card-status)
done
veinfo "Waited $count seconds for modem to come up"
# Clear the selected application in case the modem is in a bugged state
if ! printf "%s" "$QMI_CARDS" | grep -Fq "Primary GW: session doesn't exist"
then
ewarn 'Application was already selected.'
$QMICLI_MODEM --uim-change-provisioning-session='activate=no,session-type=primary-gw-provisioning' > /dev/null
fi
# Extract first available slot number and AID for usim application
# on it. This should select proper slot out of two if only one UIM is
# present or select the first one if both slots have UIM's in them.
FIRST_PRESENT_SLOT=$(printf "%s" "$QMI_CARDS" | grep "Card state: 'present'" -m1 -B1 | head -n1 | cut -c7-7)
FIRST_PRESENT_AID=$(printf "%s" "$QMI_CARDS" | grep "usim (2)" -m1 -A3 | tail -n1 | awk '{print $1}')
veinfo "Selecting $FIRST_PRESENT_AID on slot $FIRST_PRESENT_SLOT"
# Finally send the new configuration to the modem.
$QMICLI_MODEM --uim-change-provisioning-session="slot=$FIRST_PRESENT_SLOT,activate=yes,session-type=primary-gw-provisioning,aid=$FIRST_PRESENT_AID" > /dev/null
eend $?
}
@@ -27,7 +27,7 @@ start() {
logger -t "$NAME" "Starting firmware dump"
if $PROG; then
if FLAG="$FLAG" $PROG; then
logger -t "$NAME" "Firmware dump successful, rebooting"
sleep 1
reboot
@@ -5,10 +5,10 @@
# env var to override the MCFG relative path within modem/persist.
set -e
FLAG="/lib/firmware/DUMPED"
DEFAULT_FLAG="/lib/firmware/DUMPED"
DEFAULT_MCFG_PATH="image/modem_pr/mcfg/configs/mcfg_sw/generic/common/default/default"
MARKER="${MSM_DUMPER_FLAG_FILE:-$DEFAULT_MARKER}"
MARKER="${FLAG:-$DEFAULT_FLAG}"
[ -f "$MARKER" ] && exit 0
log() { logger -t msm-fw-dumper "$*"; }
+12 -20
View File
@@ -1,6 +1,6 @@
![OpenWrt logo](https://raw.githubusercontent.com/openwrt/openwrt/refs/heads/main/include/logo.png)
Modern OpenWrt build targeting the msm8916 platform (uz801 and sp970 Chineese 4g Dongles) with full modem and USB gadget support.
Modern OpenWrt build targeting the UZ801v3 LTE dongle with full modem and USB gadget support.
## Table of Contents
@@ -55,15 +55,14 @@ OpenWrt Project is a Linux operating system targeting embedded devices. Instead
## Building
1. Enter the build environment:
```shell
```
cd devenv
docker compose run --rm builder
```
2. Configure and build:
```shell
cp /repo/uz801_diffconfig .config
# cp /repo/sp970_diffconfig .config
```
cp /repo/diffconfig .config
echo "# CONFIG_SIGNED_PACKAGES is not set" >> .config # Optional: disable signature verification
make defconfig
make -j$(nproc)
@@ -74,30 +73,24 @@ make -j$(nproc)
### Flashing from OEM Firmware
1. **Install EDL tool**: https://github.com/bkerler/edl
2. **Enter EDL mode**:
- **UZ801**: See [PostmarketOS wiki guide](https://wiki.postmarketos.org/wiki/Zhihe_series_LTE_dongles_(generic-zhihe)#How_to_enter_flash_mode)
- **SP970**: Via [EDL cable](https://wiki.bananahackers.net/en/guides/boot/edl/cable). Shorting GND and DATA pins in USB cable.
2. **Enter EDL mode**: See [PostmarketOS wiki guide](https://wiki.postmarketos.org/wiki/Zhihe_series_LTE_dongles_(generic-zhihe)#How_to_enter_flash_mode)
3. **Backup original firmware**:
```shell
edl rf backup.bin
```
```
edl rf backup.bin
```
4. **Flash OpenWrt**:
```shell
./openwrt-msm89xx-msm8916-yiming-uz801v3-flash.sh
# ./openwrt-msm89xx-msm8916-generic-sp970-flash.sh
```
```
./openwrt-msm89xx-msm8916-yiming-uz801v3-flash.sh
```
> The script automatically backs up device-specific partitions, flashes the firmware, and restores critical data.
### Accessing Boot Modes
**UZ801**:
- **Fastboot mode**: Insert device while holding the button
- **EDL mode**: Boot to fastboot first, then execute: `fastboot oem reboot-edl`
**SP970**:
- The only other mode you can enter is **EDL Mode**. To do so just short usb's `gnd` the data pin closest to it.
## Troubleshooting
### No Network / Modem Stuck at Searching
@@ -152,4 +145,3 @@ The modem requires region-specific MCFG configuration files.
- **[@Mio-sha512](https://github.com/Mio-sha512/OpenStick-Builder)** - USB gadget and firmware loader concepts
- **[@AlienWolfX](https://github.com/AlienWolfX/UZ801-USB_MODEM/wiki/Troubleshooting)** - Carrier policy troubleshooting guide
- **[@gw826943555](https://github.com/gw826943555/luci-app-tailscale) & [@asvow](https://github.com/asvow)** - Tailscale LuCI application
- **[@HandsomeMod](https://github.com/HandsomeMod/linux-msm/blob/main/arch/arm64/boot/dts/qcom/msm8916-handsome-openstick-sp970.dts)** - Base for the `sp970` dts.
-92
View File
@@ -1,92 +0,0 @@
CONFIG_TARGET_msm89xx=y
CONFIG_TARGET_msm89xx_msm8916=y
CONFIG_TARGET_msm89xx_msm8916_DEVICE_generic-sp970=y
CONFIG_LIBQMI_COLLECTION_BASIC=y
CONFIG_LIBQMI_WITH_MBIM_QMUX=y
CONFIG_LIBQMI_WITH_QRTR_GLIB=y
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_cgi-io=y
CONFIG_PACKAGE_dbus=y
CONFIG_PACKAGE_glib2=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-tun=y
CONFIG_PACKAGE_kmod-udptunnel4=y
CONFIG_PACKAGE_kmod-udptunnel6=y
CONFIG_PACKAGE_kmod-wireguard=y
CONFIG_PACKAGE_ledcontrol=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
CONFIG_PACKAGE_liblua=y
CONFIG_PACKAGE_liblucihttp=y
CONFIG_PACKAGE_liblucihttp-lua=y
CONFIG_PACKAGE_liblucihttp-ucode=y
CONFIG_PACKAGE_libmbim=y
CONFIG_PACKAGE_libmount=y
CONFIG_PACKAGE_libncurses=y
CONFIG_PACKAGE_libpcre2=y
CONFIG_PACKAGE_libqmi=y
CONFIG_PACKAGE_libqrtr-glib=y
CONFIG_PACKAGE_libreadline=y
CONFIG_PACKAGE_libubus-lua=y
CONFIG_PACKAGE_lsblk=y
CONFIG_PACKAGE_lua=y
CONFIG_PACKAGE_luci=y
CONFIG_PACKAGE_luci-app-firewall=y
CONFIG_PACKAGE_luci-app-package-manager=y
CONFIG_PACKAGE_luci-app-usb-gadget=y
CONFIG_PACKAGE_luci-base=y
CONFIG_PACKAGE_luci-lib-base=y
CONFIG_PACKAGE_luci-lib-ip=y
CONFIG_PACKAGE_luci-lib-json=y
CONFIG_PACKAGE_luci-lib-jsonc=y
CONFIG_PACKAGE_luci-lib-nixio=y
CONFIG_PACKAGE_luci-lib-uqr=y
CONFIG_PACKAGE_luci-light=y
CONFIG_PACKAGE_luci-lua-runtime=y
CONFIG_PACKAGE_luci-mod-admin-full=y
CONFIG_PACKAGE_luci-mod-network=y
CONFIG_PACKAGE_luci-mod-rpc=y
CONFIG_PACKAGE_luci-mod-status=y
CONFIG_PACKAGE_luci-mod-system=y
CONFIG_PACKAGE_luci-proto-ipv6=y
CONFIG_PACKAGE_luci-proto-modemmanager=y
CONFIG_PACKAGE_luci-proto-ppp=y
CONFIG_PACKAGE_luci-proto-wireguard=y
CONFIG_PACKAGE_luci-theme-bootstrap=y
CONFIG_PACKAGE_modemmanager=y
CONFIG_PACKAGE_mount-utils=y
CONFIG_PACKAGE_mtools=y
CONFIG_PACKAGE_nano=y
CONFIG_PACKAGE_resize2fs=y
CONFIG_PACKAGE_resolveip=y
CONFIG_PACKAGE_rpcd=y
CONFIG_PACKAGE_rpcd-mod-file=y
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_tune2fs=y
CONFIG_PACKAGE_ucode-mod-html=y
CONFIG_PACKAGE_ucode-mod-log=y
CONFIG_PACKAGE_ucode-mod-lua=y
CONFIG_PACKAGE_ucode-mod-math=y
CONFIG_PACKAGE_uhttpd=y
CONFIG_PACKAGE_uhttpd-mod-ubus=y
CONFIG_PACKAGE_wireguard-tools=y
# CONFIG_TARGET_ROOTFS_EXT4FS is not set