【linux系列】实现基于模块的文件系统

编译环境

  • 虚拟机操作系统: ubuntu-20.04.3-desktop-amd64
  • 原系统内核版本:5.11.0-46-generic
  • 内核源码版本:5.11.1

修改任务

基础任务
  • 修改XFS文件系统的源代码,实现新的文件系统。
  • 至少需要修改文件系统的名称。
  • 可以动态加载和卸载新的文件系统。
  • 列出操作系统中包含的文件系统列表,其中要有自己改名后的文件系统。
进阶任务
  • 重新编译Linux内核,以模块编译方式,将文件系统编入内核。

修改准备

  • 下载内核源码
  • 进入到 fs 文件夹下,复制 xfs 源码,以防修改错误导致无法恢复
    sudo cp -r xfs hwhxfs
    
  • 如下图所示
    在这里插入图片描述

修改源码

  • 所需修改的文件,均在 hwhxfs 文件夹下

    Makefile
    
    xfs_super.c
    
    xfs_sysctl.c
    

修改 Makefile
  • 使用 gedit 打开 Makefile
sudo gedit Makefile
  • 修改 ccflags-y
# 修改后
ccflags-y += -I $(src)		# needed for trace events
ccflags-y += -I $(src)/libxfs
  • 修改 obj-$(CONFIG_XFS_FS)
# 修改后
obj-$(CONFIG_XFS_FS)		+= hwhxfs.o
  • 修改左侧所有 xfs 为自己的名称,这里均修改为 hwhxfs
    在这里插入图片描述
修改 xfs_super.c
  • 使用 gedit 打开 xfs_super.c

    sudo gedit xfs_super.c
    
  • 搜索 "xfs"
    在这里插入图片描述

  • 将这两个对应修改为自己的名字,这里修改为 hwhxfs,如下图
    在这里插入图片描述

修改 xfs_sysctl.c
  • 使用 gedit 打开 xfs_sysctl.c

    sudo gedit xfs_sysctl.c
    
  • 搜索 "xfs"
    在这里插入图片描述

  • 将其对应修改为自己的名字,这里修改为 hwhxfs,如下图
    在这里插入图片描述

编译模块

  • 确保在 hwhxfs 目录下
  • 执行编译命令
sudo make -C /usr/src/linux-5.11.1/ M=$PWD
  • 编译成功后会在 hwhxfs 目录下生成 hwhxfs.ko 文件
    在这里插入图片描述

安装模块

  • 添加依赖
sudo modprobe libcrc32c

注:一般会缺少此依赖,并在安装模块时报告如下错误

insmod: ERROR: could not insert module hwhxfs.ko: Unknown symbol in module

可以使用 modinfo ./hwhxfs.ko | grep depend 命令查看需要加载的依赖


  • 安装模块
sudo insmod hwhxfs.ko
  • 查看已安装模块
lsmod

效果如下:
在这里插入图片描述


挂载文件系统

  • 为什么要进行挂载呢?

    • 每个文件系统都有独立的inode、区块、超级区块等信息,这个文件系统要能够链接到目录树才能被我们使用。而将文件系统与目录树结合的操作称之为挂载。
  • 挂载文件系统的命令

    mount -t 文件系统 设备文件名 挂载点
    
  • 文件系统:这里已经准备好了 hwhxfs 文件系统

  • 挂载点:一个目录,是文件系统的入口,我们可以在 /mnt 下新建个目录作为挂载点

    sudo mkdir /mnt/xfs
    
  • 设备文件名:设备文件,我们需要对磁盘进行分区以分配给文件系统一个存储设备

  • 查看磁盘信息

    sudo parted /dev/sda print
    

    在这里插入图片描述

  • 分区表格式有两种,即MBR(msdos)和GPT,MBR使用 fdisk 分区,GPT使用 gdisk 进行分区。

  • 这里使用 fdisk 进行分区

    sudo fdisk /dev/sda
    
  • n 新建分区

  • 若出现 无空闲扇区可用 表明当前磁盘空间不足无法进行分区
    在这里插入图片描述

  • 此时如果是虚拟机,可以通过添加磁盘来解决

  • 关机打开虚拟机设置,添加磁盘
    在这里插入图片描述

  • 一律下一步,分配磁盘空间时分配 1G 即可,更多也可以
    在这里插入图片描述

  • 添加新磁盘完成后,重启虚拟机

  • 查看新增磁盘的名字

    lsblk -l
    

    在这里插入图片描述

  • fdisk 对新增磁盘进行分区(建议先输入 m 获取 fdisk 使用帮助)

    sudo fdisk /dev/sdb
    

    在这里插入图片描述

  • 安装 xfsprogs

    sudo apt install xfsprogs
    
  • 格式化分区,将分区格式化为 xfs 类型

    sudo mkfs.xfs /dev/sdb4
    
  • 挂载文件系统

    sudo mount -t hwhxfs /dev/sdb4 /mnt/xfs
    
  • 使用 df -h 命令查看
    在这里插入图片描述

  • 卸载文件系统

    sudo umount /mnt/xfs
    

进阶任务

  • 将文件系统以模块的形式编入内核
  • 所需修改的文件如下
fs/Kconfig
fs/Makefile

fs/hwhxfs/Kconfig
fs/hwhxfs/Makefile

修改 fs/hwhxfs/Kconfig
  • Kconfig 中所有 XFS 替换为 HWHXFS
    在这里插入图片描述
修改 fs/hwhxfs/Makefile
  • 将 Makefile 中所有 XFS 替换为 HWHXFS
    在这里插入图片描述
修改 fs/Kconfig
  • Kconfig 中搜索 xfs,对应添加一行 source
    在这里插入图片描述
修改 fs/Makefile
  • Makefile 中搜索 xfs,对应添加一行 obj-

在这里插入图片描述


编译安装
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鞠杉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值