R86s刷入自制OpenWrt固件

R86s出厂是自己带了eMMC,拿不下来,不好刷。使用官方版本的刷机脚本,刷完以后每次重启系统后,分区都是ro只读,还不如自己手工捣鼓了。

下面提供三种方法刷进去,都是大同小异,先把/dev/mmcblk0的分区表清空,然后dd命令刷入区块。

创建启动用的TF(SD)卡

首先把OpenWrt系统的openwrt-x86-64-generic-squashfs-combined-efi.img镜像(ext4也可以,但意外关机后会产生分区表损坏,需要手工fsck,不然分区也是ro只读,系统不工作)用balenaEtcher写入到TF卡,然后给R86s接入键盘,开机,猛按F7键,选择TF卡启动,进入到OpenWrt界面。

清空原来的分区表

💡
这里有个大坑,如果eMMC上本身存在系统,会被OpenWrt默认加载,导致报错进不了TF卡上的OpenWrt。需要在原本的eMMC上的系统去清空分区表,或者借用第三方的安装盘把分区表清空。

接着,开始干掉系统原有分区表

fdisk /dev/mmcblk0
g
w

然后,我们就可以刷入系统了。

Opt 1,刷入TF卡上的系统

💡
注意:使用方法一,建议第一次重启进入系统后,再重启一次。因为OpenWrt第一次重启系统会对分区和系统做一些初始化调整

如果TF卡上的系统本身是没问题的,可以正常使用,或者你希望把原本在TF卡上使用的系统刷入生产环境,那么我们可以直接把TF卡上的系统原封不动的刷入到R86s的eMMC。正常情况下,TF卡的设备是/dev/sda,eMMC是/dev/mmcblk0

dd if=/dev/sda of=/dev/mmcblk0 bs=1M count=1000

敲桌板:注意里面的count=1000,这个数字要替换。怎么换?要看你img文件的大小。比如你烧录进TF卡的img文件大小是1G,那么bs=1M,乘以count=1000,就刚好是1000M,也就是1G。如果你的img文件只有500M,那么就bs=1M count=500。简单的小学生数学问题。

执行完以后,你会看到有一个输出,比如

1000+0 records in
1000+0 records out

然后拔TF卡,重启,正常就可以进入eMMC里面的系统了。

Opt 2,刷入TF卡上的img文件

第二个方法,如果你希望刷入干净的系统,或者你希望刷入的镜像文件和TF卡上的系统不一致,可以用这个方法。这个方法需要把刷机的系统网络和R86s是连通的。因为要用scp拷贝文件。

0、同样,先fdisk干掉分区表

1、先看下TF卡上的空间够不够装img文件。我自己的img文件就比较大,5G,TF卡是不够装的

root@BraWRT:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root               254.0M    254.0M         0 100% /rom
tmpfs                     3.8G      1.0M      3.8G   0% /tmp
/dev/loop0                4.8G    358.4M      4.4G   7% /overlay
overlayfs:/overlay        4.8G    358.4M      4.4G   7% /
/dev/sda1          255.7M      6.1M    249.7M   2% /boot
/dev/sda1          255.7M      6.1M    249.7M   2% /boot
tmpfs                   512.0K         0    512.0K   0% /dev

可以看到根目录/下的剩余空间只有4.4G,是不够放我5G的大文件。不过我本身用的是一张32G的TF卡,剩余空间是够的。那我可以用cfdisk来分区

cfdisk /dev/sda # 要指定TF卡的设备名

进入cfdisk后,选择free space,create,write。具体过程就不累赘了。

然后fdisk -l看看新创建的分区设备名,我这里是/dev/sda3。

接着创建文件夹,挂载分区

mkdir /data
mount /dev/sda3 /data

从远程机器拷贝img文件到OpenWrt。假设OpenWrt启动后的IP是192.168.1.1

scp openwrt-x86-64-generic-squashfs-combined-efi.img root@192.168.1.1:/data

上面的命令别直接照搬,按照自己的实际情况做修改。

文件拷贝到OpenWrt后,开始dd

dd if=/data/openwrt-x86-64-generic-squashfs-combined-efi.img of=/dev/mmcblk0 bs=10M

等dd写完,拔卡,重启,搞定。

Opt 3,dd远程写入

第三种方法就厉害了,合适高阶玩家,方便快捷,没有罗里吧嗦的步骤,甚至不需要用OpenWrt的TF卡来启动,其他的比如Ubuntu、Armbian的TF卡启动R86s都可以。只要是Linux系统启动的R86s,开放了ssh,支持scp,有dd命令就可以开搞。

0、随便用一个OpenWrt或者其他Linux系统启动R86s

1、在有img文件的远程机器上直接dd

dd if=openwrt-x86-64-generic-squashfs-combined-efi.img status=progress | ssh root@192.168.1.1 dd of=/dev/mmcblk0 bs=1M count=6000

拔卡,重启,搞定。