immortalwrt/package/boot
Raymond Wang 0ac6d2e36b
ramips: add support for Xiaomi Mi Router CR660x series
Xiaomi Mi Router CR6606 is a Wi-Fi6 AX1800 Router with 4 GbE Ports.
Alongside the general model, it has three carrier customized models:
CR6606 (China Unicom), CR6608 (China Mobile), CR6609 (China Telecom)

Specifications:
- SoC: MediaTek MT7621AT
- RAM: 256MB DDR3 (ESMT M15T2G16128A)
- Flash: 128MB NAND (ESMT F59L1G81MB)
- Ethernet: 1000Base-T x4 (MT7530 SoC)
- WLAN: 2x2 2.4GHz 574Mbps + 2x2 5GHz 1201Mbps (MT7905DAN + MT7975DN)
- LEDs: System (Blue, Yellow), Internet (Blue, Yellow)
- Buttons: Reset, WPS
- UART: through-hole on PCB ([VCC 3.3v](RX)(GND)(TX) 115200, 8n1)
- Power: 12VDC, 1A

Jailbreak Notes:
1. Get shell access.
   1.1. Get yourself a wireless router that runs OpenWrt already.
   1.2. On the OpenWrt router:
      1.2.1. Access its console.
      1.2.2. Create and edit
             /usr/lib/lua/luci/controller/admin/xqsystem.lua
             with the following code (exclude backquotes and line no.):
```
     1  module("luci.controller.admin.xqsystem", package.seeall)
     2
     3  function index()
     4      local page   = node("api")
     5      page.target  = firstchild()
     6      page.title   = ("")
     7      page.order   = 100
     8      page.index = true
     9      page   = node("api","xqsystem")
    10      page.target  = firstchild()
    11      page.title   = ("")
    12      page.order   = 100
    13      page.index = true
    14      entry({"api", "xqsystem", "token"}, call("getToken"), (""),
103, 0x08)
    15  end
    16
    17  local LuciHttp = require("luci.http")
    18
    19  function getToken()
    20      local result = {}
    21      result["code"] = 0
    22      result["token"] = "; nvram set ssh_en=1; nvram commit; sed -i
's/channel=.*/channel=\"debug\"/g' /etc/init.d/dropbear; /etc/init.d/drop
bear start;"
    23      LuciHttp.write_json(result)
    24  end
```
      1.2.3. Browse http://{OWRT_ADDR}/cgi-bin/luci/api/xqsystem/token
             It should give you a respond like this:
             {"code":0,"token":"; nvram set ssh_en=1; nvram commit; ..."}
             If so, continue; Otherwise, check the file, reboot the rout-
             er, try again.
      1.2.4. Set wireless network interface's IP to 169.254.31.1, turn
             off DHCP of wireless interface's zone.
      1.2.5. Connect to the router wirelessly, manually set your access
             device's IP to 169.254.31.3, make sure
             http://169.254.31.1/cgi-bin/luci/api/xqsystem/token
             still have a similar result as 1.2.3 shows.
   1.3. On the Xiaomi CR660x:
        1.3.1. Login to the web interface. Your would be directed to a
               page with URL like this:
               http://{ROUTER_ADDR}/cgi-bin/luci/;stok={STOK}/web/home#r-
               outer
        1.3.2. Browse this URL with {STOK} from 1.3.1, {WIFI_NAME}
               {PASSWORD} be your OpenWrt router's SSID and password:
               http://{MIROUTER_ADDR}/cgi-bin/luci/;stok={STOK}/api/misy-
               stem/extendwifi_connect?ssid={WIFI_NAME}&password={PASSWO-
               RD}
               It should return 0.
        1.3.3. Browse this URL with {STOK} from 1.3.1:
               http://{MIROUTER_ADDR}/cgi-bin/luci/;stok={STOK}/api/xqsy-
               stem/oneclick_get_remote_token?username=xxx&password=xxx&-
               nonce=xxx
   1.4. Before rebooting, you can now access your CR660x via SSH.
        For CR6606, you can calculate your root password by this project:
        https://github.com/wfjsw/xiaoqiang-root-password, or at
        https://www.oxygen7.cn/miwifi.
        The root password for carrier-specific models should be the admi-
        nistration password or the default login password on the label.
        It is also feasible to change the root password at the same time
        by modifying the script from step 1.2.2.
        You can treat OpenWrt Router however you like from this point as
        long as you don't mind go through this again if you have to expl-
        oit it again. If you do have to and left your OpenWrt router unt-
        ouched, start from 1.3.
2. There's no official binary firmware available, and if you lose the
   content of your flash, no one except Xiaomi can help you.
   Dump these partitions in case you need them:
   "Bootloader" "Nvram" "Bdata" "crash" "crash_log"
   "firmware" "firmware1" "overlay" "obr"
   Find the corespond block device from /proc/mtd
   Read from read-only block device to avoid misoperation.
   It's recommended to use /tmp/syslogbackup/ as destination, since files
   would be available at http://{ROUTER_ADDR}/backup/log/YOUR_DUMP
   Keep an eye on memory usage though.
