Linux设备模型之kset

2024-03-04 01:48
文章标签 linux 模型 设备 kset

本文主要是介绍Linux设备模型之kset,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux设备模型之kset

一个kset仅仅是需要关联的kobject的集合。对它们是否有相同的ktype没有限制,但是如果不同就要注意了。

kset有如下功能:
1. kset是包含有一组kobject的袋子,内核可以用kset跟踪所有的块设备和所有的PCI设备驱动。
2. 一个kset也是sysfs的子目录,和这个kset相关的kobject罗列在这个目录下。每个kset包含一个可以成为其他kobject父节点的kobject;顶级的sysfs就是用这种方法建立的。
3. Ksets支持kobject的热插拔,影响uevent事件通知到用户空间的行为。

用面向对象的术语描述,kset是顶层的容器类;ksets包含自己的kobject,但是这个kobject只能是kset本身管理,不应该由其他使用者操控。

kset用标准内核的链表管理。Kobject通过它的kset域指回包含它的kset。几乎所有的情况下,这些属于某个kset的kobjects在他们的父指针中包含有这个kset(严格说,是kset中嵌入的kobject)。

由于kset内部包含kobject,所有它应该动态创建,而不要静态声明或在栈上分配空间。创建新的kset使用下面接口:

struct kset *kset_create_and_add(const char *name, struct kset_uevent_ops *u,struct kobject *parent);

不再使用kset的时候,调用下面函数:

void kset_unregister(struct kset *kset);

使用kset的例子可以在内核目录树中samples/kobject/kset-example.c找到。

如果kset需要控制相关kobjects的uevent的操作,可以用kset_uevent_ops来处理:

struct kset_uevent_ops { int (*filter)(struct kset *kset, struct kobject *kobj);const char *(*name)(struct kset *kset, struct kobject *kobj); int (*uevent)(struct kset *kset, struct kobject *kobj, struct kobj_uevent_env *env);};

filter函数允许kset阻止某个kobject发送到用户空间的uevent。如果这个函数返回0,不会发送这个uevent
name函数在uevent发送到用户空间的时候被调用,这个函数重写了kset默认的name。
默认的,这个name和kset自己的name是一样的,但是如果实现了,可以重写原来的name。
uevent函数在某个uevnet即将发送到用户空间的时候被调用,它允许更多的环境变量加到这个uevnet中。

一个可能的问题是kobject是怎么加到kset中的,没有给出实现这个功能的函数。答案是这个任务由kobject_add()函数处理。一个kobject传递到kobject_add()的时候,它的kset成员应该指向需要的kset地址,kobject_add()处理剩下的工作。

如果一个kobejct属于一个kset但是没有父kobject指针,它会被加到kset目录。但不是kset所有的成员必须在kset目录下。如果kobject添加之前显示指定了父kobject,那么这个kobject在kset中注册,但是添加到父kobject目录下。

参考文档:
/Documentation/kobject.txt

欢迎关注我的微信公众号:
这里写图片描述

这篇关于Linux设备模型之kset的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/771634

相关文章

Linux磁盘分区、格式化和挂载方式

《Linux磁盘分区、格式化和挂载方式》本文详细介绍了Linux系统中磁盘分区、格式化和挂载的基本操作步骤和命令,包括MBR和GPT分区表的区别、fdisk和gdisk命令的使用、常见的文件系统格式以... 目录一、磁盘分区表分类二、fdisk命令创建分区1、交互式的命令2、分区主分区3、创建扩展分区,然后

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

Linux内核之内核裁剪详解

《Linux内核之内核裁剪详解》Linux内核裁剪是通过移除不必要的功能和模块,调整配置参数来优化内核,以满足特定需求,裁剪的方法包括使用配置选项、模块化设计和优化配置参数,图形裁剪工具如makeme... 目录简介一、 裁剪的原因二、裁剪的方法三、图形裁剪工具四、操作说明五、make menuconfig

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

Linux下MySQL8.0.26安装教程

《Linux下MySQL8.0.26安装教程》文章详细介绍了如何在Linux系统上安装和配置MySQL,包括下载、解压、安装依赖、启动服务、获取默认密码、设置密码、支持远程登录以及创建表,感兴趣的朋友... 目录1.找到官网下载位置1.访问mysql存档2.下载社区版3.百度网盘中2.linux安装配置1.

Linux使用粘滞位 (t-bit)共享文件的方法教程

《Linux使用粘滞位(t-bit)共享文件的方法教程》在Linux系统中,共享文件是日常管理和协作中的常见任务,而粘滞位(StickyBit或t-bit)是实现共享目录安全性的重要工具之一,本文将... 目录文件共享的常见场景基础概念linux 文件权限粘滞位 (Sticky Bit)设置共享目录并配置粘