overlayroot 是一种利用 overlayfs 实现的功能,可以将根文件系统设置为只读,并通过一个临时的写层来进行文件系统的修改。这种方法非常适合嵌入式设备或需要确保系统文件完整性和安全性的场景。本文将以 rk3568 平台为例,详细介绍如何制作 overlayroot。
103.png
制作精简文件系统ramdisk1.1 环境准备目标系统:确保系统支持 OverlayFS(内核版本 ≥ 3.18)。工具和依赖:一个支持 OverlayFS 的 Linux 内核。busybox 或其他必要的系统工具。
1.2 OverlayFS 的基本原理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
ramdisk.img 镜像打包和解包制作2.1 打包脚本创建脚本 pack_ramdisk.sh,将 RAMDisk 内容打包为 ramdisk.img:
#!/bin/bashcd ramdisk_contentsfind . | cpio -o -H newc > ../ramdisk.cpiogzip ../ramdisk.cpiomv ../ramdisk.cpio.gz ../ramdisk.img
2.2 解包脚本创建脚本 unpack_ramdisk.sh,将 ramdisk.img 解包到工作目录:
#!/bin/bashmkdir ramdisk_contentscd ramdisk_contentsgunzip -c ../ramdisk.img > ramdisk.cpiocpio -idv
通过以上打包解包脚本,可以直接修改已经制作好的 ramdisk.img 镜像。
打包到 boot.img3.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 文件中添加打包逻辑:
智谱清言 – 免费全能的AI助手
智谱清言 – 免费全能的AI助手
2 查看详情
if [-n "$RK_BOOT_FIT_ITS"]; then if [-z "$RK_ROOTFS_INITRD"]; 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
Kernel 配置与设备树修改4.1 设备树配置修改修改设备树文件 chosen 节点,添加 overlayroot 参数:
chosen: chosen { //bootargs = "earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait"; bootargs ="earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0 root=PARTLABEL=rootfs rootfstype=ext4 ro rootwait overlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1 coherent_pool=1m systemd.gpt_auto=0 cgroup_enable=memory swapaccount=1 swiotlb=0x10000 net.ifnames=0"; };
4.2 修改内核配置确保内核启用了 OverlayFS:
CONFIG_OVERLAY_FS=y
测试效果与优化将更新后的 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 0 100% /root-ro/dev/mmcblk0p8 23G 590M 23G 3% /userdataoverlayroot 23G 590M 23G 3% /
添加完以上内容后,更新 boot.img 到开发板,执行 df -h 命令可以看到 rootfs 分区挂载为 /root-ro 变为只读分区,userdata 分区挂载为 overlayroot 保存文件系统修改差异部分。若要重置系统状态,只需清空 userdata 内容即可。
总结通过以上步骤,您可以成功为 RK3568 平台配置 overlayroot。这种设置使得系统文件更加安全,同时提供灵活的更新和重置能力,非常适合嵌入式场景。
以上就是Linux文件系统的安全保障—Overlayroot!的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/482077.html
微信扫一扫
支付宝扫一扫