1、下载合适的内核版本(大于Linux 3.8,包含F2FS文件系统),放入到/usr/src目录下(我下载的linux-4.4.10为例)
2、makemenuconfig (配置内核)
3、make -j4 (编译内核,-j4表示四个核并发编译,可以加快速度,参数根据cpu核个数即可)
4、makemodules_install (编译和安装内核模块)
5、make install(安装内核)
重启系统,选择刚编译好的内核进入(ubuntu可通过uname -a查看内核版本)。
F2FS的文件在/linux-4.4.10/fs/f2fs文件夹下面,f2fs的代码就在该目录下,也可将其拷贝出来,方便修改。
1、为了方便,修改F2FS文件夹的Makefile文件。
obj-$(CONFIG_F2FS_FS) += f2fs.o
f2fs-y := dir.ofile.o inode.o namei.o hash.o super.o inline.o
f2fs-y +=checkpoint.o gc.o data.o node.o segment.o recovery.o
f2fs-y += shrinker.oextent_cache.o
f2fs-$(CONFIG_F2FS_STAT_FS) += debug.o
f2fs-$(CONFIG_F2FS_FS_XATTR) += xattr.o
f2fs-$(CONFIG_F2FS_FS_POSIX_ACL) += acl.o
f2fs-$(CONFIG_F2FS_IO_TRACE) += trace.o
f2fs-$(CONFIG_F2FS_FS_ENCRYPTION) += crypto_policy.o crypto.o \
crypto_key.ocrypto_fname.o
KERNEL_DIR:=/usr/src/linux-4.4.10
PWD:=/usr/src/linux-4.4.10/fs/f2fs
default:
make -C $(KERNEL_DIR) M=$(PWD) modules
clean:
rm-rf *.o *.mod.c *.ko Module.symvers modules.order
注:$(KERNELDIR)变量是内核的目录,$(PWD)变量是我们要加入内核的f2fs文件系统的代码目录。make命令中-C是表示(change)改变当前makefile的路径,切换到其他makefile中去执行。然后M=表示以M的方式编译进内核。
2、在f2fs文件目录下,执行make命令,编译f2fs模块。
3、insmodf2fs.ko (载入f2fs模块)
4、sudo apt-getinstall f2fs-tools (下载f2fs工具,用于格式化磁盘)
5、mkfs.f2fs -lf2fs /dev/sdb1 (对磁盘进行格式化,我用的磁盘是/dev/sdb1)
mkfs.f2fs格式化时可对f2fs文件系统设置一些参数,如图所示。
6、mount -tf2fs /dev/sdb1 /testfs (挂载磁盘/dev/sdb1到目录/testfs下,目录/testfs则使用了f2fs文件系统,可执行df -h命令进行查看)
使用mount命令时同样可以加参数对f2fs命令进行设置。
例如设置logs个数为4,使用命令:mount -t f2fs -o active_logs=4 /dev/sdb1 /testfs
在f2fs的文件夹里有debug.c文件,这是f2fs自带的debug功能,它会把一些信息统计在/sys/kernel/debug/f2fs/status文件中,只需使用命令:
cat /sys/kernel/debug/f2fs/status
便可查看打印的内容。
举一个简单的用例,我们在f2fs文件夹的debug.c文件中的stat_show函数中,添加如下代码:
seq_printf(s,"(OverProv:%d Resv:%d)]\n\n",si->overp_segs, si->rsvd_segs);
seq_printf(s,"\nMy test:hello world \n");
seq_printf(s,"Utilization: %d%% (%d valid blocks)\n",si->utilization,si->valid_count);
1、在该文件目录中make (编译f2fs文件系统)
2、umount /dev/sdb1(卸载原来的f2fs文件系统,如没有挂载则不需要执行)
3、rmmodf2fs.ko (卸载f2fs.ko模块,如没有载入该模块则不需要执行)
4、按上面所说再次载入f2fs.ko模块,挂载文件系统。
5、执行cat/sys/kernel/debug/f2fs/status,可以查看是否多了我们添加的内容。