一、下载要编译的版本的源码(建议放/usr/src目录下),编译整个内核。其中,在make menuconfig配置的时候,选择以模块的方式配置F2FS(选择以M的方式比编译进内核)
二、编译完成后,把F2FS的整个目录拷贝出来,进入目录,修改Makefile文件,主要就是添加相关路径,如下:
obj-$(CONFIG_F2FS_FS) += f2fs.o
f2fs-y := dir.o file.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.o extent_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
KERNELDIR:=/usr/src/linux-4.10.1
PWD:=/home/tsy/f2fs
default:
make -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *.mod.c *.ko *.symvers
上面Makefile中,红色部分是新加的。其中,PWD是在第1步中,把F2FS拷贝出来的路径;KERNELDIR是第1步中编译的源代码的路径(Makefile尽量手打,拷贝可能有错)
三、在该目录下执行make,make clean相关命令进行编译和清除编译后的文件
make是编译的命令;make clean是编译前清楚上一次编译结果的命令。
四、编译完成后,使用insmod命令将F2FS的模块插入到内核中(insmod f2fs.ko)。选择一块空的磁盘,格式化成F2FS格式的,再挂载F2FS文件系统。
1、insmod f2fs.ko(插入模块)
2、apt-get install f2fs-tools(获取f2fs工具,为格式化做准备)
3、mkfs.f2fs 磁盘A(格式化磁盘A成F2FS格式。执行了1才能执行2命令)
4、mount 磁盘A /mnt/f2fs(挂载磁盘A到/mnt/f2fs。挂载的路径建议在/mnt下)
五、如果修改了内核文件,如果再编译,运行查看输出信息等,需要先把之前的F2FS模块卸载,然后重复刚才的步骤就可以了
1、umount 磁盘A
2、rmmod f2fs.ko
关于dump_stack():
调试的时候,可以用这个函数输出调用栈的回溯信息,可以看到大概的函数调用流程。
日志查看:
dmesg命令 或 vi /var/log下的各种文件看一看
执行脚本:
#!/bin/bash
cd /home/qjx/test/f2fs
umount /mnt/f2fs/
rmmod f2fs.ko
make clean
make
insmod f2fs.ko
mount /dev/sdb1 /mnt/f2fs