proc源码解析(三)--proc初始化

本文详细解析了Linux内核中proc文件系统的初始化过程,包括proc_init_inodecache、register_filesystem、proc_misc_init等关键步骤。介绍了如何创建proc的根目录、子目录以及相关文件,如/proc/fs、/proc/driver等,以及如何通过create_proc_read_entry和create_seq_entry创建只读和可读写文件。此外,还探讨了proc_get_sb和proc_fill_super在获取super_block及初始化inode和dentry中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   在使用proc之前,我们必须首先初始化并挂载proc,并在内核内存中创建数据结构来描述文件系统。但是,不同的体系结构拥有不同的proc内容,所以,在初始化阶段并不完全创建子目录的内容,有些文件要等到系统运行时动态创建。Proc文件系统初始化的流程图如下:

  proc_root_init的定义定义如下:


void __init proc_root_init(void)
{
    int err = proc_init_inodecache();
    err = register_filesystem(&proc_fs_type);
    。。。
   proc_mnt = kern_mount_data(&proc_fs_type, &init_pid_ns);
   proc_misc_init();
    proc_net_init();
    。。。
    proc_root_fs = proc_mkdir("fs", NULL);
    proc_root_driver = proc_mkdir("driver", NULL);
    proc_mkdir("fs/nfsd", NULL);
   。。。
    proc_bus = proc_mkdir("bus", NULL);
    proc_sys_init();


int __init proc_init_inodecache(void):为proc_inode创建slab cache,这是proc文件系统的主要部分,通常需要快速创建或销毁。
int register_filesystem(struct file_system_type * fs):注册文件系统类型proc,这个过程是文件系统初始化的关键步骤,下边会专门解释这个步骤。


struct vfsmount *kern_mount_data(struct file_system_type *type, void *data)
{
    return vfs_kern_mount(type, MS_KERNMOUNT, type->name, data);
}


vfs_kern_mount:创建与proc_fs_type相关的vfsmount结构,该函数在VFS中已有讲述。
proc_misc_init:创建/proc目录下的文件和子目录,每个文件的创建都由相应的函数来完成,例如:meminfo的创建由 create_proc_read_entry 创建,而meminfo_read_proc则用于初始化meminfo的read_proc函数。其实际的调用过程是:


void __init proc_misc_init(void)
{
    static struct {
    char *name;
    int (*read_proc)(char*,char**,off_t,int,int*,void*);
    } *p, simple_ones[] = {
    {"loadavg", loadavg_read_proc},
    {"uptime", uptime_read_proc},
    {"meminfo", meminfo_read_proc},
    {"version", version_read_proc},
    。。。
    {"filesystems", filesystems_read_proc},
    {"cmdline", cmdline_read_proc},
    {"execd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值