笔记 Linux文件系统的初始化

本文详细介绍了Linux内核在启动过程中如何初始化文件系统,包括调用start_kernel -> vfs_caches_init -> 各种数据结构初始化,并重点讲解了mnt_init如何挂载根文件系统和注册"sysfs"、"rootfs"文件系统的过程。通过对alloc_vfsmnt、alloc_super、d_alloc_root等关键函数的解析,揭示了Linux内核如何构建文件系统结构。
摘要由CSDN通过智能技术生成

uboot结束时调用start_kernel(/3.1.10/init/main.c)函数启动linux


start_kernel做内存初始化,操作系统数据结构初始化,调度系统初始化,各种资源初始化之后会调用vfs_caches_init初始化文件系统(/3.1.10/fs/dcache.c)


vfs_cache_init:

vfs_cache_init调用inode_init(/3.1.10/fs/inode.c)初始化inode数据结构,就是申请一大片内存,哈希表;

vfs_cache_init调用files_init(/3.1.10/fs/file_table.c)初始化文件句柄数据结构;

vfs_cache_init调用mnt_init(/3.1.10/fs/namespace.c)挂载根文件系统"/";

vfs_cache_init调用bdev_cache_init(/3.1.10/fs/block_dev.c)初始化块设备文件系统;

vfs_cache_init调用chrdev_init(/3.1.10/fs/char_dev.c)初始化字符设备文件系统。


mnt_init:

mnt_init调用sysfs_init(/3.1.10/fs/mount.c)注册"sysfs"类型的文件系统

    sysfs_init调用sysfs_inode_init(/3.1.10/fs/inode.c)

        sysfs_inode_init调用bdi_init(&sysfs_backing_dev_info)初始化backing_dev(???)

    sysfs_init调用register_filesystem(&sysfs_fs_type)(/3.1.10/fs/filesystem.c)注册类型为"sysfs"的文件系统

        register_filesystem将sysfs_fs_type添加到file_systems的全局链表中

    sysfs_init再调用kern_mount(/3.1.10/fs/namespace.c)将sysfs_fs_type绑定

        kern_mount_data调用vfs_kern_mount

            vfs_kern_mount调用alloc_vfsmnt分配一个mount的数据结构

                alloc_vfsmnt调用mnt_alloc_id分配一个mount id

               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值