编译环境
- 虚拟机操作系统:
ubuntu-20.04.3-desktop-amd64
- 原系统内核版本:
5.11.0-46-generic
- 内核源码版本:
5.11.1
修改任务
基础任务
- 修改XFS文件系统的源代码,实现新的文件系统。
- 至少需要修改文件系统的名称。
- 可以动态加载和卸载新的文件系统。
- 列出操作系统中包含的文件系统列表,其中要有自己改名后的文件系统。
进阶任务
- 重新编译Linux内核,以模块编译方式,将文件系统编入内核。 ###
修改准备
- 下载内核源码
- 进入到 fs 文件夹下,复制 xfs
源码,以防修改错误导致无法恢复
修改源码
1 2 3 4 5
| Makefile
xfs_super.c
xfs_sysctl.c
|
修改 Makefile
1 2 3
| ccflags-y += -I $(src) ccflags-y += -I $(src)/libxfs
|
1 2
| obj-$(CONFIG_XFS_FS) += hwhxfs.o
|
- 修改左侧所有 xfs 为自己的名称,这里均修改为
hwhxfs
修改 xfs_super.c
- 将这两个对应修改为自己的名字,这里修改为
hwhxfs,如下图
修改 xfs_sysctl.c
- 将其对应修改为自己的名字,这里修改为
hwhxfs,如下图
编译模块
1
| sudo make -C /usr/src/linux-5.11.1/ M=$PWD
|
- 编译成功后会在 hwhxfs 目录下生成
hwhxfs.ko 文件
安装模块
注:一般会缺少此依赖,并在安装模块时报告如下错误
1
| insmod: ERROR: could not insert module hwhxfs.ko: Unknown symbol in module
|
可以使用 modinfo ./hwhxfs.ko | grep depend
命令查看需要加载的依赖
效果如下:
挂载文件系统
- 为什么要进行挂载呢?
- 每个文件系统都有独立的inode、区块、超级区块等信息,这个文件系统要能够链接到目录树才能被我们使用。而将文件系统与目录树结合的操作称之为挂载。
- 挂载文件系统的命令
- 文件系统:这里已经准备好了 hwhxfs 文件系统
- 挂载点:一个目录,是文件系统的入口,我们可以在
/mnt
下新建个目录作为挂载点
- 设备文件名:设备文件,我们需要对磁盘进行分区以分配给文件系统一个存储设备
- 查看磁盘信息
1
| sudo parted /dev/sda print
|
- 分区表格式有两种,即MBR(msdos)和GPT,MBR使用
fdisk
分区,GPT使用 gdisk
进行分区。
- 这里使用
fdisk
进行分区
- 按
n
新建分区
- 若出现 无空闲扇区可用
表明当前磁盘空间不足无法进行分区
- 此时如果是虚拟机,可以通过添加磁盘来解决
- 关机打开虚拟机设置,添加磁盘
- 一律下一步,分配磁盘空间时分配 1G
即可,更多也可以
- 用
fdisk
对新增磁盘进行分区(建议先输入 m 获取 fdisk
使用帮助)
1
| sudo apt install xfsprogs
|
1
| sudo mount -t hwhxfs /dev/sdb4 /mnt/xfs
|
进阶任务
- 将文件系统以模块的形式编入内核
- 所需修改的文件如下
1 2 3 4 5
| 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-
编译安装
- 在
File systems
下找到 HWHXFS
设置为模块编译,如下图