前言

平民法拉利,8072A + 双 10G RJ45 只要 500。要出给群友了,记录一下怎么折腾的

  • 安全千万条,备份第一条。刷机不规范,亲人两行泪。
  • 相关资源

配置

SoC 无线 存储 网口 电源
IPQ8072A AX3600(非大陆) 1GB + 4GB + USB 3.0*2 10GbE*2 + 1GbE*4 12V / 3.33A
  • SoC:IPQ8072A,四核 A53 2.2GHz 14nm

  • 2.4GHz:4x4 MIMO 40MHz 1147Mbps

    • 基带芯片:SoC 集成
    • RF 芯片:QCN5024
    • FEM 芯片:SKY85347-11*4
    • 天线:4.5dBi 增益 PCB 内置天线*4
  • 5GHz:4x4 MIMO 80MHz 2402Mbps / 2x2 MIMO 160MHz 2402Mbps(原厂固件用 160MHz 需要 WAN 口 IP 非中国大陆)

    • 基带芯片:SoC 集成
    • RF 芯片:QCN5054
    • FEM 芯片:SKY85755-11*4
    • 天线:5.2dBi 增益 PCB 内置天线*4
  • 网口

    • 10GbE*2: AQR113C (PHY) *2
    • 1GbE*4: QCA8075 (PHY)
  • 内存:512MB*2 DDR3 1600

  • 闪存:8MB SPI NOR(ART、MIBIB、CDT、U-Boot 等启动引导分区)+ 4GB eMMC NAND(固件操作系统分区 kernel 和 rootfs 等)

    • MTD 分区表

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      dev:    size   erasesize  name
      mtd0: 00050000 00010000 "0:SBL1"
      mtd1: 00010000 00010000 "0:MIBIB"
      mtd2: 00180000 00010000 "0:QSEE"
      mtd3: 00010000 00010000 "0:DEVCFG"
      mtd4: 00010000 00010000 "0:APDP"
      mtd5: 00040000 00010000 "0:RPM"
      mtd6: 00010000 00010000 "0:CDT"
      mtd7: 00020000 00010000 "0:APPSBLENV"
      mtd8: 00100000 00010000 "0:APPSBL"
      mtd9: 00040000 00010000 "0:ART"
      mtd10: 00080000 00010000 "0:ETHPHYFW"
      mtd11: 003d0000 00010000 "reserved"
    • MMC 分区表

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      Partition Map for MMC device 0  --   Partition Type: EFI

      Part Start LBA End LBA Name
      Attributes
      Type GUID
      Partition GUID
      1 0x00000022 0x00008021 "0:HLOS" attrs: 0x0000000000000000 type: b51f2982-3ebe-46de-8721-ee641e1f9997 guid: 1a373c3c-588e-eff4-5182-68ad83e0e62e
      2 0x00008022 0x00010021 "0:HLOS_1" attrs: 0x0000000000000000 type: a71da577-7f81-4626-b4a2-e377f9174525 guid: 7d35f31d-0980-2220-edfd-6228595b79d2
      3 0x00010022 0x00018021 "0:HLOS_2" attrs: 0x0000000000000000 type: 3e972198-336f-11ea-baa1-52540063a6b7 guid: 964e7e67-6666-7303-312a-291b757640e8
      4 0x00018022 0x00118021 "rootfs" attrs: 0x0000000000000000 type: 98d2248d-7140-449f-a954-39d67bd6c3b4 guid: 2a213133-47f8-80a1-5d66-1d565a2ec756
      5 0x00118022 0x00218021 "rootfs_1" attrs: 0x0000000000000000 type: 5647b280-dc2a-485d-9913-cf53ac40fa32 guid: 77f91baf-6750-e138-dbe5-434eaeded6dd
      6 0x00218022 0x00318021 "rootfs_2" attrs: 0x0000000000000000 type: cd26dc90-3370-11ea-baa1-52540063a6b7 guid: 8530d17c-21e3-f82b-12ec-87fd429a600e
      7 0x00318022 0x0031a021 "0:WIFIFW" attrs: 0x0000000000000000 type: 5911fd72-35be-424e-975d-69c957ad3a43 guid: 9420c4b0-ba83-2b38-6ba6-2839be048c92
      8 0x0031a022 0x00322021 "reserved" attrs: 0x0000000000000000 type: 8da63339-0007-60c0-c436-083ac8230908 guid: e590e607-3410-795e-afbc-888e9b2ea17b
      9 0x00322022 0x0073d821 "rootfs_data" attrs: 0x0000000000000000 type: ab1760da-a8bb-4d6f-98d2-9ad3ab9009cd guid: d1402149-3e8e-0709-99d9-170bfab2f66c
  • 额外

    • USB:5Gbps Type A *2
    • 按键:Reset*1 + WPS*1 + 开关*1
    • 电源:12V / 3.33A
    • 尺寸:250mm * 180mm * 48mm
    • 重量:1.9kg

