mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2026-09-08 23:57:59 +08:00
主要变更: * 实现完整的mount系统调用,支持从块设备挂载文件系统 * 新增ext4文件系统支持,基于another_ext4库实现 * 引入MountableFileSystem trait和文件系统工厂模式,提升VFS架构 * 完善块设备管理,自动将磁盘和分区注册到devfs(/dev) * 支持virtio块设备的分区检测和挂载 * 新增umount2系统调用支持文件系统卸载 * 重构symlink相关系统调用,提升代码组织 * 提供硬盘镜像制作脚本和测试程序 技术细节: - 支持ext4和vfat文件系统的挂载 - 实现MBR分区表解析和GenDisk管理 - 集成页面缓存支持提升文件系统性能 - 完善错误处理和设备号管理 - 新增详细的VFS挂载机制文档 测试验证: - 新增test-mount-ext4和test-mount-fat测试程序 - 提供make_fs_image.sh脚本创建测试镜像 - 验证挂载、读写、卸载完整流程 Co-authored-by: Samuka007 <samuka007@dragon-os.org> Co-authored-by: oeasy1412 <oeasy1412@gmail.com> Co-authored-by: fslongjin <longjin@DragonOS.org>
65 lines
1.7 KiB
Bash
Executable File
65 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# 检查是否以 root 权限运行
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo "错误:此脚本必须以 root 权限运行!"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# 获取项目根目录(无论从哪里调用脚本)
|
|
root_folder="$(cd "$(dirname "$0")/.." && pwd)"
|
|
echo "项目根目录:$root_folder"
|
|
mkdir -p "$root_folder/bin"
|
|
|
|
LOOP_DEVICE=""
|
|
|
|
# 自动清理 trap
|
|
cleanup() {
|
|
if [[ -n "${LOOP_DEVICE:-}" ]]; then
|
|
echo "清理:释放 loop 设备 $LOOP_DEVICE"
|
|
losetup -d "$LOOP_DEVICE" || echo "警告:无法释放 $LOOP_DEVICE"
|
|
fi
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# 创建 ext4 镜像
|
|
EXT4_IMG="ext4.img"
|
|
EXT4_SIZE="1G"
|
|
echo "创建 ext4 镜像 $EXT4_IMG 大小 $EXT4_SIZE"
|
|
dd if=/dev/zero of="$EXT4_IMG" bs=1M count=1024 status=progress
|
|
|
|
LOOP_DEVICE=$(losetup --find --show "$EXT4_IMG")
|
|
echo "loop 设备为 $LOOP_DEVICE"
|
|
echo "格式化为 ext4..."
|
|
mkfs.ext4 "$LOOP_DEVICE"
|
|
losetup -d "$LOOP_DEVICE"
|
|
LOOP_DEVICE=""
|
|
|
|
mv "$EXT4_IMG" "$root_folder/bin/$EXT4_IMG"
|
|
echo "ext4 镜像已保存到 $root_folder/bin/$EXT4_IMG"
|
|
|
|
# 创建 fat 镜像
|
|
FAT_IMG="fat.img"
|
|
FAT_SIZE="64M"
|
|
echo "创建 fat 镜像 $FAT_IMG 大小 $FAT_SIZE"
|
|
dd if=/dev/zero of="$FAT_IMG" bs=1M count=64 status=progress
|
|
|
|
# 创建分区表和分区
|
|
parted -s "$FAT_IMG" mklabel msdos
|
|
parted -s "$FAT_IMG" mkpart primary fat32 1MiB 100%
|
|
|
|
LOOP_DEVICE=$(losetup --find --partscan --show "$FAT_IMG")
|
|
PARTITION="${LOOP_DEVICE}p1"
|
|
echo "loop 设备为 $LOOP_DEVICE,分区为 $PARTITION"
|
|
sleep 1 # 等待内核识别分区
|
|
|
|
echo "格式化为 fat32..."
|
|
mkfs.vfat -F 32 "$PARTITION"
|
|
losetup -d "$LOOP_DEVICE"
|
|
LOOP_DEVICE=""
|
|
|
|
mv "$FAT_IMG" "$root_folder/bin/$FAT_IMG"
|
|
echo "fat 镜像已保存到 $root_folder/bin/$FAT_IMG"
|