# 小米路由器 4 Pro（R1350）设备专属 OpenWrt 测试包

> 仅适用于资料和备份对应的 **Xiaomi Router 4 Pro / R1350**。不是“小米路由器 4”，也不是“小米路由器 Pro”。首版尚未完成实体机验证，必须具备串口或编程器恢复条件。

## 1. 已确认硬件

- SoC：Qualcomm Atheros QCA9563
- 5 GHz：Qualcomm QCA9888 hw2，PCI ID `168c:0056`
- Flash：16 MiB SPI NOR，擦除块 64 KiB
- RAM：128 MiB
- 原厂板型：Qualcomm AP152
- 交换机：QCA/AR8327 系列，1 WAN + 3 LAN
- 原厂系统：Linux 3.3.8 + Qualcomm QSDK `qca_ol`
- OpenWrt 基线：`openwrt-24.10`，commit `924f06e76cd73e24d39691a4de621bdcae80a756`
- OpenWrt 内核：Linux 6.6.144
- 内核构建身份：`nyarime@naixi.net`

## 2. 原厂分区表与保护策略

| 分区 | Flash 偏移 | 长度 | OpenWrt策略 |
|---|---:|---:|---|
| Bootloader | `0x000000` | `0x030000` | 只读 |
| Nvram | `0x030000` | `0x010000` | 只读 |
| Bdata | `0x040000` | `0x010000` | 只读 |
| crash | `0x050000` | `0x010000` | 只读 |
| ART | `0x060000` | `0x010000` | **只读，禁止覆盖** |
| cfg_bak | `0x070000` | `0x020000` | 只读 |
| 原厂 overlay | `0x090000` | `0x170000` | 只读 |
| firmware | `0x200000` | `0xE00000` | OpenWrt kernel + rootfs |

以上与原厂 `/proc/mtd`、16 MiB 全闪存备份、官方固件和 U-Boot 恢复范围相符。

## 3. 无线修复原理

旧的 AC2350/相似机型固件可以识别 QCA9888，但没有给 R1350 建立准确的板级匹配，因此 5 GHz 可能只加载通用 Board Data，表现为“接口存在但信号极弱”。

本设备定义明确声明：

```text
PCIe 设备：168c:0056（QCA9888）
QCA9563 2.4 GHz：ART + 0x1000，长度 0x440
QCA9888 5 GHz：ART + 0x5000，长度 0x2F20
```

上述两个切片与原厂生成的 `wifi0.caldata`、`wifi1.caldata` 逐字节一致。镜像**不内嵌 ART、MAC 或朋友设备的唯一校准数据**，而是在启动时从本机只读 ART 获取，因此不会把设备身份泄露进公开固件。

首版使用：

```text
kmod-ath9k
kmod-ath10k-ct
ath10k-firmware-qca9888-ct
ath10k-board-qca9888
```

## 4. 原厂 GPIO

来自原厂 rootfs 配置：

| 功能 | GPIO | 极性 |
|---|---:|---|
| Reset | 18 | 低有效 |
| 系统黄灯 | 2 | 低有效 |
| 系统蓝灯 | 3 | 低有效 |
| 功能黄灯 | 4 | 低有效 |
| 功能蓝灯 | 5 | 低有效 |

SPI NOR 频率保守配置为 25 MHz。

## 5. 交付镜像

### initramfs-kernel.bin

用于低风险 RAM 启动验证，不写入 Flash。应优先测试它。

### squashfs-sysupgrade.bin

只面向已经运行 OpenWrt、且 firmware 分区确定为 `0x200000/0xE00000` 的 R1350。元数据只允许：

```text
xiaomi,mi-router-4-pro-r1350
```

### 为什么没有 factory.bin

小米原厂 Web 升级使用厂商镜像头、校验/签名和升级逻辑。本项目没有伪造“可从原厂网页直刷”的 factory 镜像，以免原厂升级程序误写分区。首次安装应使用 initramfs 验证后，再通过 U-Boot/已有 OpenWrt 只写 `firmware` 分区。

## 6. 编译教程

推荐 Debian 12/Ubuntu 22.04，普通用户编译：