image

刷机

  • 这机器的 eMMC 有 4GB,为 A / B 双分区,两个分区里的内容一模一样。我们要刷机一般是切到分区 1,然后把 OpenWrt 写到分区 0,也就是 /dev/mmcblk0p2/dev/mmcblk0p5

    1
    2
    3
    4
    5
    6
    7
    8
    9
    /dev/mmcblk0p1 --- "0:HLOS" --- 16MB --- 系统 0 kernel 分区
    /dev/mmcblk0p2 --- "0:HLOS_1" --- 16MB --- 系统 1 kernel 分区
    /dev/mmcblk0p3 --- "0:HLOS_2" --- 16MB --- 系统 2 kernel 分区(空的,官方未刷入固件,也无法引导到该分区,忽视)
    /dev/mmcblk0p4 --- "rootfs" --- 512MB --- 系统 0 rootfs 分区
    /dev/mmcblk0p5 --- "rootfs_1" --- 512MB --- 系统 1 rootfs 分区
    /dev/mmcblk0p6 --- "rootfs_2" --- 512MB --- 系统 2 rootfs 分区(空的,官方未刷入固件,也无法引导到该分区,忽视)
    /dev/mmcblk0p7 --- "0:WIFIFW" --- 4MB --- 无线的 Firmware 分区
    /dev/mmcblk0p8 --- "reserved" --- 16MB --- 保留分区(没用的)
    /dev/mmcblk0p9 --- "rootfs_data" --- 2.1GB --- rootfs 的数据分区,多个官方系统共用的数据分区,目前 OpenWrt 固件没有使用该分区
  • 刷机有 TTL 和免拆两种刷法,只要「不动原厂 U-Boot」 基本上就是刷不死

  • 但是如果想免拆刷,不免要动 MTD 分区。比如刷 Lean 的不死 U-Boot,肯定得写 mtd8 分区,操作不谨慎就有概率砖。而且作为这台机器唯一的第三方 U-Boot,它说自己支持双分区切换,实则不能。想刷回原厂 U-Boot,就只能在 OpenWrt 下写 mtd8 分区。但是很多 OpenWrt 系统默认 MTD 分区为只读,想写就得装 kmod-mtd-rw,又是一个可能写坏 MTD 分区的坑点。免拆涉及 MTD 分区的写入都得谨慎,出错了就得上夹子咯

  • 当然如果你不想回原厂系统的话,以上其实无所谓。但是如果想双系统切换的话,尽量还是 TTL 吧,不动原厂 U-Boot 基本就是刷不死。当然也可以免拆刷,做好备份万一给 MTD 分区刷寄了,拿编程器刷回去呗

刷 QSDK 和万兆驱动

