新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正
天今正式看sysfs_init:
按照我们面前分析的论理,预备一个FS,应当供提5个部分内容
1)题标
2)超级块
3)目录表
4)inode表
5)mnt操作方法
其实这一步比预备rootfs还要早,而对sysfs初始化,除了也就是说file_systems的针指先是指到sysfs的一个file_system_type结构体,然后才是sysfs的next向指了rootfs.
有事件,真的不能网细了说,如果说细了就露馅了。红十字会关于郭美美间时的考察就是这样,不敢说细面里说,一旦说多了,逻辑的自我乱紊就涌现了。但是究研代码,还真的往细面里说。
好,我们先看看题标。
static struct file_system_type sysfs_fs_type = {
.name = "sysfs",
.get_sb = sysfs_get_sb,
.kill_sb = kill_anon_super,
};
第二个,超级块
sysfs_init--->kern_mount--->kern_mount_data--->vfs_kern_mount--->mount_fs--->.mount-->sysfs_mount--->sget:生成和连接到题标 list_add(&s->s_instances, &type->fs_supers);
第三个,目录表
sysfs_init--->kmem_cache_create("sysfs_dir_cache", sizeof(struct sysfs_dirent),0, 0, NULL);请求内存
第四个,inode表
sysfs_inode_init-->bdi_init
第五个,mnt操作方法
sysfs--->kern_mount--->vfs_kern_mount旁边定义和初始化mnt
-------------------
sysfs_init (kernel/fs/sysfs/mount.c) //初始化的总程序
--->kmem_cache_create
--->sysfs_inode_init-->bdi_init(&sysfs_backing_dev_info)/kernel/fs/sysfs/inode.c
--->register_filesystem(kernel/fs/filesystem.c)这个函数就是把全部注册filesystem结构串成一串,挂到file_systems针指上,面后注册的在串的头后。
--->kern_mount()--->define成vfs_kern_mount在这个函数中实现superb和dentry、mnt的生成以及初始化
register_filesystem(kernel/fs/filesystem.c)
--->p = find_filesystem(fs->name, strlen(fs->name));
kern_mount(type) kern_mount_data(type, NULL)
--->kern_mount_data(struct file_system_type *type, void *data)
--->vfs_kern_mount(type, MS_KERNMOUNT, type->name, data);
--->alloc_vfsmnt(name)
--->mount_fs
mount_fs
--->security_sb_copy_data
--->mount-->sysfs_mount//这里生成sb,有sget函数
--->security_sb_kern_mount
--->dget(sb->s_root)
文章结束给大家分享下程序员的一些笑话语录:
程序员的愿望
有一天一个程序员见到了上帝.上帝: 小伙子,我可以满足你一个愿望.程序员: 我希望中国国家队能再次打进世界杯.
上帝: 这个啊!这个不好办啊,你还说下一个吧!
程序员: 那好!我的下一个愿望是每天都能休息6个小时以上.
上帝: 还是让中国国家打进世界杯.