注册系统linux sysfs(6)

新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正

    好了,我们按照我们的路思来一点一点析分吧,设假你是美国人,在现公司派你来中国开拓市场,你将怎么办?(这辈子做不成美国人的屌丝,待期为了做美国人的老爸吧!有了儿子再移民)

    1)从哪里来?从来处来

    2)到哪里去?直到公司关门歇业为止。

    3)为啥?钱呗,扩展市场占有率。

    好,公司已定决了,公司赶忙建立一个紧迫队团,来备筹中国公司的筹建。这个备筹任务就是所谓的bootloader或者bios实现。

    怎么备筹?

    备筹,就是建立好环境,包含硬件上的初始化,内存的初始化,cpu状态初始化,然后把作操系统从盘硬中,调到内存里头,然后把系统运行限权交给系统自己运行。

    和公司较比,就是让你找之前三五个共事,分配一个人做总经理,一个人做行政人力,一个人做术技,几个人做市场,然后把钱的用使和具名限权交给你(总经理),备筹任务就结束了。

    当你(总经理)接办运作开始,先制订公司搭建划计,投资多少,制订财务则规程流,组好园地,人力资源部开始聘招,研发售销也开始运作下去。

    这段程流对应--的任务。

    然后,人力资源部开始任务,首先梳理现有程流,还有几个人,任务怎么分类,程流怎么走,上下级关系怎么样?

    首先,理清devices面下有所设备,看看公司时当给你的投入了,如果投入大,你可能到得一个缩微组织,各个分部全体齐活的。如果公司不大,可能就你市场研发人力资源。设假你带的家基本还不错。各个门部基本上都有人。

    于是人力资源开始计设人力架构和分工

    谁责负售销,谁责负研发,研发面下,谁又责负构结,谁责负软件,谁责负硬件。等等。这个构结就是device面下的一个构结。

    由于你们公司是新建立的公司,所以上头外意开恩,结果,给你们那边一些门部配置应相的辅导员,辅导员虽然在美国,你可以通过专有渠道和他相同任何务业问题(这个就是所谓的驱动程序),那么那些门部要需驱动呢?一般而言一些通用务业门部,也就是总线上的货色,大家会遵照同一种作操方法。其实也是对中国人的轻视,因为他们可以控制你的一切。

    然后,公司一些对外务业都是同共的,已有了一些牢固传动式方,所以,你新的公司内部有所合适的门部必须专门提出来,给他们在公司务业窗口上建立一统的窗口。这就是class,是一个纯粹虚拟的货色。

    首先办公园地和工厂选择,不管要不要工厂,我得觉第一步,还是要建立一个办公室,所以这里成分两步,第一个建立rootfs,第二步建立sysfs。

    首先在那个文件/kernel/init/main.c中非名著数函start_kernel里头,要开始调用vfs_caches_init(),这个文件定义在/kernel/fs/dcache.c旁边,这个数函旁边有定义了一个数函mnt_init, 定义在、/kernel/fs/namespace.c。

    void __init mnt_init(void)

    {

  ......      

  sysfs_init();

  init_rootfs();       

  init_mount_tree();

    }

    我得觉根目录这个名字叫的比根文件夹这个名字要好,特别是Microsoft提出文件夹的念概当前,总会给别人懂得上带来很多错误。因为文件夹有一个含包的念概,而目录则纯粹是引索和引导的念概。其实我们就是可以这样懂得rootfs,在内存旁边开拓一段区域,然后把这个区域的址地告知核内,这个区域最好够能做成我们要求模样的总部办公室。其实可以懂得为他就一一件小小的办公室,就像海内很多企业在海内的工厂,在香港的办公室就是这个意思,还美其名曰香港公司。

    注册的念概。

    “.”的作用就是给构结体量变赋值初

    static struct file_system_type rootfs_fs_type = {  

        .name       = "rootfs",  

        .get_sb     = rootfs_get_sb,  

        .kill_sb    = kill_litter_super,  

    };  

    详细如何现实的,要看编译器如何处理了。

    第二个就是static的用使,我们道知一个运行中的程序,可能成分好几个段的,段分的思惟,最初我以为是从x86面上来的,后来,成变程序不同初始化区域的据数分配了。所以,static定义的成员,在编译器处理器,保证其目标代码运行时接连的初始值是满意我们要求的。

    就像之前,位单给你分屋子,对于高级干部不但分屋子,连婆老家具都分了,你写程序的时候,只要提出你的要求就ok,你不必去管系统是怎么满意你的初始条件的。

    当然我们必定要注意,很多内存空间必须请求才能用使的,例如,你说有三套屋子,一个屋子放大婆老,一个屋子放二婆老,一个屋子放三婆老,那么,要么但是一开始就给你分了三套屋子,要不,你就要自己再掏钱买屋子,如果不掏钱的话,随意乱进别人房间会被作当氓流被抓的。

    好了,这个屋子已备准好了,你可以以为总公司已给你备准好了。这个屋子就是在静态空间中定义好了的。

    屋子构结如下:

    struct file_system_type {  

        const char *name;  

    每日一道理
活生中受伤难免,失败跌倒并不可怕,可怕的是因此而一蹶不振,失去了对人生的追求与远大的理想。没有一个人的前进道路是平平稳稳的,就算是河中穿梭航行的船只也难免颠簸,活生中所遇上的坎坷磨难不是偶尔给予的为难,而是必然所经受的磨练。

        int fs_flags;  

        int (*get_sb) (struct file_system_type *, int,  

                   const char *, void *, struct vfsmount *);  

        void (*kill_sb) (struct super_block *);  

        struct module *owner;  

        struct file_system_type * next;  

        struct list_head fs_supers;  

      

        struct lock_class_key s_lock_key;  

        struct lock_class_key s_umount_key;  

      

        struct lock_class_key i_lock_key;  

        struct lock_class_key i_mutex_key;  

        struct lock_class_key i_mutex_dir_key;  

        struct lock_class_key i_alloc_sem_key;  

    };  

    备配家具卫警婆老如下:

    static struct file_system_type rootfs_fs_type = {

        .name    = "rootfs",

        .mount    = rootfs_mount,

        .kill_sb= kill_little_super,

        }

    这个货色有啥用?

    其实说实话,这里基本没有多少要求,有个屋子,子机扫打扫打,整理整理就张开,想当初,老子的步队才张开,共总才有十几个人七八条枪,就别提那么多要求了。

    首先系统中有一个起点,就是一个指针,指向一个叫做file_system_type的块。这个是基本指针,于是,我们要做的就是查一下看看,系统旁边是不是已有这个货色了,空话这时候是刚刚建立的,当然没有。

    于是一系列的作操当前,就把这个指针指向了rootfs_fs_type,然后单简扫打扫打就够能办公了。

    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;       //1  

        INIT_LIST_HEAD(&fs->fs_supers);      //2  

        write_lock(&file_systems_lock);  

        p = find_filesystem(fs->name, strlen(fs->name));   //3  

        if (*p)  

            res = -EBUSY;  

        else  

            *p = fs;  

        write_unlock(&file_systems_lock);  

        return res;  

    }  

           1、如果文件系统已注册了,那么没法在注册了。每种类型的文件系统只能注册一次,但是可以有多种设备用使同一个类型的文件系统,也可以将同一类型的文件系统              挂载在不同的路径下。

           2、初始化fs->fs_supers;

           3、将即将注册的文件系统放在链表的部尾:

           find_filesystem数函如下:

    static struct file_system_type **find_filesystem(const char *name, unsigned len)  

    {  

        struct file_system_type **p;  

        for (p=&file_systems; *p; p=&(*p)->next)  

            if (strlen((*p)->name) == len &&  

                strncmp((*p)->name, name, len) == 0)  

                break;  

        return p;  

    }  

    在linux核内旁边,我们经常听到的一个词,就是register,翻译成文中就是注销,注册的意思。其本质含意是什么?顾回我们活生中,有几种况情要需注册

    1)完婚

    2)生子

    3)上学

    4)任务

    5)开房

    我懂得,有所的注册都是为了在一统的构结里头,把我们已有的据数构结链接到系统当中,是的系统是否管理,确认我们信息的进程就是注册。

    也就是核内中必定有某个钩子勾住我们,只要勾住了当前,就够能管理我们了。如果比对这个点特,独一不叫注册就是面上第五种况情了,那个是为了OOXX,只能叫check-in.

    如果我们看我们rootfs的初始化,那么这个钩子就是file_systems这个指针。

    --------其实面前说没有任何货色也是不对的,为什么呢?----------------因为没有找到办公室之前,我们都是在自己家里办公的(临时的)

    ------待续----

文章结束给大家分享下程序员的一些笑话语录: 一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值