为了将 OpenWRT 的启动时间加快,我把 uboot 的环境变量 bootdelay 设置为 0。之后发现再也无法进入 uboot 命令行。
使用下面的命令,在 OpenWRT 命令行下修改 uboot 的 bootcmd 环境变量,发现 mtd1 为只读不可写。
root@OpenWrt:/# fw_setenv bootdelay 2
Can't open /dev/mtd1: Permission denied
在 dts 文件中 (我用的设备是 Xiaomi 4c 路由器,对应的文件为 mt7628an_xiaomi_mi-router-4.dtsi),将 uboot 的 config 区的 read-only 去掉即可(见下面的代码)
&spi0 {
status = "okay";
flash0: flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <10000000>;
partitions: partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "bootloader";
reg = <0x0 0x20000>;
read-only;
};
partition@20000 {
label = "config";
reg = <0x20000 0x10000>;
read-only; <----- 删除该行
};
重新编译,升级 firmware,重新使用 "fw_setenv bootdelay 2"。 uboot 的串口就拯救回来了。