linux 内核/sys 文件系统介绍,linux内核文件系统框架详细介绍

随着linux系统不断的改变,现在的linux越来越强大,功能越来越多,支持的系统的格式随之增加,那怎么知道我手中的内核本身已经支持哪些文件系统呢?如果你对内核目录的结构了解的话,就很轻松的能找到,他们就在根目录的fs下,如果自己想要的文件系统没有支持的,就需要自己去移植了,这是后话,下面就看看这些文件系统在内核中是怎样工作的。

fd9c226fda6975b09e9367649c487fe3.png

linux内核文件系统框架详细介绍,在这里豆豆以linux-2.6.22的内核 ext3文件系统为例

在fs/ext3/Super.c中

1:出入口函数

init_ext3_fs //入口

register_filesystem(&ext3_fs_type); //注册

exit_ext3_fs //出口

unregister_filesystem(&ext3_fs_type); //卸载

我是怎么知道这是出入口函数的呢,相信做驱动程序的再熟悉不过了,那就是他们了

module_init(init_ext3_fs)

module_exit(exit_ext3_fs)

下面重点看看 ext3_fs_type 和 register_filesystem

2:上面提到的 ext3_fs_type

static struct file_system_type ext3_fs_type = {

.owner = THIS_MODULE,

.name = "ext3", //名字

.get_sb = ext3_get_sb, //挂载时

.kill_sb = kill_block_super, //卸载

.fs_flags = FS_REQUIRES_DEV,

};

这是个 file_system_type 结构体

在挂载时,调用get_sb方法;卸载时,调用kill_sb方法,这些都是和具体的文件系统的格式相关的,在这先不分析

3:register_filesystem 在fs/Filesystems.c中

register_filesystem

INIT_LIST_HEAD //初始化链表

write_lock

p = find_filesystem(fs->name, strlen(fs->name)); //检测是不是已经支持了该文件系统,有则break,无则返回,在这不太好理解的关键在于struct file_system_type **p;

for (p=&file_systems; *p; p=&(*p)->next)

if (strlen((*p)->name) == len &&

strncmp((*p)->name, name, len) == 0)

break;

return p;

if (*p)

res = -EBUSY;

else

*p = fs; //如果还没有支持该文件系统,则添加支持

return res; //如果还没支持返回0,应经支持返回 -EBUSY

这样就完成了注册。

下面在看看系统是怎么来调用的

4:sys_sysfs 在fs/Filesystems.c中

sys_sysfs(int option, unsigned long arg1, unsigned long arg2)

case 1: fs_index

for (tmp=file_systems, index=0 ; tmp ; tmp=tmp->next, index++) {

if (strcmp(tmp->name,name) == 0) {

err = index;

break;

}

} //通过比较 name 来确定使用哪个类型的文件系统

case 2: fs_name

case 3: fs_maxindex

综上来说,一共有两条主线。

1:通过配置内核来设定可以支持哪些文件系统,ok后这些文件系统通过 register_filesystem 一一注册,这是在系统启动的过程中就已经处理完了

2:通过 sys_sysfs 系统调用来选择使用已经注册好的哪一个文件系统,最终去执行该文件系统对应的 file_system_type 结构中的方法

linux系统内核文件框架就介绍到这里,希望对linux用户学习与操作有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值