【查看当前系统分区信息】


cat /proc/mtd
显示:
dev: size erasesize name
mtd0: 00050000 00010000 “u-boot”
mtd1: 00020000 00010000 “u-boot-env”
mtd2: 00f80000 00010000 “firmware”
mtd3: 00107440 00010000 “ kernel
mtd4: 00e78bc0 00010000 “rootfs”
mtd5: 00810000 00010000 “rootfs_data”
mtd6: 00010000 00010000 “art”
其中,mtd2就是固件分区(firmware)

【备份固件firmware】
dd if=/dev/mtd2 of=/tmp/firmware_backup.bin
然后用winscp登陆路由器tmp目录,将固件文件firmware_backup.bin保存到电脑中。

【恢复固件firmware】
先用winscp将固件文件firmware_backup.bin传至路由器tmp目录,然后:
mtd -r write /tmp/firmware_backup.bin firmware
即可恢复,恢复完成路由器会自行重启

备份恢复 Openwrt 路由器配置】

备份自定义路由器信息,包括新安装软件:

dd if=/dev/mtd5 of=/tmp/overlay.bin

恢复备份设置并重启:

先用winscp将备份文件overlay.bin传至路由器tmp目录,然后:
mtd -r write /tmp/overlay.bin rootfs_data

仅备份路由器配置:

sysupgrade -b /tmp/back.tar.gz

恢复路由器配置:

sysupgrade -f /tmp/back.tar.gz

【恢复Openwrt路由器默认设置】

删除/overlay分区所有文件,重启即恢复默认设置:

rm -rvf /overlay/* && reboot

使用mtd清除/overlay分区信息后重启即恢复默认设置:

mtd -r erase rootfs_data

【刷新路由器固件】

使用mtd刷新:

先用winscp将固件文件xxx.bin传至路由器tmp目录,然后:
mtd -r write /tmp/xxx.bin firmware
刷新完成后路由器会自动重启。

使用sysupgrade更新,推荐:

先用winscp将固件文件xxx.bin传至tmp目录,然后:
sysupgrade /tmp/xxx.bin

N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flippy-21+N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flippy-21+N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flippy-21+N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flippy-21+N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flippy-21+N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flippy-21+N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flippy-21+N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flippy-21+N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flippy-21+N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flippy-21+N1_ Openwrt _r9.12.31_k5.4.10-amlogic-flip dev: size erasesize name mtd 0: 00050000 00010000 “u-boot” mtd 1: 00020000 00010000 “u-boot-env” mtd 2: 00f80000 00010000 “firmware” mtd 3: 00107440 0001000 本来是想按照代码流程往下讲bbt的,但是写着写着,还是要先介绍下 mtd 的几个基本flash读写擦函数接口。那就调整下,先讲基本接口函数,再讲到bbt的时候,就不用回头来讲基本读写函数了,这样主线清楚些。 忽然觉得我讲的流程有些乱:) 还没有讲flash的具体操作命令,要是穿插在下来的章节里面讲,会更乱,那就在这里补充下吧:) 前面这章已经提到了一些东西,但我光顾着分解代码了,没有把他们 在我们日常使用手机时,路由器是一个必不可少的环节,相信目前仍有许多新手不懂如何设置路由器,其实关于路由器的设置在网上有很多,只要稍微的搜索一下即可出来一大波教程,今天我们不讨论如何设置路由器,我们来谈谈关于路由器刷机的小知识还有相关 固件 的介绍。1.【查看当前系统分区信息】cat /proc/ mtd 显示:dev: size erasesize name mtd 0: 00050000 00010000 ... 1.httpd方式:Uboot启动时按住reset键,设置电脑ip:192.168.1.x在电脑端登入192.168.1.1进入升级界面升级2. MTD 启动路由器,进入linux环境。通过winscp 连接ssh然后将 _ar71xx_.bin 拷贝到 /tmp 目录切换到tty,在命令行下输入 mtd mtd -r write /tmp/_ar71xx_.bin firmware同理:如果刷Uboot... 哪位大哥写过嵌入式的 MTD 编程,也就是linux下对FLASH 的读写,看了一下驱动源代码其中写函数如下:static ssize_t mtd _ write (struct file *file, const char *buf, size_t count,loff_t *ppos){struct mtd _info * mtd = (struct mtd _info *)file->private_...   字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问;同时,两者读写数据的基本单元不同。   字符设备,以字节为基本单位,在Linux中,字符设备实现的比较简单,不需要缓冲区即可直接读写,内核例程和用户态API一一对应,用户层的Read函数直接对应了内核中的Read例程,这种映射关系由字符设... 关于 mtd -> write _oob()和chip->ecc. write _oob(),具体有何区别和联系,自己之前无意间注意到,也迷惑过,但并没有去弄懂,这次看到别人有提问,所以,专门去看了源码,基本算是搞清楚了。 mtd -> write _oob,是在nand_scan()->nand_scan_tail()中被赋值的: mtd -> write _oob = nand_ write _... 字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问;同时,两者读写数据的基本单元不同。 字符设备,以字节为基本单位,在Linux中,字符设备实现的比较简单,不需要缓冲区即可直接读写,内核例程和用户态API一一对应,用户层的Read函数直接对应了内核中的Read例程,这种映射关系由字符设备的file_op dev: size erasesize name mtd 0: 00030000 00010000 “u-boot” mtd 1: 00010000 00010000 “u-boot-env” mtd 2: 00010000 00010000 “factory” mtd 3: 01fb0000 00010000 “firmware” mtd 4: 001c0fb0 0001