zoukankan      html  css  js  c++  java
  • Linux 内核子系统

    一个子系统是作为一个整体对内核一个高级部分的代表. 子系统常常(但是不是一直)出现 在 sysfs 层次的顶级. 一些内核中的例子子系统包括 block_subsys(/sys/block, 给块 设备), devices_subsys(/sys/devices, 核心设备层次), 以及一个特殊子系统给每个内 核已知的总线类型. 一个驱动作者几乎从不需要创建一个新子系统; 如果你想这样做, 再 仔细想想. 你可能需要什么, 最后, 是增加一个新类别, 如同在"类别"一节中描述的.

    一个子系统由一个简单结构代表: struct subsystem {

    struct kset kset;

    struct rw_semaphore rwsem;

    };

    一个子系统, 因此, 其实只是一个对 kset 的包装, 有一个旗标丢在里面.

    每个 kset 必须属于一个子系统. 子系统成员关系帮助建立 kset 的位置在层次中, 但是, 更重要的, 子系统的 rwsem 旗标用来串行化对 kset 的内部链表的存取. 这个成员关系 由在 struct kset 中的 subsys 指针所表示. 因此, 可以从 kset 的结构找到每个 kset 的包含子系统, 但是却无法直接从子系统结构发现多个包含在子系统中的 kset.

    子系统常常用一个特殊的宏声明:

    decl_subsys(name, struct kobj_type *type, struct kset_hotplug_ops

    *hotplug_ops);

    这个宏创建一个 struct subsystem 使用一个给这个宏的名子并后缀以 _subsys 而形成 的名子. 这个宏还初始化内部的 kset 使用给定的 type 和 hotplug_ops. ( 我们在本章 后面讨论热插拔操作).

    子系统有通常的建立和拆卸函数:

    void subsystem_init(struct subsystem *subsys); int subsystem_register(struct subsystem *subsys);

    void subsystem_unregister(struct subsystem *subsys); struct subsystem *subsys_get(struct subsystem *subsys) void subsys_put(struct subsystem *subsys);

    大部分这些操作只是作用在子系统的 kset 上.

  • 相关阅读:
    软件工程过程 第8章 敏捷过程
    软件工程过程 第7章 软件工程过程改进
    软件工程过程 第6章 软件工程过程的建立与监控
    软件工程过程 第5章 协同过程模型
    软件工程过程 第4章 瀑布模型应用实例
    软件工程过程 第3章 软件生存周期模型
    软件工程过程 第2章 软件开发的主要活动
    软件工程过程 第1章 绪论
    软件工程过程 第0章 目录
    Bitcoin源代码编译安装详解
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11147555.html
Copyright © 2011-2022 走看看