linuxer
Published on 2024-08-14 / 235 Visits
0
0

京东云AX6000百里单分区刷机+回原厂+TTL救砖教程

京东云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恢复刷砖的文件。


Comment