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调用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