3. Since UART access is locked ootb, you should get UART access by modify
   uboot env. Otherwise, your router may become bricked.
   Excute these in stock firmware shell:
    a. nvram set boot_wait=on
    b. nvram set bootdelay=3
    c. nvram commit
   Or in OpenWrt:
    a. opkg update && opkg install kmod-mtd-rw
    b. insmod mtd-rw i_want_a_brick=1
    c. fw_setenv boot_wait on
    d. fw_setenv bootdelay 3
    e. rmmod mtd-rw

Migrate to OpenWrt:
 1. Transfer squashfs-firmware.bin to the router.
 2. nvram set flag_try_sys1_failed=0
 3. nvram set flag_try_sys2_failed=1
 4. nvram commit
 5. mtd -r write /path/to/image/squashfs-firmware.bin firmware

Additional Info:
 1. CR660x series routers has a different nand layout compared to other
    Xiaomi nand devices.
 2. This router has a relatively fresh uboot (2018.09) compared to other
    Xiaomi devices, and it is capable of booting fit image firmware.
    Unfortunately, no successful attempt of booting OpenWrt fit image
    were made so far. The cause is still yet to be known. For now, we use
    legacy image instead.

Signed-off-by: Raymond Wang <infiwang@pm.me>
(cherry picked from commit 3343ca7e68)
2022-08-30 10:45:30 +08:00
..
arm-trusted-firmware-bcm63xx arm-trusted-firmware-bcm63xx: add ATF for Broadcom devices 2022-01-03 14:28:13 +01:00
arm-trusted-firmware-mediatek arm-trusted-firmware-mediatek: bring back package 2021-02-24 11:02:04 +00:00
arm-trusted-firmware-mvebu arm-trusted-firmware-mvebu: pass commit ids to a3700-utils/mv-ddr-marvell 2021-01-30 14:46:32 +01:00
arm-trusted-firmware-rockchip atf-rockchip: update to 2.3 2020-07-28 15:52:44 +02:00
arm-trusted-firmware-rockchip-vendor arm-trusted-firmware-rockchip-vendor: workaround for VARIANT issue 2021-08-13 00:36:10 +08:00
arm-trusted-firmware-sunxi arm-trusted-firmware-sunxi: Replace with official ARM version 2019-01-13 17:35:14 +01:00
arm-trusted-firmware-tools arm-trusted-firmware-tools: add patch to pass LDFLAGS 2021-02-10 19:19:18 +00:00
at91bootstrap at91bootstrap: Add PKG_MIRROR_HASH to fix download 2021-01-18 22:10:03 +01:00
fconfig treewide: unify OpenWrt hosted source via @OPENWRT 2021-02-05 12:00:24 -10:00
grub2 x86: grub2: search for the "kernel" filesystem on all disks 2022-04-21 16:43:31 +08:00
imx-bootlets treewide: clean up download hashes 2016-12-16 22:39:22 +01:00
kexec-tools treewide: use new extra_command function for init 2020-11-07 19:42:37 +08:00
kobs-ng kobs-ng: add header for integer definitions 2017-11-16 22:56:54 +01:00
mt7623n-preloader mediatek: mt7623n-preloader: add preloader for Banana Pi R64 2020-09-19 13:39:29 +01:00
tfa-layerscape tfa-layerscape: build fiptool again 2021-02-21 13:55:30 +01:00
uboot-at91 uboot-at91: fix dtc compilation on host gcc 10 2021-08-28 15:48:08 +02:00
uboot-bcm4908 uboot-bcm4908: use "xxd" from staging_dir 2022-03-15 18:55:08 +01:00
uboot-envtools ramips: add support for Xiaomi Mi Router CR660x series 2022-08-30 10:45:30 +08:00
uboot-fritz4040 ipq40xx: add support for AVM FRITZ!Repeater 1200 2019-10-23 01:17:28 +02:00
uboot-imx6 uboot-imx6: define 'BUILD_DEVICES' for Toradex Apalis 2021-04-18 12:05:51 +02:00
uboot-kirkwood kirkwood: add support for Seagate BlackArmor NAS220 2020-12-22 19:11:50 +01:00
uboot-lantiq uboot-lantiq: danube: fix hanging lzma kernel uncompression #2 2021-11-27 23:00:31 +01:00
uboot-layerscape uboot-layerscape: fix dtc compilation on host gcc 10 2021-08-28 15:48:08 +02:00
uboot-mediatek mediatek: update uboot to latest patchset provided by MTK 2020-11-04 20:32:52 +01:00
uboot-mvebu uboot-mvebu: update to v2021.01 2021-01-30 14:46:32 +01:00
uboot-mxs uboot-mxs: bump to v2020.04 2020-06-03 16:49:28 +02:00
uboot-omap omap: update uboot to v2020.04 2020-10-04 03:45:21 +02:00
uboot-oxnas uboot-oxnas: fix memory leak in tool mkox820crc 2020-01-15 23:15:19 +01:00
uboot-ramips ramips: add support for RAVPower RP-WD009 2020-06-29 12:24:01 +02:00
uboot-rockchip uboot-rockchip: drop CONFIG_IDENT_STRING 2022-07-12 18:55:17 +08:00
uboot-sunxi Merge Official Source 2022-08-30 10:39:29 +08:00
uboot-tegra uboot-tegra: bump to 2020.04 2020-12-22 18:59:10 +01:00
uboot-zynq uboot-zynq: fix dtc compilation on host gcc 10 2020-12-13 16:12:45 +01:00