openwrt文件系统挂载

     对于使用openwrt的嵌入式系统来说,因为硬件绝大多数采用Flash,因此一般使用squash 文件系统和jffs2文件系统。前者是只读的,后者是可写的。我们一般会把jffs2 mount到某个目录下。这样就存在某些目录如/bin是只读的(squash fs),某些目录是可读写的(jffs2),这样对文件的操作会依赖于文件系统的属性和文件的路径。
    openwrt使用了mini_fo文件系统,从用户的使用角度看,会觉得整个文件系统都是可写的。用户可以任意修改、删除、添加文件。这种文件系统可以认为是在squash fs和jffs2的文件系统之上实现了一个符号链接,如果用户读取只读文件,则链接到squash文件系统读取,如果用户对只读文件进行了修改,则将修改的文件放到jffs2文件系统上,并修改链接。
    如果用户的系统不采用jffs2系统,openwrt会使用ramfs,依旧可以实现上面的功能,不过系统重启后,修改会丢失。
    这个最大的好处在于,对于openwrt这嵌入式linux开发平台来说,用户态的应用程序不用关心底层到底使用那种文件系统,不用关心只读的还是可写的,不用关心具体的文件路径。

    openwrt启动后,linux内核会加载squash文件系统,这个文件系统是只读的。
    openwrt在初始化时,会以mini_fo的文件 系统类型重新mount整个文件系统,这个过程在/etc/preinit的脚本中实现。文件系统的加载在下面shell脚本的红色部分。

package/base-files/files/lib/functions/boot.sh

fopivot() { #
        root=$1
        {
                if grep -q mini_fo /proc/filesystems; then
                        mount -t mini_fo -o base=/,sto=$1 "mini_fo:$1" /mnt 2>&- && root=/mnt
                else
                        mount --bind / /mnt
                        mount --bind -o union "$1" /mnt && root=/mnt
                fi
        } || {
                [ "$3" = "1" ] && {
                mount | grep "on $1 type" 2>&- 1>&- || mount -o bind $1 $1
                dupe $1 $rom
                }
        }
        pivot $root $2
}


下面的链接为 mini_fo 的主页
http://www.denx.de/wiki/Know/MiniFOHome
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值