京东云AX6000百里单分区刷机+回原厂+TTL救砖教程 文章来源
https://github.com/lgs2007m/Actions-OpenWrt/blob/main/ 刷机教程 / 京东云 AX6000 百里单分区刷机 %2B 回原厂 %2BTTL 救砖教程 20240405.md
Uboot说明
mt798x 的 fip 分区实际上包含 bl31+uboot,为了方便理解,这里将 fip 直接称为 uboot。
本教程使用的是我基于 hanwckf 大佬 bl-mt798x 仓库修改编译的 bl2、uboot 和 gpt,固件推荐使用 immortalwrt-mt798x 仓库编译的闭源单分区固件。
大雕 lean 的 QWRT 也是闭源单分区固件,也可以使用。
ImmortalWrt 天灵大佬基于 hanwckf 大佬 bl-mt798x 的 uboot-202206 源码修改,独家添加 DHCP 支持,也制作了 bl2、单分区 uboot 和 gpt 分区表,需要的可以下载:
https://firmware.download.immortalwrt.eu.org/uboot/mediatek/
大佬的单分区gpt分区表如下:
Number Start (sector) End (sector) Size Name
1 8192 9215 512K u-boot-env
2 9216 13311 2048K factory
3 13312 21503 4096K fip
4 90112 131071 20.0M config
5 131072 262143 64.0M kernel
6 262144 1490943 600.0M rootfs
为了和主线对齐,增加了一个 config 分区,fip 增加到了 4M。
rootfs 后面的空间没有使用,需要自行分区然后格式化。
准备刷机文件和工具软件
SSH 工具软件:Xshell https://pan.lanzoui.com/b0f19ry9g 或者 putty https://www.423down.com/11333.html
文件传输工具软件:WinSCP https://www.ghxi.com/winscp.html
下载仓库中的刷机文件压缩包,里面包含了需要的刷机文件。
0.开SSH
百里没有软破解 SSH,是通过在原厂固件升级官方的原生 OP 获取 SSH 权限再刷第三方 OP 的。
在原厂系统下,升级原生 OP:
openwrt-re-cp-03-4.1.0.r4005-1287bf0122329d5c3acbb7198e04b1e4.bin
注意:升级原生 OP 官方宣传会失去保修。
重启后,SSH 登录 192.168.68.1,端口 22,用户名 root,没有密码。
输入命令删除这两个环境变量:
fw_setenv jdc_crc_version
fw_setenv jdc_opp_version
这里简单看下原厂分区的信息,blkid 命令可以直接使用,sgdisk 和 lsblk 命令需要安装,不想了解的可以略过。
可以看到原厂有两个系统分区 kernel、rootfs 和 kernel2、rootfs2,即双分区,共用一个 50MB 的 rootfs_data。
rootfs、rootfs2 都只有 50MB,因此原厂双分区分区表刷固件的大小不能大于 50MB。
因为原厂使用旧的 json 来制作 gpt 分区表,所以 gpt 分区会在 blkid 第一个分区显示出来,即 PMBR 分区。
同时下面的分区对应分区设备号相比 RAX3000M eMMC、GL-MT6000 的分区设备号会加 1。
比如 RAX3000M eMMC 的 fip 分区的设备号是 mmcblk0p3,百里的 fip 分区设备号则是 mmcblk0p4。
单分区 gpt 分区表和 RAX3000M eMMC、GL-MT6000 都是使用新版 json 来制作,gpt 分区不会显示出来。
这个是否显示 gpt 分区和设备号加 1,不影响使用,系统是读取 PARTLABEL 来读写的。
root@OpenWrt:~# blkid
/dev/mmcblk0p1: PTTYPE="PMBR"
/dev/mmcblk0p2: PARTLABEL="u-boot-env" PARTUUID="19a4763a-6b19-4a4b-a0c4-8cc34f4c2ab9"
/dev/mmcblk0p3: PARTLABEL="factory" PARTUUID="8142c1b2-1697-41d9-b1bf-a88d76c7213f"
/dev/mmcblk0p4: PARTLABEL="fip" PARTUUID="18de6587-4f17-4e08-a6c9-d9d3d424f4c5"
/dev/mmcblk0p5: PARTLABEL="kernel" PARTUUID="971f7556-ef1a-44cd-8b28-0cf8100b9c7e"
/dev/mmcblk0p6: TYPE="squashfs" PARTLABEL="rootfs" PARTUUID="309a3e76-270b-41b2-b5d5-ed8154e7542b"
/dev/mmcblk0p7: PARTLABEL="kernel2" PARTUUID="9c8e460f-7160-4c25-a420-e7deeb10d5d3"
/dev/mmcblk0p8: TYPE="squashfs" PARTLABEL="rootfs2" PARTUUID="508b8f82-164c-4898-8edc-adaa59438cd4"
/dev/mmcblk0p9: LABEL="rootfs_data" UUID="ea5ae1d2-cdc2-40c9-bada-0a9c0d8f63a6" BLOCK_SIZE="1024" TYPE="ext4" PARTLABEL="rootfs_data" PARTUUID="dd18c072-adb3-412b-bf97-37617b01adf3"
/dev/mmcblk0p10: UUID="4f3e32d7-cf18-40a9-a42d-0afa648c1513" BLOCK_SIZE="1024" TYPE="ext4" PARTLABEL="log" PARTUUID="2d18c070-adb6-412b-bf90-37617b01adf5"
/dev/mmcblk0p11: UUID="fac0a627-0346-4883-bea5-f0aefccb31aa" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="plugin" PARTUUID="3d18c075-adb0-412b-bf92-37617b01adf6"
/dev/mmcblk0p12: TYPE="swap" PARTLABEL="swap" PARTUUID="4d18c079-adb2-412b-bf93-37617b01adf7"
/dev/mmcblk0p13: UUID="a10bd4dd-7f44-4760-a1e9-51a71442922a" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="storage" PARTUUID="5d18c072-adb3-412b-bf95-37617b01adf8"
root@OpenWrt:~# sgdisk -p /dev/mmcblk0
Warning! Main partition table overlaps the first partition by 34 blocks!
You will need to delete this partition or resize it in another utility.
Disk /dev/mmcblk0: 241664000 sectors, 115.2 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 2BD17853-102B-4500-AA1A-8A21D4D7984D
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 240615424
Partitions will be aligned on 1024-sector boundaries
Total free space is 8158 sectors (4.0 MiB)
Number Start (sector) End (sector) Size Code Name
2 8192 9215 512.0 KiB 8300 u-boot-env
3 9216 13311 2.0 MiB 8300 factory
4 13312 17407 2.0 MiB 8300 fip
5 17408 50175 16.0 MiB 8300 kernel
6 50176 152575 50.0 MiB 8300 rootfs
7 152576 185343 16.0 MiB 8300 kernel2
8 185344 287743 50.0 MiB 8300 rootfs2
9 287744 390143 50.0 MiB 8300 rootfs_data
10 390144 524287 65.5 MiB 8300 log
11 524288 2621439 1024.0 MiB 8300 plugin
12 2621440 4718591 1024.0 MiB 8300 swap
13 4718592 240615424 112.5 GiB 8300 storage
root@OpenWrt:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 115.2G 0 disk
├─mmcblk0p1 179:1 0 17K 0 part
├─mmcblk0p2 179:2 0 512K 0 part
├─mmcblk0p3 179:3 0 2M 0 part
├─mmcblk0p4 179:4 0 2M 0 part
├─mmcblk0p5 179:5 0 16M 0 part
├─mmcblk0p6 179:6 0 50M 0 part
├─mmcblk0p7 179:7 0 16M 0 part
├─mmcblk0p8 259:0 0 50M 0 part /rom
├─mmcblk0p9 259:1 0 50M 0 part /overlay
├─mmcblk0p10 259:2 0 65.5M 0 part /log
├─mmcblk0p11 259:3 0 1G 0 part /opt
├─mmcblk0p12 259:4 0 1G 0 part [SWAP]
└─mmcblk0p13 259:5 0 112.5G 0 part /mnt/mmcblk0p13
mmcblk0boot0 179:8 0 4M 1 disk
mmcblk0boot1 179:16 0 4M 1 disk
1. 备份原厂分区
只需要备份到 mmcblk0p12 swap 即可,最后一个 mmcblk0p13 storage 分区太大不备份了。
因为 plugin、swap 分区都有 1G,比较大,所以备份到 /mnt/mmcblk0p13 中,然后使用 WinScp 登录再下载下来。
WinScp 软件登录路由,协议 SCP,IP 192.168.68.1,端口 22。
WinScp 下载大文件提示主机超过 15 秒无通信,需要点击高级,高级站点设置 - 连接 去掉勾选“优化连接缓冲大小”,再点击登录。
提示:bl2 在 /dev/mmcblk0boot0,uboot 在 fip 分区。
unpartitioned.bin 是全 0 的空白文件,是为了后面可以使用备份的分区按顺序直接合并得到一个 eMMC img 镜像。
除更换 eMMC,这个 img 基本用不到,不过还是全部分区备份为好。
注意:放在一起的命令可以全部复制粘贴、一次执行,下同,不再赘述。
直接复制下面全部命令,粘贴执行即可,等待执行完成:
dd if=/dev/mmcblk0boot0 of=/mnt/mmcblk0p13/mmcblk0boot0_bl2.bin conv=fsync
dd if=/dev/mmcblk0p1 of=/mnt/mmcblk0p13/mmcblk0p1_PMBR.bin conv=fsync
dd if=/dev/mmcblk0 bs=512 skip=34 count=8158 of=/mnt/mmcblk0p13/mmcblk0p1_unpartitioned.bin conv=fsync
dd if=/dev/mmcblk0p2 of=/mnt/mmcblk0p13/mmcblk0p2_u-boot-env.bin conv=fsync
dd if=/dev/mmcblk0p3 of=/mnt/mmcblk0p13/mmcblk0p3_factory.bin conv=fsync
dd if=/dev/mmcblk0p4 of=/mnt/mmcblk0p13/mmcblk0p4_fip.bin conv=fsync
dd if=/dev/mmcblk0p5 of=/mnt/mmcblk0p13/mmcblk0p5_kernel.bin conv=fsync
dd if=/dev/mmcblk0p6 of=/mnt/mmcblk0p13/mmcblk0p6_rootfs.bin conv=fsync
dd if=/dev/mmcblk0p7 of=/mnt/mmcblk0p13/mmcblk0p7_kernel2.bin conv=fsync
dd if=/dev/mmcblk0p8 of=/mnt/mmcblk0p13/mmcblk0p8_rootfs2.bin conv=fsync
dd if=/dev/mmcblk0p9 of=/mnt/mmcblk0p13/mmcblk0p9_rootfs_data.bin conv=fsync
dd if=/dev/mmcblk0p10 of=/mnt/mmcblk0p13/mmcblk0p10_log.bin conv=fsync
dd if=/dev/mmcblk0p11 of=/mnt/mmcblk0p13/mmcblk0p11_plugin.bin conv=fsync
dd if=/dev/mmcblk0p12 of=/mnt/mmcblk0p13/mmcblk0p12_swap.bin conv=fsync
执行完后使用 WinSCP 之类的软件登录路由器,到 /mnt/mmcblk0p13 下载下来保存到电脑。
注:/mnt/mmcblk0p13 里的 aiecpluginD、jdc_docker 文件夹里面是跑分的缓存数据。
如果不大,也可自行压缩后备份,刷机后直接恢复到 storage 分区,这样回原厂跑分直接用这些数据,可以更快恢复跑分。
太大就不建议备份,不要也无所谓,回原厂后重新缓存。
2. 刷 bl2 和单分区 uboot
百里的 bl2 和 uboot 是开启了 Secure Boot 验证的,需要把 bl2 和 uboot 所在 fip 分区一起替换掉,不能只替换 uboot!!!
因为有些数据洁癖,我直接将编译得到的 bl2 二进制文件尾部填充 0 扩大至 256KB,fip 尾部填充 0 至 2048KB。
这样刷文件就可直接覆盖有数据部分,和清空分区再刷是一样,所以文件看着有点大。
直接使用编译得到的原始文件也没问题,只是文件大小不一,原分区上可能有点多余数据不会被覆盖,这也不影响使用。
将 mt7986_jdcloud_re-cp-03-bl2_mod.bin 和 mt7986_jdcloud_re-cp-03-fip_mod.bin 上传 tmp 文件夹,SSH 输入命令验证 md5:
md5sum /tmp/mt7986_jdcloud_re-cp-03*_mod.bin
我这个 2024.04.05 版的 bl2、uboot,md5 值是这样:
root@OpenWrt:~# md5sum /tmp/mt7986_jdcloud_re-cp-03-*_mod.bin
ba6edf33d825811ddabc11b54312cccd /tmp/mt7986_jdcloud_re-cp-03-bl2_mod.bin
cc78be76b99ed27ed6e8a6f7cef112c2 /tmp/mt7986_jdcloud_re-cp-03-fip_mod.bin
核对 md5 正常后,输入命令刷写 bl2 和 uboot,命令全部复制一起执行:
ash
echo 0 > /sys/block/mmcblk0boot0/force_ro
dd if=/tmp/mt7986_jdcloud_re-cp-03-bl2_mod.bin of=/dev/mmcblk0boot0 conv=fsync
echo 1 > /sys/block/mmcblk0boot0/force_ro
dd if=/tmp/mt7986_jdcloud_re-cp-03-fip_mod.bin of=$(blkid -t PARTLABEL=fip -o device) conv=fsync
刷写完没有报错,则检查下分区的 md5 值,和我一样即可,不一样就重新刷,不能重启!!
md5sum /dev/mmcblk0boot0 && md5sum $(blkid -t PARTLABEL=fip -o device)
输出结果和我一样即可:
root@OpenWrt:~# md5sum /dev/mmcblk0boot0 && md5sum $(blkid -t PARTLABEL=fip -o device)
57b4fda67b6ef534f50fa5b7f1f15be4 /dev/mmcblk0boot0
cc78be76b99ed27ed6e8a6f7cef112c2 /dev/mmcblk0p4
到这里 bl2 和单分区 uboot 已经刷好了,不要重启,接着刷单分区 gpt 分区表。
注:如果是从带有一个 config 分区的 ImmortalWrt 单分区分区表刷这个单分区,这里验证 fip 分区的 md5 是不一样的。
因为 ImmortalWrt 的单分区的把原厂 2M 的 fip 扩大到了 4M,我这个分区表还是保持 fip 为 2M。
下面再刷我的这个 gpt 分区表之后,fip 分区会变为 2M,分区的 md5 就会和我的一样了。
天灵和大雕的刷机命令是直接使用偏移量,因为 fip 分区偏移量不变,所以不用管设备号。
我上面刷 uboot 的命令自动找 fip 分区所在设备号,也不用你管设备号,可以直接用。
更新 uboot 建议使用我教程的命令,或者直接进 uboot webui 里面更新即可。bl2 一般不需要再更新了。
3. 刷单分区 gpt 分区表
原生 OP 没有 sgdisk,刷单分区 gpt 分区表前,首先安装 sgdisk 以便后面编辑分区表。
将 sgdisk 文件夹里面的 sgdisk_1.0.6-1_aarch64_cortex-a53.ipk 上传 tmp 文件夹,然后 SSH 运行下面命令安装:
opkg install -d root /tmp/sgdisk_1.0.6-1_aarch64_cortex-a53.ipk
分区表文件夹中的 gpt 文件,rootfs512M 对应 rootfs 是 512MB 大小,依次类推。
这个 rootfs 就是固件 +overlay 的大小,overlay 近似是刷固件后剩余软件包空间大小,选择自己需要的 rootfs 大小的分区表即可。
因为刷分区表是改变了后面的分区的偏移量,所以后面分区的数据就不能识别了。
后面会讲到,如果要回原厂跑分,需要先恢复 log、plugin、swap,后面新建的最后一个 storage 分区也要格式化才能用。
上传你需要 rootfs 大小的 gpt 分区表文件到 tmp 文件夹,先验证 md5:
md5sum /tmp/jdcloud_re-cp-03_single-boot_rootfs*M_no-last-partition-gpt.bin
root@OpenWrt:~# md5sum /tmp/jdcloud_re-cp-03_single-boot_rootfs*M_no-last-partition-gpt.bin
234744da27ad54233bc3d528b05443a1 /tmp/jdcloud_re-cp-03_single-boot_rootfs512M_no-last-partition-gpt.bin
e120108dbfd143dc2b92d0ed8ad0e7f2 /tmp/jdcloud_re-cp-03_single-boot_rootfs1024M_no-last-partition-gpt.bin
514797957059d0a808a3ab53327d79c4 /tmp/jdcloud_re-cp-03_single-boot_rootfs2048M_no-last-partition-gpt.bin
你上传的文件的 md5 信息和上面对应文件的 md5 对比,没问题即可。
接着修改下面命令中的 gpt 文件名为你上传的文件名,然后复制命令粘贴一起执行:
(只修改 gpt 文件名,其他不变,这里以 rootfs512M 的分区表为例)
dd 命令是写入 gpt 文件到 /dev/mmcblk0 的前 34 个扇区
sgdisk 是用未分配空间新建 storage 分区
dd if=/tmp/jdcloud_re-cp-03_single-boot_rootfs512M_no-last-partition-gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync && \
sgdisk -e -n 0:0:0 -c 0:storage -t 0:0FC63DAF-8483-4772-8E79-3D69D8477DE4 -u 0:5D18C072-ADB3-412B-BF95-37617B01ADF8 -p /dev/mmcblk0
你会看到如下输出:
root@OpenWrt:~# dd if=/tmp/jdcloud_re-cp-03_single-boot_rootfs512M_no-last-partition-gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync && \
> sgdisk -e -n 0:0:0 -c 0:storage -t 0:0FC63DAF-8483-4772-8E79-3D69D8477DE4 -u 0:5D18C072-ADB3-412B-BF95-37617B01ADF8 -p /dev/mmcblk0
34+0 records in
34+0 records out
Setting name!
partNum is 8
Disk /dev/mmcblk0: 241664000 sectors, 115.2 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 2BD17853-102B-4500-AA1A-8A21D4D7984D
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 241663966
Partitions will be aligned on 1024-sector boundaries
Total free space is 8158 sectors (4.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 8192 9215 512.0 KiB 8300 u-boot-env
2 9216 13311 2.0 MiB 8300 factory
3 13312 17407 2.0 MiB 8300 fip
4 17408 50175 16.0 MiB 8300 kernel
5 50176 1098751 512.0 MiB 8300 rootfs
6 1098752 1232895 65.5 MiB 8300 log
7 1232896 3330047 1024.0 MiB 8300 plugin
8 3330048 5427199 1024.0 MiB 8300 swap
9 5427200 241663966 112.6 GiB 8300 storage
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
dd 写入没有报错,sgdisk 最后输出 successfully 即可,有错误则及时排错,重新刷。
检查第 5 分区 rootfs 是分区表设置的大小,比如 rootfs512M 的分区表 rootfs 就是 512MB。
检查第 9 分区 storage 大小接近整个 EMMC 大小,比如 128G EMMC,storage 分区有 112GB 左右。
建议此时备份下载修改后的分区表,以后有问题进不了系统,可以直接 uboot 刷这个分区表。
当然刷 no-last-partition 的分区表后再新建分区也行,一样的。
dd if=/dev/mmcblk0 bs=512 count=34 of=/tmp/mmcblk0_GPT_sgdisk.bin
都没有问题可以断电,按 reset 上电进 uboot 刷固件了。
##【刷分区表的一点小提示】##
不建议用 diskman 磁盘管理修改分区,可能会导致系统不能启动。建议用 fdisk、gdisk 之类的进行修改分区。
如果不慎修改后系统不能启动,可以进入 uboot,浏览器输入 http://192.168.1.1/gpt.html 重新刷正常的 gpt 分区表即可。
如果 uboot 或系统中更换了其他分区表,但不需要使用前面的 sgdisk 命令新建分区并保存分区表。
这样则建议在系统中使用 fdisk 或者 sgdisk(一般需要先安装)单独保存下分区表,这样在 diskman 那里显示才正确:
例如系统中单独写 gpt 分区表:
dd if=/tmp/gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync
则建议保存下分区表:
echo -e 'w' | fdisk /dev/mmcblk0
或者
sgdisk -e /dev/mmcblk0
##【关于分区表不包含最后那个大分区的原因】##
gpt 分区表的最大扇区数不能大于 EMMC 的物理最大扇区数,小于等于则没问题。比如 128G 的 EMMC 刷 64G 的分区表可以,刷 256G 的分区表会出错。
MT798X EMMC 机子的 bl2 在 boot0 硬件分区,不受 userdata 硬件分区的 gpt 分区表影响,即使 gpt 坏了也可以启动 uboot,所以比较抗揍。
比如百里测试刷最大扇区数大于 EMMC 扇区数的分区表也能启动 uboot,只是固件启动会报错,可以进 uboot 重新刷正常的分区表。
不过高通 IPQ60XX EMMC 机子 SBL 是在 userdata 硬件分区中由 gpt 分区表划分出来的第一个软件分区,会受到 gpt 分区表的影响。
比如京东云 AX1800 Pro 亚瑟测试直接刷最大扇区数大于 EMMC 扇区数的分区表会砖,需要 USB 救砖。
同时如果最后一个大的分区超过了 EMMC 的扇区数,fdisk、parted、gdisk 这些工具并不能直接修复,仍然需要删除新建。
基于这两个原因,我改的分区表都采用天灵大佬的 gpt 分区表的做法,不保留最后一个最大的分区了,即 no-last-partition。
这样的分区表只包含前面的小分区,扇区总数也不会超过 4G,所以适用所有大于 4G 的 EMMC。
刷好 no-last-partition 分区表后,使用 sgdisk 用未分配空间新建一个分区,并还原分区的 type code 和 UUID,这样这个分区和原厂分区是一样的。
4.uboot 刷固件和格式化 data 分区
我改的这个 uboot 不支持 DHCP,电脑需要设置 ip 192.168.1.2/24,连接网线到路由器 lan 口,路由上电按 reset,等待灯变为蓝色,说明 uboot webui 已启动,可以松开按钮,浏览器打开 192.168.1.1,上传固件刷写成功后绿灯会亮 3 秒,然后重启。注意:其他大佬的 uboot 可能指示灯不一样。
我改的这个 uboot 是 2024.04.05 编译的 U-Boot 2022.07-rc3 (Apr 05 2024 - 16:00:44 +0800)
进入 uboot webui 页面后,最下方会显示这个编译日期,可以作为判断是否刷的是我改的 uboot 的标识。
uboot 不仅可以刷固件,还可以更新 bl2、uboot 和 gpt,打开相应网页即可,非不要不需要更新:
http://192.168.1.1/bl2.html
http://192.168.1.1/uboot.html
http://192.168.1.1/gpt.html
uboot 刷好第三方 OP 系统后,先 SSH 格式化下最后一个 storage 分区。
mkfs.ext4 $(blkid -t PARTLABEL=storage -o device)
如果要把 storage 分区挂载给 docker,则在系统 -> 挂载点菜单,添加挂载点,UUID 选择 mmcblk0p9,输入自定义挂载位置 /opt,回车,然后保存,再在外层点保存并应用,最后重启系统即可。
打开系统 -> 挂载点,查看交换分区,如果是自动挂载的固件,可以看到 /dev/mmcblk0p8 挂载为 swap 的分区,可以取消勾选,然后保存并应用,因为固件一般已经使用 zram 了。
如果 sawp 和 zram 都用,首页概览交换分区那里显示的是 1.5G,取消 swap 的挂载则显示 0.5G。
最后检查系统 -> 挂载点菜单,已挂载的文件系统中,是否有 /dev/loop0 设备挂载为 /overlay,如果没有重新在备份与升级菜单升级下固件,直至有。
5. 刷回原厂方法
因为官方原厂固件是双分区固件,兼容单分区,所以现在直接刷回原厂就可以用,但是要跑分需要恢复跑分的分区。
刷回原厂后想要再刷第三方 OP 则直接 uboot 刷即可,不需要其他操作了,可以自由切换。
下载仓库中的京东云百里 AX6000 官方固件 JDC04-4.2.0.r4080.7z,解压出官方固件 bin 备用。
然后开始恢复 log、plugin、swap 分区。
注意:log 分区变为了 mmcblk0p6,plugin 变为 mmcblk0p7,swap 变为了 mmcblk0p8,storage 分区变为了 mmcblk0p9。
去系统 -> 挂载点菜单,拉到下方的挂载点,挂载 /dev/mmcblk0p9 到 /mnt/mmcblk0p9,记得勾选启用并保存应用。
WinSCP 之类软件上传备份好的 mmcblk0p10_log.bin、mmcblk0p11_plugin.bin 和 mmcblk0p12_swap.bin 到 /mnt/mmcblk0p9,使用下面命令刷回:
dd if=/mnt/mmcblk0p9/mmcblk0p10_log.bin of=$(blkid -t PARTLABEL=log -o device) conv=fsync
dd if=/mnt/mmcblk0p9/mmcblk0p11_plugin.bin of=$(blkid -t PARTLABEL=plugin -o device) conv=fsync
dd if=/mnt/mmcblk0p9/mmcblk0p12_swap.bin of=$(blkid -t PARTLABEL=swap -o device) conv=fsync
恢复后可以删除上传的文件,当然 swap 分区按理说可以运行命令新建,不过我还是用备份直接恢复分区:
mkswap $(blkid -t PARTLABEL=swap -o device)
swapon $(blkid -t PARTLABEL=swap -o device)
恢复完分区后,web 不保留配置升级或直接 uboot 刷回官方固件,系统启动后打开无线宝 app,存储设置内置存储为本地网盘,然后直接恢复出厂,启动后再进入 app 设置内置存储为智能加速服务。
恢复智能跑分服务后可能无线宝 app 中的服务状态一直在自动修复,灯是蓝色的不能马上变绿灯,需要等待,我试的情况是有可能需要 1-2 个小时才恢复绿灯。
如果刷回原厂超过 2 小时跑分服务一直在修复,可以尝试重新刷 log、plugin、swap 分区。
再重试设置内置存储为本地网盘,然后直接恢复出厂,启动后再设置内置存储为智能加速服务。
如何恢复分区回原厂快速开始跑分,我没有摸索出规律,所以得大家自己多尝试。
6.MT798X 路由器串口 TTL 救砖
路由器断电,使用 USB 转 TTL(建议使用 3.3V 电平的)连接路由器 TTL 接口。
运行“打开设备管理器命令.bat”在设备管理器查看 USB 转 TTL 对应的 COM 口号。这个 COM 口不能被其他程序占用。
运行“MT798X 串口 TTL 救砖命令.bat”,选择对应型号的 fip 序号,选择正常波特率,然后输入 COM 口号回车即可。
如果波特率报错,则尝试低波特率。
注意 mtk_uartboot 文件夹中的 bl2 是 ram boot bl2,不是闪存用的 bl2!!!
除了京东云百里 jdcloud_re-cp-03 要刷解锁 Secure Boot 的 bl2,一般恢复 bl2,刷原厂即可。
eMMC 机型在 uboot 的 bl2.html 刷 bl2 限制上传文件大小 1MB。
还有 bl-mt798x 仓库编译 xdr4288/608x 的 bl2 和 fip 是没有开 NMBM,恢复 bl2 的话根据自己情况考虑。
也可以手动运行 mtk_uartboot 命令,详见 mtk_uartboot 文件夹里的教程。
下面说下大致过程,运行命令后会出现等待握手信息:
mtk_uartboot - 0.1.1
Using serial port: COM3
Handshake...
然后路由器上电开机,握手成功 CMD 会输出 sending payload 信息开始发送 bl2:
hw code: 0x7986
hw sub code: 0x8a00
hw ver: 0xca01
sw ver: 0x1
Baud rate set to 115200
sending payload to 0x201000...
发送完成加载 bl2 会输出信息同时开始发送 fip:
Checksum: 0x3c82
Setting baudrate back to 115200
Jumping to 0x201000 in aarch64...
Waiting for BL2. Message below:
==================================
NOTICE: BL2: v2.10.0 (release):v2.4-rc0-5845-gbacca82a8-dirty
NOTICE: BL2: Built : 20:30:05, Feb 2 2024
NOTICE: WDT: Cold boot
NOTICE: WDT: disabled
NOTICE: CPU: MT7986 (2000MHz)
NOTICE: EMI: Using DDR4 settings
NOTICE: EMI: Detected DRAM size: 1024MB
NOTICE: EMI: complex R/W mem test passed
NOTICE: Starting UART download handshake ...
==================================
BL2 UART DL version: 0x10
Baudrate set to: 115200
此时开始在上传 fip,600KB 的 fip 使用 1500000 波特率只需要几秒钟,低波特率则大概 45 秒。
此时如果需要进入 uboot webui 可以直接按住 reset 按键不放,等待 uboot 指示灯闪烁并进入 uboot。
如果没有按 reset 会直接启动固件,进入固件再恢复刷砖的分区也行。
fip 加载完后输出:
FIP sent.
==================================
NOTICE: Received FIP 0x90b59 @ 0x40400000 ...
==================================
此时程序已经执行完,已经加载 uboot,如果没有按 reset 会直接启动固件,按 reset 就进入 uboot webui 恢复刷砖的文件。