• 注册系统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!”

  • 相关阅读:
    python的编码判断_unicode_gbk/gb2312_utf8(附函数)
    stat文件状态信息结构体
    内核配置中 ramdisk 大小修改
    mount命令详解
    dirent和DIR 结构体 表示文件夹中目录内容信息
    nandwrite 参数
    mke2fs 制作ext2文件系统image
    ext2文件系统错误
    照度/感光度(Lux)
    摄像机的几个重要的技术指标
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3038651.html
Copyright © 2020-2023  润新知