```bash
sudo apt update
sudo apt install -y build-essential clang flex bison g++ gawk gcc-multilib \
  gettext git libncurses-dev libssl-dev python3-distutils rsync unzip zlib1g-dev \
  file wget

git clone --branch openwrt-24.10 https://github.com/openwrt/openwrt.git
cd openwrt
git checkout 924f06e76cd73e24d39691a4de621bdcae80a756
git am ../patches/0001-ath79-add-xiaomi-mi-router-4-pro-r1350.patch
cp ../config-r1350 .config
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make -j"$(nproc)" download
make -j"$(nproc)" V=sc
```

如果只能以 root 编译，需额外设置（仍建议使用普通用户）：

```bash
export FORCE_UNSAFE_CONFIGURE=1
```

产物位于：

```text
bin/targets/ath79/generic/
```

只使用文件名包含：

```text
xiaomi_mi-router-4-pro-r1350
```

的镜像。

## 7. 首次启动顺序

1. 保留原始 `all.bin`、`art.bin`、`bootloader.bin`、`firmware.bin`，至少存两份。
2. 接好 3.3V TTL 串口；**不要把 5V 接到路由器串口**。
3. 先在 U-Boot 中把 `initramfs-kernel.bin` 下载到 RAM 并启动，不擦写 Flash。
4. 确认板名、以太网、Reset、LED、2.4G 和 5G。
5. 仅在 RAM 启动验证通过后，考虑写入 `firmware` 分区。
6. 首次持久刷写不要保留其他机型配置。

不同 U-Boot 的 TFTP 地址和命令可能不同，不在不知道串口实际输出时硬编码命令。先执行 `help`、`printenv` 并保存串口日志。

若当前已运行 OpenWrt 且分区完全相同，可在有救砖条件下执行：

```bash
sysupgrade -n openwrt-ath79-generic-xiaomi_mi-router-4-pro-r1350-squashfs-sysupgrade.bin
```

## 8. 启动后验证

```bash
uname -a
cat /proc/mtd
cat /tmp/sysinfo/board_name
lspci -nnk
logread | grep -iE 'ath10k|qca|firmware|board|cal|eeprom|otp|pci'
dmesg | grep -iE 'ath10k|qca|firmware|board|cal|eeprom|otp|pci'
iw phy
wifi status
```

预期：

- `uname -a` 包含 `nyarime@naixi.net`；
- 板名为 `xiaomi,mi-router-4-pro-r1350`；
- ART 位于 `0x60000`、长度 `0x10000` 且只读；
- PCI 设备为 `168c:0056`；
- QCA9888 由 ath10k-ct 驱动；
- 日志没有 pre-calibration/NVMEM 读取失败；
- 5 GHz 不再需要贴近天线才能搜索到。

建议在固定位置用同一手机分别测原厂与 OpenWrt 的 RSSI、吞吐和稳定性，不要只看“能否搜到”。

## 9. 回退与救砖

最安全的回退是只恢复朋友备份中的原厂 `firmware.bin`：

```text
目标 Flash 偏移：0x200000
最大范围：0xE00000
```

不要用别人设备的 ART/Bdata/Nvram。若必须用编程器恢复整片，只能使用这台设备自己的 `all.bin`，写完后重新读取整片并比较 SHA256。

原厂关键备份 SHA256 记录在交付包 `ORIGINAL-BACKUP-SHA256.txt`；原始私有备份本身不放进可公开下载的交付包。

## 10. 当前验证状态

已完成：

- OpenWrt 完整编译成功；
- Nyarc 可识别并解出 kernel、SquashFS rootfs 和 overlay；
- 设备元数据、镜像大小、QCA9888 PCI ID、ART偏移、分区范围、GPIO、LAN/WAN映射静态核验；
- sysupgrade 镜像约 6.88 MiB，小于 14 MiB firmware 分区；
- 内核身份确认是 `nyarime@naixi.net`。

尚未完成：

- R1350 实体机 RAM 启动；
- 交换机端口逐口验证；
- 5 GHz 发射功率/RSSI/吞吐实测；
- 持久刷写和原厂回退实测。

因此首版必须标记为 **TEST / 未真机验证**，不能当作正式稳定版批量刷写。
