tag 标签: Overlayroot

相关博文
  • 2025-1-7 17:03
    96 次阅读|
    0 个评论
    `overlayroot`是一种使用OverlayFS实现的功能,可将根文件系统挂载为只读,并通过一个临时的写层实现对文件系统的修改。这种方法非常适合嵌入式设备或需要保持系统文件完整性和安全性的场景。下文以RK3568平台为例,介绍制作overlayroot的详细步骤。 ​ 1.制作精简文件系统ramdisk 1.1环境准备 1.目标系统:确保系统支持OverlayFS(内核版本≥3.18)。 2.工具和依赖: 一个支持OverlayFS的Linux内核。 `busybox`或其他必要的系统工具。 1.2OverlayFS的基本原理 OverlayFS将文件系统分为以下两层: Lowerdir:只读的底层文件系统,通常是现有的根文件系统。 Upperdir:可写的顶层,存储所有的临时更改。 Workdir:OverlayFS的工作目录,用于支持文件操作。 1.3制作步骤 1.3.1创建OverlayFS配置结构 首先创建一个工作目录来组织文件系统结构。 mkdir -p /tmp/ramdisk/{bin,sbin,etc,proc,sys,dev,tmp} bin和sbin:存放用户工具(例如busybox)。 etc:存放必要的配置文件。 proc、sys、dev:为内核文件系统挂载预留的挂载点。 tmp:用于临时存储文件。 将busybox和相关依赖文件复制到适当的目录 1.3.2配置挂载脚本 在ramdisk的脚本中配置相关的挂载和优化 root_rw =/userdata #读写挂载点root_ro=/root-ro #只读文件系统挂载点ROOTMNT=${rootmnt} # use global name to indicate created outside thisOVERLAYROOT_DEBUG=0#优化userdata分区自动修复e2fsck -y /dev/disk/by-partlabel/userdatatune2fs -O has_journal /dev/disk/by-partlabel/userdata 2.ramdisk.img镜像打包和解包制作 2.1打包脚本 创建脚本pack_ramdisk.sh,将RAMDisk内容打包为ramdisk.img: # ../ramdisk.cpiogzip ../ramdisk.cpiomv ../ramdisk.cpio.gz ../ramdisk.img 2.2解包脚本 创建脚本unpack_ramdisk.sh,将ramdisk.img解包到工作目录: # ramdisk.cpiocpio -idv < ramdisk.cpiorm ramdisk.cpio 通过上面打包解包脚本可以直接修改已经制作好的ramdisk.img镜像 3.打包到boot.img 3.1配置项目文件 在项目defconfig文件中,添加以下内容: RK_USE_FIT_IMG =yRK_BOOT_FIT_ITS= "bootramdisk.its" RK_RAMDISK_IMG= "ramdisk.img" 在rk356x_bsp/device/rockchip/common/scripts/mk-kernel.sh文件中添加打包逻辑: if ; thenif ; then run_command \" $SCRIPTS_DIR /mk-fitimage.sh " \"build- $VANXOAK_CUSTOMER_NAME /kernel/ $RK_BOOT_IMG " \" $RK_BOOT_FIT_ITS " \"build- $VANXOAK_CUSTOMER_NAME / $RK_KERNEL_IMG " \"build- $VANXOAK_CUSTOMER_NAME /kernel/ $RK_RAMDISK_IMG " fi fi 4.Kernel配置与设备树修改 4.1设备树配置修改 修改设备树文件chosen节点,添加overlayroot参数: chosen: chosen {//bootargs= "earlycon=uart8250,mmio32,0xfe660000console=ttyFIQ0root=PARTUUID=614e0000-0000rwrootwait" ; bootargs = "earlycon=uart8250,mmio32,0xfe660000console=ttyFIQ0root=PARTLABEL=rootfsrootfstype=ext4rorootwaitoverlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1coherent_pool=1msystemd.gpt_auto=0cgroup_enable=memoryswapaccount=1swiotlb=0x10000net.ifnames=0" ;}; 4.2修改内核配置 确保内核启用了OverlayFS: CONFIG_OVERLAY_FS =y 5.测试效果与优化 将更新后的boot.img刷写到开发板,重启后执行: df -h 输出类似以下内容: root@hd-rk3568:~# df -h文件系统 容量 已用 可用已用% 挂载点udev 963M 8.0K 963M 1%/devtmpfs 196M 1.3M 195M 1%/run/dev/mmcblk0p6 3.2G 3.1G 0100%/root-ro/dev/mmcblk0p8 23G 590M 23G 3%/userdataoverlayroot 23G 590M 23G 3%/ 添加完上面内容后,更新boot.img到开发板,执行df-h命令可以看到rootfs分区挂载为/root-ro变为只读分区,userdata分区挂载为overlayroot保存文件系统修改差异部分。若要重置系统状态,只需清空userdata内容即可。 6.总结 通过以上步骤,您可以成功为RK3568平台配置overlayroot。这种设置使得系统文件更加安全,同时提供灵活的更新和重置能力,非常适合嵌入式场景。