楔子
一开始玩OpenWrt使用遥设备的是86,就和电脑装系统似的,什么PVE、OpenWrt、Esxi、Windows等系统随便刷,根本刷不坏。最近有需要给无线划分Vlan,86就是一个小主机不支持WIFI,而家庭路由器不带无线Vlan功能,无线Vlan只能是商业路由器才支持的功能。后来想到一个办法就是增加一个无线路由器, 然后在86里给这两个或者多个路由器划分Vlan;但我这只是家庭使用也没有Mesh要求,没必要增加多个路由器,多个路由器就会增加成本。
后来就想能不能在支持刷机的路由器上刷OpenWrt,然后在路由器上为无线划分Vlan。然后就在海鲜市场上逛。之前就知道百里配置高,但是之前没有硬路由刷机的需求也就没有关注这类设备。后来百里二手价格居高不下,后来又看到雅典娜,配置只比百里低一点,而且有USB,就想着入这个;后来在恩山逛时看到有人说无线信号不行所以就没再考虑雅典娜。然后在随后几天时不时的打开海鲜市场看有没有人出,看了几天入手了一个64G,其实相较于128G,因为没有USB多这64G储存也没有多大实际意义,所以就按价格因素入手了一个没有刷过机的64GB的。
本教程基于加非猫大佬编写的教程https://github.com/lgs2007m/Actions-OpenWrtenWrt/blob/main/Tutorial/JDCloud-AX6000-Baili.md。本教程是只作为笔记和原教程理解补充;详细参考原教程。
本教程使用的京东云百里型号为:RE-CS-05,原教程使用的是RE-CP-03;而且其它许多教程和固件编译都是标明支持型号为:RE-CP-03。经过实测RE-CS-05通刷RE-CP-03;但我不排除没有其它有问题。
准备
升级固件
京东云AX6000百里没有软破解SSH,需要通过原厂系统升级官方放出的原生OpenWrt可获取SSH权限。
首先在原系统上传下载下来的刷机文件中的OpenWrt固件:OpenWrtenwrt-re-cp-03-4.1.0.r4005-1287bf0122329d5c3acbb7198e04b1e4.bin来升级系统以打开SSH。
升级系统重启完成后,使用SSH软件登录192.168.68.1,端口22,用户名root,没有密码。
输入命令删除环境变量:
fw_setenv jdc_crc_version && fw_setenv jdc_OpenWrtp_version
备份原厂分区
全部复制以下命令一起粘贴并执行备份原厂系统。
dd if=/dev/mmcblk0boot0 bs=512 count=2048 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
sync
等待命令执行完使用WinScp软件登录路由器,协议SCP,IP:192.168.68.1,端口22;然后点击高级
。
去掉勾选“优化连接缓冲大小”,这样就不会在传输文件时中断文件传输了。
然后将/mnt/mmcblk0p13/文件夹内的内容全部下载下来保存,可以后再刷回原厂时使用。
刷bl2和uboot
将下载后的刷机文件“bl2_uboot”夹下的文件上传到路由器/tmp目录。给文件添加上执行权限,即chmod+x。以下所有需要校验md5的文件都要添加执行权限。并在SSH输入命令验证md5:
md5sum /tmp/mt7986_jdcloud_re-cp-03*.bin
这两个文件的md5值是:
6c0d654a9dc261b769b472f1e3bb4df9 /tmp/mt7986_jdcloud_re-cp-03-bl2_20241010.bin
053cb614b1309f5d04544fb3380548ed /tmp/mt7986_jdcloud_re-cp-03-fip_legacy-and-fit_20241010.bin
md5对比成功后,输入下面命令切换到shell (ash):
ash
然后一起复制下面命令粘贴执行,刷写bl2和uboot:
echo 0 > /sys/block/mmcblk0boot0/force_ro
dd if=/tmp/mt7986_jdcloud_re-cp-03-bl2_20241010.bin of=/dev/mmcblk0boot0 conv=fsync
echo 1 > /sys/block/mmcblk0boot0/force_ro
dd if=/tmp/mt7986_jdcloud_re-cp-03-fip_legacy-and-fit_20241010.bin of=$(blkid -t PARTLABEL=fip -o device) conv=fsync
sync
刷写完没有报错,然后检查下分区的md5值。
md5sum /dev/mmcblk0boot0 && md5sum $(blkid -t PARTLABEL=fip -o device)
md5值结果应该是以下值;不一样就重新刷,不能重启!!
7dfc7a41871f6dcfd8fbcdc23706ee5c /dev/mmcblk0boot0
053cb614b1309f5d04544fb3380548ed /dev/mmcblk0p4
刷GPT分区表
原生OpenWrt没有sgdisk,刷gpt分区表前,先安装sgdisk以便后面编辑分区表。 将sgdisk文件夹里面的sgdisk_1.0.6-1_aarch64_cortex-a53.ipk上传/tmp目录,然后SSH运行下面命令安装:
OpenWrtkg install -d root /tmp/sgdisk_1.0.6-1_aarch64_cortex-a53.ipk
将下载的刷机文件“gpt分区表”文件夹下的文件上传到/tmp目录;根据你需要的空间来选择分区文件。然后校验md5。
md5sum /tmp/jdcloud_re-cp-03_*gpt.bin
这是各分区文件的md5值。
823e50e29dd27b55ce11a3757e676da7 /tmp/jdcloud_re-cp-03_rootfs1024M_production1024M-gpt.bin
2d57350e2f5da3a7c7fbc2b6a196a82f /tmp/jdcloud_re-cp-03_rootfs256M_production256M-gpt.bin
3abe28bfa7b6072b05059c6cdf292a6f /tmp/jdcloud_re-cp-03_rootfs512M_production512M-gpt.bin
你上传的文件的md5信息和上面对应文件的md5对比,没问题即可。 下面的命令以rootfs/production512M的分区表为例,如果换其他的分区表,只修改if参数中的gpt分区表文件名即可,其他不要改。 第1条dd命令是写入gpt分区表文件到/dev/mmcblk0的前34个扇区 第2条sgdisk命令是用未分配空间新建storage分区,-1G代表末尾的1G空间留白,可自行调整 第3条sync命令主要是为了方便多行命令一起复制粘贴执行,不会遗漏上面的命令 接着一起复制下面3条命令,一起粘贴执行:
dd if=/tmp/jdcloud_re-cp-03_rootfs512M_production512M-gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync
sgdisk -e -n 0:0:-1G -c 0:storage -t 0:0FC63DAF-8483-4772-8E79-3D69D8477DE4 -u 0:5D18C072-ADB3-412B-BF95-37617B01ADF8 -p /dev/mmcblk0
sync
dd写入没有报错,sgdisk最后输出successfully即可。如果分区表明显不一样或有错误则及时排错,重新刷。
建议此时备份下载修改后的分区表,以后有问题进不了系统,可以直接uboot刷这个分区表。 也可以重新刷分区表后再新建分区。
dd if=/dev/mmcblk0 bs=512 count=34 of=/tmp/mmcblk0_GPT_sgdisk.bin
Uboot
先给路由器断电,然后按住reset给路由器通电,等待红灯变成蓝灯后松开reset键。然后在浏览器打开192.168.1.1进入uboot界面。
当看你看到这个界面时,就说明你已经刷机成功了,而且达成了刷不死形态,即使变砖也不怕,完全就和电脑装系统一样随便装固件,随便耍了。
支持.bin和ImmortalWrt与官方的.ibt格式的固件。
选择并上传固件后出现以下界面后等待路由器指示灯变成长绿,然后在浏览器新标签页输入你的固件的IP,即可进入刷入的固件。
uboot不仅可以刷固件,还可以更新bl2、uboot和gpt。按需进入以下地址进行操作即可。
http://192.168.1.1 刷写固件。
http://192.168.1.1/uboot.html 刷写uboot。
http://192.168.1.1/bl2.html 刷写bl2,注意刷写eMMC的bl2文件不大于1MB 。
http://192.168.1.1/gpt.html 刷写eMMC机型的gpt分区表。
http://192.168.1.1/simg.html 刷写single image镜像。
http://192.168.1.1/initramfs.html 刷写内存启动固件initramfs 。
注意:刷写bl2、gpt、simg不会验证文件,请一定做好原机备份并确认上传文件的有效性,特别是simg!!!
uboot刷好第三方OpenWrt系统后,SSH登录用命令格式化下最后一个storage分区。
mkfs.ext4 $(blkid -t PARTLABEL=storage -o device)