Ref: https://github.com/0x5826/QNAP-QHora-301w-Guide

  1. 开启 SSH
    在开启路由器可以正常进系统的状态下,长按路由器后的 WPS 键,直到听到第二声“嘟”松开(大约 12 秒)就 OK

  2. 连接路由器后台

    • 端口:22200
    • 用户名:admin
    • 密码:Web 后台登陆密码
  3. 将启动分区切换到分区 1

    1
    sudo fw_setenv current_entry 1
  4. 重启

    1
    sudo reboot
  5. 检查确实切换到分区 1

    1
    sudo fw_printenv -n current_entry

    如果为 0 就重复前面操作

  6. 上传 QSDK 的 kernel.binrootfs.bin/tmp

  7. 重中之重!!!:备份整个 MTD 和 eMMC 分区

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sudo dd if=/dev/mtd0 of=/tmp/mtd0.bin
    sudo dd if=/dev/mtd1 of=/tmp/mtd1.bin
    sudo dd if=/dev/mtd2 of=/tmp/mtd2.bin
    sudo dd if=/dev/mtd3 of=/tmp/mtd3.bin
    sudo dd if=/dev/mtd4 of=/tmp/mtd4.bin
    sudo dd if=/dev/mtd5 of=/tmp/mtd5.bin
    sudo dd if=/dev/mtd6 of=/tmp/mtd6.bin
    sudo dd if=/dev/mtd7 of=/tmp/mtd7.bin
    sudo dd if=/dev/mtd8 of=/tmp/mtd8.bin
    sudo dd if=/dev/mmcblk0p1 of=/tmp/mmcblk0p1
    sudo dd if=/dev/mmcblk0p4 of=/tmp/mmcblk0p4
    sudo dd if=/dev/mmcblk0p7 of=/tmp/mmcblk0p7
    sudo dd if=/dev/mmcblk0p9 of=/tmp/mmcblk0p9

    然后把 mtd0 - 8.binmmcblk0p1mmcblk0p4mmcblk0p47mmcblk0p9 下到本地妥善保存

  8. 将 QSDK 刷入 0 分区

    1
    2
    3
    4
    5
    sudo dd if=/tmp/kernel.bin of=/dev/mmcblk0p1
    sudo dd if=/tmp/rootfs.bin of=/dev/mmcblk0p4
    sudo fw_setenv current_entry 0
    sudo fw_setenv boot_0 good
    sudo reboot

    IP:192.168.1.1

    用户名:root

    密码:password

  9. 上传 10G PHY 驱动 AQR_ethphyfw_5.6.7.mbn/tmp

  10. 刷入 10G PHY 驱动

    1
    2
    3
    4
    5
    6
    # 抹除原 ethfw 分区 mtd10 的数据
    mtd erase /dev/mtd10
    # 刷入驱动文件
    mtd -n write /tmp/AQR_ethphyfw_5.6.7.mbn /dev/mtd10
    # 修改 bootcmd 环境变量
    fw_setenv bootcmd "aq_load_fw 0; aq_load_fw 8; bootipq"
  11. 检查是否刷入成功

    1
    fw_printenv

    如果有 bootcmd=aq_load_fw 0; aq_load_fw 8; bootipq 就没问题

免拆和拆机 TTL 刷机

