固件的可读写内容以及如何覆盖只读文件与只读目录

这个固件与openwrt 不同,它的所有可写的目录均是在RAM里面,也就是只要重启,所有修改的内容都会丢失。

整个固件的flash结构安排如下:

[rt /home/root]# cat /proc/mtd
dev: size erasesize name
mtd0: 00030000 00010000 "Bootloader"
mtd1: 00010000 00010000 "Config"
mtd2: 00010000 00010000 "Factory"
mtd3: 00135c60 00010000 "Kernel"
mtd4: 00e3a3a0 00010000 "RootFS"
mtd5: 00040000 00010000 "Storage"
mtd6: 00f70000 00010000 "Firmware_Stub"

容量如下:

[rt /home/root]# cat /proc/partitions
major minor #blocks name

31 0 192 mtdblock0
31 1 64 mtdblock1
31 2 64 mtdblock2
31 3 1239 mtdblock3
31 4 14568 mtdblock4
31 5 256 mtdblock5
31 6 15808 mtdblock6

需要存储的文件,必须放在 /etc/storage 目录下面

需要写入的时候,使用 mtd_storage.sh save 指令,系统会把 /etc/storage 目录下的内容压缩打包,保存进 mtd5 的区块。

好,那么固件中已经内置的可执行文件,我们需要覆盖的时候应该怎么使用?

例如 /usr/bin/vlmcsd 这个软件

如果你需要用 /etc/storage/bin/vlmcsd 这个文件覆盖它,但是直接改写系统会告诉你,这是一个只读分区。这时候,我们就需要用

mound --bind 这个神奇的指令了。

mount --bind /etc/storage/bin/vlmcsd /usr/bin/vlmcsd   这样就可以正常覆盖了。

取消覆盖:

umount /usr/bin/vlmcsd

但这样并不能在某个只读目录里面新增文件,这时候我们要怎么做的?

先把要新增文件的目录复制一份到某个目录,例如

cp /www /etc/storage/www -R

mount --bind /etc/storage/www /www

这样,你就会发现整个www目录可写了。

当然,每次重启都要进行一次同样的操作。

好吧,我再举个例子,例如闪讯的插件,在6-22的版本以后,已经带了sxplugin.so 这个支持了。但这个鬼东西在各个地区好像都不一样,如果我们需要更换它,就需要一点小技巧了。

cd  /etc/storage/bin/
wget http://www.abc.com/sxplugin.so
chmod 777 sxplugin.so
mtd_storage save
mount --bind /etc/storage/bin/sxplugin.so /usr/lib/pppd/sxplugin.so

以上脚本还是老规矩,会有一处或多处明显的错误,不能理解每一行的含义的,我就喜欢看着你想用又不会用的样子。

Comments

This post currently has one response

  • 你好,我的设备是 Newifi mini, 安装了你的 2016-10-12 版固件,选择在安装一个wifidog认证程序的时候出现以下提示:

    HSBuilder Utility Running Failed! Wifidog Error: [6][Sat Oct 22 17:16:38 2016][3209](conf.c:651) Reading configuration file '/opt/wifidog/etc/wifidog.conf'
    [3][Sat Oct 22 17:16:38 2016][3209](conf.c:654) Could not open configuration file '/opt/wifidog/etc/wifidog.conf', exiting...

    然而 /usr/bin/wifidog 是不可以修改的(其实是我不知道怎么修改),所以请问下一版会修正这个错误吗?

发表评论

Sidebar