标签:ramdisk rw 只读 mount FLASH mnt overlay
为避免设备意外断电出现文件系统损坏,根文件系统起不来的情况,用ramdisk+overlay的方式制作分层的只读文件系统,lower层为只读文件系统,upper层为可读写分区,这样当文件系统出现问题时只需将upper层文件删除即可恢复文件系统,具体方案如下:
硬件资源:
SPI FLASH : 4M
NAND FLASH: 1G
基于nand flash 不可靠考量,将uImage 、boot、dtb存放到SPI FLASH中,由于SPI FLASH大小限制,放弃内核和ramdisk打包在一起的initramfs方案,将分开的ramdisk存放到NAND FLASH单独划分的10M分区中,再将剩下的空间划分为只读分区和可读写分区用于后面挂载:
要做的工作有:
1.修改dts文件,划分SPI FLASH和NAND FLASH空间;
2.制作Ramdisk,并在编译的内核中支持;
3.修改bootstrap程序,使之不仅能从SPI中搬运内核和dtb还能从nand中搬运ramdisk到内存;
4.制作烧入文件脚本;
5.制作切换脚本linuxrc放入ramdisk中;
烧写脚本如下:
切换脚本如下:
echo "To overlayfs ..."
mkdir /mnt/ro /mnt/rw
ubiattach /dev/ubi_ctrl -m 1
mount -t ubifs -o rw ubi0:rw-part /mnt/rw
ubiattach /dev/ubi_ctrl -m 2
mount -t ubifs -o ro ubi1:rootfs /mnt/ro
mkdir /mnt/rw/worker /mnt/rw/rw /mnt/rw/overlay
mount -n -t overlay overlayfs:/overlay -o lowerdir=/mnt/ro,upperdir=/mnt/rw/rw,workdir=/mnt/rw/worker /mnt/rw/overlay
mount --move /dev /mnt/rw/overlay/dev/
mount --move /proc /mnt/rw/overlay/proc/
mount --move /sys /mnt/rw/overlay/sys/
mkdir /mnt/rw/overlay/ro /mnt/rw/overlay/rw
cd /mnt/rw/overlay
pivot_root . tmp/
#exec chroot . /sbin/init <dev/console >dev/console 2>&1
exec chroot . sh -c "$(cat <<END
# Move ro and rw mounts to the new root
mount --move /tmp/mnt/ro/ /ro
if [ $? -ne 0 ]; then
echo "ERROR: could not move ro-root into newroot"
/bin/bash
fi
mount --move /tmp/mnt/rw /rw
if [ $? -ne 0 ]; then
echo "ERROR: could not move tempfs rw mount into newroot"
/bin/bash
fi
# Continue with regular init
exec /sbin/init
END
)"
fi
标签:ramdisk,rw,只读,mount,FLASH,mnt,overlay 来源: https://blog.csdn.net/m0_38096844/article/details/100107324
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。