From 9bf52cf2ab8eefde5e84b89f14b0a39eff42af97 Mon Sep 17 00:00:00 2001 From: fslongjin Date: Sun, 3 Jul 2022 22:37:54 +0800 Subject: [PATCH] =?UTF-8?q?:wrench:=20=E4=BF=AE=E6=AD=A3=E4=BA=86=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E7=A1=AC=E7=9B=98=E9=95=9C=E5=83=8F=E7=9A=84=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/.gitignore | 1 + docs/kernel/filesystem/vfs/overview.md | 54 +++++++++++++++++++++++++- tools/create_hdd_image.sh | 7 ++-- 3 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 .vscode/.gitignore diff --git a/.vscode/.gitignore b/.vscode/.gitignore new file mode 100644 index 00000000..bf0824e5 --- /dev/null +++ b/.vscode/.gitignore @@ -0,0 +1 @@ +*.log \ No newline at end of file diff --git a/docs/kernel/filesystem/vfs/overview.md b/docs/kernel/filesystem/vfs/overview.md index c38aed82..4bb8c7b3 100644 --- a/docs/kernel/filesystem/vfs/overview.md +++ b/docs/kernel/filesystem/vfs/overview.md @@ -26,7 +26,7 @@ ​ 我们对文件进行操作都会使用到文件描述符,具体来说,就是要调用文件描述符之中的file_ops所包含的各种方法。 -## 挂载文件系统到VFS +## 注册文件系统到VFS ​ 如果需要注册或取消注册某个具体文件系统到VFS之中,则需要以下两个接口: @@ -70,4 +70,54 @@ struct vfs_filesystem_type_t **next** -​ 指向链表中下一个`struct vfs_filesystem_type_t`的指针。 \ No newline at end of file +​ 指向链表中下一个`struct vfs_filesystem_type_t`的指针。 + +## 超级块(superblock)对象 + +    一个超级块对象代表了一个被挂载到VFS中的具体文件系统。 + +### struct vfs_superblock_t + +    该数据结构为超级块结构体。 + +    该数据结构定义在`kernel/filesystem/VFS/VFS.h`中,结构如下: + +```c +struct vfs_superblock_t +{ + struct vfs_dir_entry_t *root; + struct vfs_super_block_operations_t *sb_ops; + void *private_sb_info; +}; +``` + +**root** + +    该具体文件系统的根目录的dentry + +**sb_ops** + +    该超级块对象的操作方法。 + +**private_sb_info** + +    超级块的私有信息。包含了具体文件系统的私有的、全局性的信息。 + +### struct vfs_super_block_operations_t + +    该数据结构为超级块的操作接口。 + +    该数据结构定义在`kernel/filesystem/VFS/VFS.h`中,结构如下: + +```c +struct vfs_super_block_operations_t +{ + void (*write_superblock)(struct vfs_superblock_t *sb); + void (*put_superblock)(struct vfs_superblock_t *sb); + void (*write_inode)(struct vfs_index_node_t *inode); // 将inode信息写入磁盘 +}; +``` + +**write_superblock** + +     \ No newline at end of file diff --git a/tools/create_hdd_image.sh b/tools/create_hdd_image.sh index a238ffdb..f658647c 100644 --- a/tools/create_hdd_image.sh +++ b/tools/create_hdd_image.sh @@ -1,11 +1,12 @@ echo "Creating virtual disk image..." -# qemu-img create -f raw disk.img 16M -# 输入o m w即可 +qemu-img create -f raw disk.img 16M +# 分别输入o、n, 然后按4次回车,直到回到fdisk的默认界面, +# 再输入w即可 +# 按顺序输入,并且,每次输入完成后要按下回车) fdisk disk.img LOOP_DEVICE=$(sudo losetup -f --show -P disk.img) \ || exit 1 -sudo losetup -P /dev/loop1 --show disk.img # lsblk echo ${LOOP_DEVICE}p1