OpenWRT的安裝和升級
在OpenWRT官方下載頁面可下載官方固件。
OpenWRT對各路由器機型的支持參考OpenWRT Wiki。
系統安裝
mtd
是路由器刷機使用的固件寫入工具,用於向路由器中刷寫操作系統。
路由器的分區信息寫在/proc/mtd
文件中,不同機型不同固件會有不同的分區信息,示例:
<!-- Mi Router 4C, Official Firmware -->
$ cat /proc/mtd
dev: size erasesize name
mtd0: 01000000 00010000 "ALL"
mtd1: 00020000 00010000 "Bootloader"
mtd2: 00010000 00010000 "Config"
mtd3: 00010000 00010000 "Factory"
mtd4: 00010000 00010000 "crash"
mtd5: 00010000 00010000 "cfg_bak"
mtd6: 00100000 00010000 "overlay"
mtd7: 00c60000 00010000 "OS1"
mtd8: 00b00000 00010000 "rootfs"
mtd9: 00200000 00010000 "disk"
<!-- Redmi Router AC2100, Official Firmware -->
$ cat /proc/mtd
dev: size erasesize name
mtd0: 07f80000 00020000 "ALL"
mtd1: 00080000 00020000 "Bootloader"
mtd2: 00040000 00020000 "Config"
mtd3: 00040000 00020000 "Bdata"
mtd4: 00040000 00020000 "Factory"
mtd5: 00040000 00020000 "crash"
mtd6: 00040000 00020000 "crash_syslog"
mtd7: 00040000 00020000 "cfg_bak"
mtd8: 00400000 00020000 "kernel0"
mtd9: 00400000 00020000 "kernel1"
mtd10: 01a00000 00020000 "rootfs0"
mtd11: 01a00000 00020000 "rootfs1"
mtd12: 02600000 00020000 "overlay"
mtd13: 01b80000 00020000 "obr"
mtd14: 00c1c000 0001f000 "ubi_rootfs"
mtd15: 021e8000 0001f000 "data"
<!-- Redmi Router AC2100, OpenWrt Firmware -->
$ cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "Bootloader"
mtd1: 00040000 00020000 "Config"
mtd2: 00040000 00020000 "Bdata"
mtd3: 00040000 00020000 "factory"
mtd4: 00040000 00020000 "crash"
mtd5: 00040000 00020000 "crash_syslog"
mtd6: 00040000 00020000 "reserved0"
mtd7: 00400000 00020000 "kernel_stock"
mtd8: 00400000 00020000 "kernel"
mtd9: 07580000 00020000 "ubi"
使用mtd將固件寫入目標分區:
# mtd -r write 固件路徑 分區名稱
使用mtd工具刷機,通常應使用factory固件,
而非OpenWRT系統升級時使用的sysupgrade固件。
使用mtd重置系統:
# mtd erase rootfs_data
系統升級
在LuCI的System - Backup / Flash Firmware
介面選擇Flash new firmware image
菜單進行系統升級;
亦可使用sysupgrade
工具進行系統升級:
<!-- 系統升級,升級鏡像通常名稱中包含sysupgrade字樣 -->
# sysupgrade 升級參數 升級鏡像
<!-- 配置備份參數 -->
# sysupgrade 備份參數 備份文件
使用sysupgrade升級系統時,需要注意所使用升級固件的mtd分區佈局,
分區佈局需要與最初安裝系統時使用的factory固件兼容。否則會造成路由器變磚。
sysupgrade主要參數:
參數 | 說明 |
---|---|
-n | 升級不保留任何配置 |
-c | 保留 /etc 目錄下的所有變化配置 |
-v | 輸出更詳細的操作日誌 |
-b | 創建備份 |
-r | 恢復備份 |
-l | 列出備份 |
OpenWRT的系統升級會清空整個根文件系統(根據配置項可保留/etc
下的配置),
升級後的系統所有用戶安裝的軟件包會清空,若升級時選擇保留配置,
則保留/etc
路徑下的內容,系統以及用戶軟件包的配置將會保留。
若保留配置,則多數系統配置如Wifi、密碼、防火牆、ssh等配置可直接應用到新環境中,
用戶軟件包也可在升級後重新安裝繼續使用保留的配置。
為避免潛在的軟件包升級不兼容,亦可僅保留核心配置/etc/config
路徑。
需要注意,系統升級前若修改了/etc/passwd
設置了非預裝的shell作為默認shell,
則升級前應修改回默認的/bin/ash
,否則升級後因為軟件包重置、shell不存在,而導致ssh無法連接。