当前位置: 技术问答>linux和unix
jffs想将部分分区设置只读的问题,有点复杂。
来源: 互联网 发布时间:2016-10-05
本文导语: 我的想要目标是将移植主要文件系统设置成只读,减少nand flash的读写(nand flash多写很容易坏) 我的想法是 1将移植的主要文件设置成只读 2将放置主要编写程序设置成可读写(方便程序更新) 3日志文件放到tmpfs 硬件:at91s...
我的想要目标是将移植主要文件系统设置成只读,减少nand flash的读写(nand flash多写很容易坏)
我的想法是
1将移植的主要文件设置成只读
2将放置主要编写程序设置成可读写(方便程序更新)
3日志文件放到tmpfs
硬件:at91sam9261 (arm9) 文件系统:jffs格式
内核里设置:
1 u-boot 2M 只读
2 zImage 2M 只读
3 rootfs 28M / 主要文件系统 只读
4 Qt 32M /Qt Qt的库 只读
5 Mnt 32M /mnt 可读写区域 读写
因为内核将rootfs设置成了只读
运行的时候出现很多,
Erase at 0x01fa0000 failed immediately: -EROFS. Is the sector locked?
和
jffs2_flush_wbuf(): Write failed with -30
Argh. No free space left for GC. nr_erasing_blocks is 0. nr_free_blocks is 0. (erasableempty: yes, erasingempty: yes, erasependingempty: yes)
Failed to allocate space for wbuf recovery. Data loss ensues.
我想:把linux可能读写的区域挂载放到读写区域去,可能就没问题了。
因为不知道可能要写那些目录,我就先全部复制一份放到了/mnt下 通过mount挂载
我的/etc/init.d/rcS中,通过以下命令,进行挂载
/bin/mount -t jffs2 /dev/mtdblock3 /qt
/bin/mount -t jffs2 /dev/mtdblock4 /mnt/
/bin/mount tmpfs /tmp -t tmpfs -o size=16m/
/bin/mount /mnt/bin /bin
/bin/mount /mnt/boot /boot
/bin/mount /mnt/dev /dev
/bin/mount /mnt/etc /etc
/bin/mount /mnt/home /home
/bin/mount /mnt/lib /lib
/bin/mount /mnt/main /main
/bin/mount /mnt/root /root
/bin/mount /mnt/sbin /sbin
/bin/mount /mnt/sys /sys
/bin/mount /mnt/usr /usr
/bin/mount /mnt/var /var
试了一下还是出现上面的错误信息。文件系统 "/" 下除了个linuxrc 文件,所有的文件夹 都挂载到了可读写分区了,
为什么linux还会出现不能写的错误?他写在了什么目录?
怎么实现我这个要求呢呢?
将移植主要文件系统设置成只读,减少nand flash的读写(nand flash多写很容易坏)
1将移植的主要文件设置成只读
2将放置主要编写程序设置成可读写(方便程序更新)
3linux日志文件等平时经常写的放到tmpfs
我的想法是
1将移植的主要文件设置成只读
2将放置主要编写程序设置成可读写(方便程序更新)
3日志文件放到tmpfs
硬件:at91sam9261 (arm9) 文件系统:jffs格式
内核里设置:
1 u-boot 2M 只读
2 zImage 2M 只读
3 rootfs 28M / 主要文件系统 只读
4 Qt 32M /Qt Qt的库 只读
5 Mnt 32M /mnt 可读写区域 读写
因为内核将rootfs设置成了只读
运行的时候出现很多,
Erase at 0x01fa0000 failed immediately: -EROFS. Is the sector locked?
和
jffs2_flush_wbuf(): Write failed with -30
Argh. No free space left for GC. nr_erasing_blocks is 0. nr_free_blocks is 0. (erasableempty: yes, erasingempty: yes, erasependingempty: yes)
Failed to allocate space for wbuf recovery. Data loss ensues.
我想:把linux可能读写的区域挂载放到读写区域去,可能就没问题了。
因为不知道可能要写那些目录,我就先全部复制一份放到了/mnt下 通过mount挂载
我的/etc/init.d/rcS中,通过以下命令,进行挂载
/bin/mount -t jffs2 /dev/mtdblock3 /qt
/bin/mount -t jffs2 /dev/mtdblock4 /mnt/
/bin/mount tmpfs /tmp -t tmpfs -o size=16m/
/bin/mount /mnt/bin /bin
/bin/mount /mnt/boot /boot
/bin/mount /mnt/dev /dev
/bin/mount /mnt/etc /etc
/bin/mount /mnt/home /home
/bin/mount /mnt/lib /lib
/bin/mount /mnt/main /main
/bin/mount /mnt/root /root
/bin/mount /mnt/sbin /sbin
/bin/mount /mnt/sys /sys
/bin/mount /mnt/usr /usr
/bin/mount /mnt/var /var
试了一下还是出现上面的错误信息。文件系统 "/" 下除了个linuxrc 文件,所有的文件夹 都挂载到了可读写分区了,
为什么linux还会出现不能写的错误?他写在了什么目录?
怎么实现我这个要求呢呢?
将移植主要文件系统设置成只读,减少nand flash的读写(nand flash多写很容易坏)
1将移植的主要文件设置成只读
2将放置主要编写程序设置成可读写(方便程序更新)
3linux日志文件等平时经常写的放到tmpfs
|
1. kernel里分区时,对应的MTD分区不做成擦除块的整数倍,这个保证任何文件系统的MTD分区也只能读。
2. 用只读的文件系统;
3。启动配置文件里,mount时设置只读属性。
2. 用只读的文件系统;
3。启动配置文件里,mount时设置只读属性。
|
其实 linux 本身会操作的目录只是 /var 和 /tmp /etc
如果还有其他目录被操作,你就要考虑到底是那个程序 操作了根目录下的文件。
/bin/mount /mnt/var /var 这个写法是不对的。
1. 根文件系统做成只读的, 这没有任何问题。
2. 你要弄清楚那些文件,或者文件夹会被读写,你可以把它连接出来:
比如:
ln -s /mnt/etc/ /etc
这个动作要放在制作文件系统之前。
|
这里是有点问题,呵呵。 所以你可以先在 /etc 下放一下基本的文件。
然后等启动以后再 mount /etc 到某个具体分区去。
然后等启动以后再 mount /etc 到某个具体分区去。
|
配置fstab可以不,能不能把准备要改的放到可读写文件系统,其他的就放到只读的上面。