免拆刷机

  1. 在 QSDK 下,上传 Lean 的 U-Boot uboot.bin/tmp

    该 U-Boot 标称自己支持分区切换,实则不行

  2. 刷入 U-Boot(请确保自己已经备份了整个 MTD 分区!!!

    1
    mtd write /tmp/uboot.bin /dev/mtd8
  3. 路由器断电按住 RESET 键,插上电源,等待能访问 http://192.168.1.1 时松手

    • 如果是 QWRT,直接刷就行
    • 其他固件的话,按照以下方式刷入
      1. 刷入 initramfs-uImage.itb 固件:官方 KERNEL 固件
      2. 在 Web 后台直接升级想要刷入的 Sysupgrade 固件即可(不保留配置)
        • IP: 192.168.1.1
        • 用户名:root
        • 密码:无
  4. 如果免拆刷机想要回原厂固件的话,按以下操作进行(请确保自己已经备份了整个 MTD 分区!!!

    1. 临时将 MTD 分区改成可写

      1
      2
      3
      opkg update
      opkg install kmod-mtd-rw
      insmod mtd-rw i_want_a_brick=1

      如果模块路径不自动识别:

      1
      insmod /lib/modules/$(uname -r)/mtd-rw.ko i_want_a_brick=1
    2. 上传之前备份的 mtd8.bin/tmp

    3. 写入 mtd8 分区

      1
      2
      mtd unlock /dev/mtd8 || true
      mtd write /tmp/mtd8.bin /dev/mtd8
    4. 切换为分区 0 回到原厂固件

      1
      2
      3
      fw_setenv current_entry 1
      fw_setenv boot_1 good
      reboot

      如果你开不了机了,请左转拆机上编程器,拆开外壳迎面的右下角这颗闪存就是image

    5. 原厂固件切回 OpenWrt

      1
      2
      3
      fw_setenv current_entry 0
      fw_setenv boot_0 good
      reboot

TTL 刷机

需要设备:USB 转 TTL 模块(比如 CH340)+ 母对母杜邦线*3

  1. 拧下螺丝:四个脚垫下均有螺丝,加上中间一颗和标签下面一颗,一共 6 颗

  2. 拆开外壳:外壳由卡扣固定,不是很紧

  3. 拆开外壳迎面的右下角,就是 TTL 针脚image

  4. 接中间三根,从左到右依次是:TX、GND、RX,对应 TTL 转 USB 模块的 RXD、GND、TXDimage

  5. TTL 转 USB 模块切换到 3.3V,MobaXterm 软件新建 Serial Session

    • Serial port:TTL 转 USB 模块的 COM 口
    • Speed:115200
    • Data bits:8
    • Stop bits:1
    • Parity:None
    • Flow control:None

    image

  6. 路由器的千兆口 2 - 4 随便接一个到电脑上,电脑网卡设为 192.168.10.2/24。并在 MobaXterm 上打开 TFTP Server,然后把 initramfs-uImage.itb 固件丢到指定目录:官方 KERNEL 固件,假设固件名为 openwrt-25.12.4-qualcommax-ipq807x-qnap_301w-initramfs-uImage.itbimage

  7. 路由器通电,在 MobaXterm 会话出现字符后一直按空格键,中断启动

  8. 设置并保存 TFTP 相关环境变量

    1
    2
    3
    setenv serverip 192.168.10.2
    setenv ipaddr 192.168.10.10
    saveenv
  9. 刷入initramfs-uImage.itb 固件

    1
    tftpboot openwrt-25.12.4-qualcommax-ipq807x-qnap_301w-initramfs-uImage.itb
  10. 重启

    1
    bootm
  11. 在 Web 后台直接升级想要刷入的 Sysupgrade 固件即可(不保留配置)

    • IP: 192.168.1.1
    • 用户名:root
    • 密码:无
  12. 切换为分区 0 回到原厂固件

    1
    2
    3
    fw_setenv current_entry 1
    fw_setenv boot_1 good
    reboot
  13. 原厂固件切回 OpenWrt

    1
    2
    3
    fw_setenv current_entry 0
    fw_setenv boot_0 good
    reboot

可选:编译 LibWrt 固件

  1. 安装依赖

    1
    2
    3
    4
    5
    6
    7
    8
    sudo apt update -y
    sudo apt full-upgrade -y
    sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
    bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
    git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
    libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libfuse-dev libssl-dev libtool lrzsz \
    genisoimage msmtp nano ninja-build p7zip p7zip-full patch pkgconf python3 python3-pip libpython3-dev qemu-utils \
    rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
  2. 拉取源码

    1
    2
    git clone --depth 1 --single-branch https://github.com/LiBwrt-op/openwrt-6.x.git libwrt
    cd libwrt
  3. 更新 feeds

    1
    ./scripts/feeds update -a && ./scripts/feeds install -a
  4. 选择
    Target System:Qualcomm Atheros 802.11ax WiSoC-s
    Subtarget:Qualcomm Atheros IPQ807x
    Target Profile:QNAP 301w

    1
    make menuconfig
  5. 下载源码包

    1
    make download -j16
  6. 编译

    1
    make -j$(nproc) V=s

    如果报错,可以单线程重试定位问题:

    1
    make -j1 V=s
  7. 编译结果在 libwrt/bin/targets/qualcommax/ipq807x/

结语

  • 这台机器唯一的坑就是 Lean 的不死 U-Boot 是切不回原厂分区的
  • 不用原厂系统的不用管
  • 想双系统的话就别动原厂 U-Boot,按照上面方法操作完,以后直接不保留配置升级 Sysupgrade 固件即可