自己写Linux文件系统(一):预备

为什么要干这事?原因太多不表,原理很烦不表,动手干活不废话。
 
 软件环境方面,直接在3.8版本下写,旧内核兼容性全都不管(2.6部分版本也适用)。先给自己的文件系统起个名字(小写字母和数字吧),我取个rockfs,没什么历史含义,就一名字而已。

1. 编辑 fs/Kconfig,增加一行:source "fs/rockfs/Kconfig",位置自选;
2. 创建文件夹fs/rockfs,增加文件fs/rockfs/Kconfig:
config ROCK_FS
                tristate "RockFS support"
                help
                    RockFS is ...
3. 增加文件fs/rockfs/Makefile:
# Makefile for the linux rockfs-filesystem routines.

obj-$(CONFIG_ROCK_FS) += rockfs.o
rockfs-y := super.o
4. 增加文件fs/rockfs/super.c:
/*
*    linux/fs/rockfs/super.c
*
* Copyright (C) 2013
* Xingyou Chen ([email protected])
*
*/

#include <linux/module.h>
#include <linux/fs.h>
#include <linux/exportfs.h>
#include <linux/vfs.h>
#include <linux/mount.h>
#include "rockfs.h"

static struct file_system_type rockfs_fs_type = {
                .owner                    = THIS_MODULE,
                .name                     = "rockfs",
                .mount                    = NULL,
                .kill_sb                = NULL,
                .fs_flags             = FS_REQUIRES_DEV,
};

static int __init init_rock_fs( void)
{
                 int retval = 0;
                retval = register_filesystem(&rockfs_fs_type);
                 if (retval)
                                 goto err_register;
err_register:
                 return retval;
}

static void __exit exit_rock_fs( void)
{
            unregister_filesystem(&rockfs_fs_type);
}

MODULE_AUTHOR( "Xingyou Chen");
MODULE_DESCRIPTION( "RockFS Filesystem");
MODULE_LICENSE( "GPL");
module_init(init_rock_fs)
module_exit(exit_rock_fs)
一个文件系统壳子有了,当然,rockfs_fs_type里面两个空指针,这个模块不管事。

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