模組化編譯F2FS
一、下載要編譯的版本的原始碼(建議放/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