为QNAP-301w刷写openwrt固件
为QNAP-301w刷写openwrt固件
家里用的路由器是qnap的301w,最近家里的智能家居偶尔掉线,不知是否和qnap的网络有关,所以我看到有人给qnap写了openwrt的固件包,那就刷入试试。
301w的mmc分区表
分区 | 备注 | 大小 | 说明 |
---|---|---|---|
/dev/mmcblk0p1 | “0:HLOS” | 16MB | 系统1 kernel 分区 |
/dev/mmcblk0p2 | “0:HLOS_1” | 16MB | 系统2 kernel 分区 |
/dev/mmcblk0p3 | “0:HLOS_2” | 16MB | 系统3 kernel 分区(空的,官方未刷入固件,也无法引导到该分区,忽视) |
/dev/mmcblk0p4 | “rootfs” | 512MB | 系统1 rootfs 分区 |
/dev/mmcblk0p5 | “rootfs_1” | 512MB | 系统2 rootfs 分区 |
/dev/mmcblk0p6 | “rootfs_2” | 512MB | 系统3 rootfs 分区(空的,官方未刷入固件,也无法引导到该分区,忽视) |
/dev/mmcblk0p7 | “0:WIFIFW” | 4MB | 无线的firmware分区 |
/dev/mmcblk0p8 | “reserved” | 16MB | 保留分区(没用的) |
/dev/mmcblk0p9 | “rootfs_data” | 2.1GB | rootfs的数据分区,多个官方系统共用的数据分区,目前openwrt固件没有使用该分区 |
系统1和系统2的分区(kernel+rootfs)是互为备份的,理论上是一毛一样的。
开启ssh
原厂系统开启ssh需要按住路由器后面的wps键12秒(响两声),然后就可以用22200端口登陆,用户名admin,密码即网页管理密码。
刷机的一些tips
刷机之前,首先要备份一下出厂自带的系统,以防以后需要恢复。可以通过以下命令来备份系统自带固件 刷机过程中,mmc我们需要操作p1、p4这两个分区,另外写入10G网口驱动时我们需要写入mtd10。 另外,虽然301w是双系统,但是好像主要用的都是系统0(即我们要刷入的分区),而系统1是出厂时带的旧系统,所以我们如果想在系统1使用新系统,则也需要把系统0的数据写入系统1,所以我们要备份的分区包括p1、p2、p3、p4以及mtd10。
使用以下命令备份
dd if=/dev/mmcblk0p1 of=/tmp/mmcblk0p1.bin
dd if=/dev/mmcblk0p2 of=/tmp/mmcblk0p2.bin
dd if=/dev/mmcblk0p3 of=/tmp/mmcblk0p3.bin
dd if=/dev/mmcblk0p4 of=/tmp/mmcblk0p4.bin
dd if=/dev/mtd10 of=/tmp/mtd10.bin
备份完成后将备份文件下载下来
注意,因为tmp内存大小限制,上面的备份文件要分批备份、拷出,主要是p2、p4这两个分区都是512m大小,所以需要分开备份、拷贝,拷贝完成后删除。
开始刷机
首先,我们需要进ssh里将系统切为系统1,以刷写系统0
sudo fw_setenv current_entry 1
sudo reboot
重启后,进入ssh确认是否已经切换到系统1
sudo fw_printenv -n current_entry
# 如果上面命令输出1代表已经在系统1,可以继续
然后我们就可以将固件刷入系统0 刷机时,将固件(此处必须先用上面QSDK的固件 kernel.bin 和 rootfs.bin)传入/tmp目录下(别的地方也可以) 然后使用dd命令写入分区
sudo dd if=/tmp/kernel.bin of=/dev/mmcblk0p1
sudo dd if=/tmp/rootfs.bin of=/dev/mmcblk0p4
sudo fw_setenv current_entry 0 # 设置使用系统0启动
sudo fw_setenv boot_0 good
sudo reboot # 重启
刷机完成重启到openwrt后,可以进入openwrt后台,默认密码为password
,进入后,会发现网口顺序有了变化,从左(10G口)到右分别为eth4(10G)、eth5(10G,默认wan)、eth3、eth2、eth1、eth0,我们为了配合原来的习惯,需要将eth3改为wan,eth5并入lan网桥以恢复使用习惯。
然后会发现10G的口都无法使用,这时我们需要刷入10G口的PHY固件到mtd10。将phy固件上传到路由器,然后执行命令刷入
# 抹除原ethfw分区 mtd10的数据:
mtd erase /dev/mtd10
# 刷入fw文件:
mtd -n write /tmp/AQR_ethphyfw_5.6.7.mbn /dev/mtd10
# 修改bootcmd环境变量:
fw_setenv bootcmd "aq_load_fw 0; aq_load_fw 8; bootipq"
# 输入下面命令看下是否有这条记录 bootcmd=aq_load_fw 0; aq_load_fw 8; bootipq
fw_printenv
如果有,则重启即可
刷入其他openwrt固件
刷入上面固件完成后,即可在openwrt下使用sysupgrade刷入其他openwrt固件了。(如果不用这种方式,直接使用dd刷入会遇到刷入后配置无法保存、wifi无法使用等问题)
由于机型名称异常,在web下无法刷入(无法通过验证)。所以在确定没下错固件的前提下,直接将固件传入机器内,然后登陆ssh后使用以下命令刷写即可。
# 刷写固件
# 如果需要,也可以加入 -n 标识在刷写完成后不保留配置
sysupgrade -F /tmp/openwrt.bin