BPI-R3开发板支持从SPI-NOR,SPI-NAND,SD卡和eMMc启动。官方WiKi也有发布对应的镜像文件,例如mtk-bpi-r3-SD-WAN1-SFP1-20220928-single-image.img,single-image表示可以用于直接烧写到启动设备中;openwrt-mediatek-mt7986-BPI-R3-NAND-WAN1-SFP1-squashfs-sysupgrade.bin则是openwrt固件,里面只有内核和跟文件系统,可以用于openwrt web升级,不能用于直接烧写到启动设备。
由于官方Wiki对于启动这块已经讲的非常详细了,这里就不详细介绍启动了。下面以一个具体的情景来讲解下启动:当SPI-NOR里面的镜像被破坏了,如何通过SD卡恢复?
1. 烧写镜像到SD卡
在官方Wiki发布的镜像中下载打包镜像,找到mtk-bpi-r3-SD-WAN1-SFP1-20220928-single-image.img,使用bpi-tools工具将镜像烧写到SD卡。
2. 烧写镜像到SPI-NOR
将C跳帽向下拉,让SPI-NOR有效。将SD卡插入板的卡槽,启动板子。运行fdisk -l,将会看到如下(后面部分省略):
root@OpenWrt:/# fdisk -l
Disk /dev/mtdblock0: 32 MiB, 33554432 bytes, 65536 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
The backup GPT table is not on the end of the device.
Disk /dev/mmcblk0: 7.39 GiB, 7935623168 bytes, 15499264 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 2BD17853-102B-4500-AA1A-8A21D4D7984D
Device Start End Sectors Size Type
/dev/mmcblk0p1 34 8191 8158 4M Linux filesystem
/dev/mmcblk0p2 8192 9215 1024 512K Linux filesystem
/dev/mmcblk0p3 9216 13311 4096 2M Linux filesystem
/dev/mmcblk0p4 13312 17407 4096 2M Linux filesystem
/dev/mmcblk0p5 17408 58367 40960 20M Linux filesystem
/dev/mmcblk0p6 58368 78847 20480 10M Linux filesystem
/dev/mmcblk0p7 78848 209919 131072 64M Linux filesystem
...........
...........
...........
可以看到,此时/dev/mtdblock0的大小是32M,正是SPI-NOR。使用如下指令擦除全部内容:
# 512 blocks (1 block = 64 KB)
flash_erase /dev/mtd0 0 512
在官方Wiki找到链接下载mtk-bpi-r3-mac80211-image-20220720.zip压缩包,解压后找到mtk-bpi-r3-NOR-WAN1-RJ45-20220720-single-image.bin。通过如下命令将镜像烧写到SPI-NOR:
cd /tmp
# tftp从电脑将image传到板子
tftp -gr mtk-bpi-r3-NOR-WAN1-RJ45-20220720-single-image.bin 192.168.1.100
# 通过dd命令烧写image到SPI-NOR
dd if=mtk-bpi-r3-NOR-WAN1-RJ45-20220720-single-image.bin of=/dev/mtdblock0
3. 从SPI-NOR启动板子
将板子断电,将A,B,C和D跳帽全部往下拉,板子上电,板子将从SPI-NOR启动。
本文主要介绍了当SPI-NOR中的程序被破坏时,如何恢复其中的程序。主要首先是通过SD卡启动系统,再将镜像传入到系统,烧写到SPI-NOR。如果需要烧写到SPI-NAND,将跳帽C置为反方向即可。如果要烧写到eMMC,则需要从SPI-NOR启动后,传入eMMC的镜像,烧写到eMMC。操作步骤类似。