1.鍐呮牳鍚姩璋冪敤start_kernel鍑芥暟榪涜鍒濆鍖栥?
asmlinkage void __init start_kernel(void) //init\Main.c:528
{
buffer_init();
key_init();
security_init();
vfs_caches_init(totalram_pages);//678琛岋紝vfs鍒濆鍖?/span>
signals_init();
}
2.start_kernel璋冪敤vfs_caches_init瀵箆fs榪涜鍒濆鍖栥?br>
//fs\Dcach.c:2354琛?/span>
void __init vfs_caches_init(unsigned long mempages)
{
.......
dcache_init();
inode_init();
files_init(mempages);
mnt_init(); //mnt鍒濆鍖?/span>
bdev_cache_init();
chrdev_init();
}
3.鍦╲fs_caches_init璋冪敤fs\namespace.c 2321琛岀殑mnt_init鍑芥暟
void __init mnt_init(void)
{


init_rootfs(); //鍒濆鍖杛ootfs鏂囦歡緋葷粺
init_mount_tree(); //鍒濆鍖栧姞杞芥爲
}
4. fs\ramfs絎?08琛岀殑init_rootfs鍑芥暟鍒濆鍖杛ootfs鏂囦歡緋葷粺
int __init init_rootfs(void)
{
int err;
err = bdi_init(&ramfs_backing_dev_info);
if (err)
return err;
err = register_filesystem(&rootfs_fs_type);//娉ㄥ唽rootfs鏂囦歡緋葷粺
if (err)
bdi_destroy(&ramfs_backing_dev_info);
return err;
}
rootfs鏂囦歡緋葷粺淇℃伅fs\ramfs絎?89琛?
static struct file_system_type rootfs_fs_type = {
.name = "rootfs",
.get_sb = rootfs_get_sb,
.kill_sb = kill_litter_super,
};
5.璋冪敤register_filesystem鍑芥暟灝唕ootfs娉ㄥ唽鍒?span style="font-weight: bold; color: #ff0000; font-family: 榛戜綋;">file_systems鏂囦歡緋葷粺涓?br>
//fs\Filesystem.c絎?9琛屻?br>int register_filesystem(struct file_system_type * fs)
{
int res = 0;
struct file_system_type ** p;
BUG_ON(strchr(fs->name, '.'));
if (fs->next)
return -EBUSY;
INIT_LIST_HEAD(&fs->fs_supers);
write_lock(&file_systems_lock);
p = find_filesystem(fs->name, strlen(fs->name));//鏌ユ壘鍒版枃浠剁郴緇熷姞杞戒綅緗?br> if (*p)
res = -EBUSY;
else
*p = fs;
write_unlock(&file_systems_lock);
return res;
}
file_systems鍙橀噺鏄墍鏈夋枃浠剁郴緇熼摼琛ㄧ殑澶存寚閽堛傞氳繃浠ヤ笂榪囩▼rootfs_fs_type灝卞姞鍏ュ埌浜唂ile_systems閾捐〃澶寸殑file_system_type綾誨瀷鐨勯摼琛ㄤ腑銆傚彲浠ラ氳繃file_systems鎸囬拡閬嶅巻榪欎釜閾捐〃錛屽緱鍒扮壒瀹氱殑鏂囦歡緋葷粺file_system_type
鎸囬拡銆?br> 
]]>