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 上.
相关文章
- 如何用python连接Linux服务器
- linux安装telnet遇到的问题
- 桌面PC/服务器 ubuntu18.04 Linux内核编译升级与机制分析
- 性能测试 Linux 环境下模拟延时和丢包实现
- 如何做好 Linux 内核安全处理
- 戴文的Linux内核专题:01 介绍
- 终端中的乐趣:6个有趣的Linux命令行工具
- 你知道 Linux 内核是如何构建的吗?
- linux内核中rtc框架选用什么接口来注册rtc设备呢?
- linux内核中的subsys_initcall是干什么的?
- 【Linux】linux中自动定时备份mysql数据
- 《精通Linux设备驱动程序开发》——1.7 编译内核
- Linux内核的arch目录
- Linux 内核 设备结构嵌入
- Linux 内核探测和去连接的细节
- linux环境变量
- 《Linux嵌入式实时应用开发实战(原书第3版)》——1.6 资源
- linux网络子系统内核分析
- 【Linux编辑神器:vim】
- Linux-各种姿势(lessvi等)打开各种类型的文件(txt/csv/xlsx等)出现不能打开(全乱码、部分乱码、二进制文件等)的问题
- Linux下(centos6.8)JDK1.8的安装与配置
- 【正点原子FPGA连载】第二十九章Linux并发与竞争实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南
- Linux内核project导论——网络:路由:路由原理
- Linux 之 Ubuntu FTP服务的安装/配置,并使用FileZilla客户端进行文件互传的简单整理
- video : Write and Submit your first Linux kernel Patch
- Linux内核源代码情景分析-fork()
- Linux内核私闯进程地址空间并修改进程内存
- 谷歌修复Linux内核漏洞未知风险