F2FS模块化编译与使用

一、 编译内核

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模块

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文件系统设置一些参数,如图所示。

F2FS模块化编译与使用_第1张图片

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模块化编译与使用_第2张图片

三、 F2FS自带的debug

     在f2fs的文件夹里有debug.c文件,这是f2fs自带的debug功能,它会把一些信息统计在/sys/kernel/debug/f2fs/status文件中,只需使用命令:

cat /sys/kernel/debug/f2fs/status

便可查看打印的内容。

四、 修改F2FS的代码

举一个简单的用例,我们在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,可以查看是否多了我们添加的内容。

你可能感兴趣的:(F2FS文件系统)