Jiwu Bu

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  32 随笔 :: 0 文章 :: 25 评论 :: 0 Trackbacks
对linux-2.6.34源码rootfs文件系统加载学习笔记

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初始化
    signals_init();
}
2.start_kernel调用vfs_caches_init对vfs进行初始化。
//fs\Dcach.c:2354行
void __init vfs_caches_init(unsigned long mempages)
{
   
.......
    dcache_init();
    inode_init();
    files_init(mempages);
    mnt_init(); 
//mnt初始化
    bdev_cache_init();
    chrdev_init();
}

3.在vfs_caches_init调用fs\namespace.c 2321行的mnt_init函数
void __init mnt_init(void)
{
    
    init_rootfs();    
//初始化rootfs文件系统
    init_mount_tree(); //初始化加载树
}
4. fs\ramfs第308行的init_rootfs函数初始化rootfs文件系统
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第289行
static struct file_system_type rootfs_fs_type = {
    .name        
= "rootfs",
    .get_sb        
= rootfs_get_sb,
    .kill_sb    
= kill_litter_super,
};

5.调用register_filesystem函数将rootfs注册到file_systems文件系统中。
//fs\Filesystem.c第69行。
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));//查找到文件系统加载位置
    
if (*p)
        res 
= -EBUSY;
    
else
        
*= fs;
    write_unlock(
&file_systems_lock);
    
return res;
}
file_systems变量是所有文件系统链表的头指针。通过以上过程rootfs_fs_type就加入到了file_systems链表头的file_system_type类型的链表中。可以通过file_systems指针遍历这个链表,得到特定的文件系统file_system_type 指针。
posted on 2010-07-04 16:58 bujiwu 阅读(2822) 评论(0)  编辑 收藏 引用 所属分类: Linux内核VFS

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理