sysfs - _The_ filesystem for exporting kernel objects.sysfs - 用于导出内核对象(kobject)的文件系统Patrick Mochel <mochel@osdl.org>翻译 : tekkamanninja <tekkamanninja@163.com>10 January 20032003年1月10日翻译时间:2007年12月29日What it is: 简介:~~~~~~~~~~~sysfs is a ram-bas…
内核对象kobject和sysfs(3)--kobj分析 在分析kobj之前,先总结下kobj的功能: 实现结构的动态管理: 实现内核对象到sysfs的映射: 实现自定义属性的管理. 关注一下kobj的结构: struct kobject { const char *name;// 该内核对象的名称 struct list_head entry;// 链入kset的连接件 struct kobject *parent;// 指向父对象,可以为空 struct kset *kset; // 指向的…
内核对象kobject和sysfs(1)--概述 问题: 在走读驱动代码时,经常看见kref,kobj,sysfs这些结构,这些结构到底有什么作用?如何理解并使用这些结构呢?这将在接下来的这一系列文章中说明. 在详细介绍之前,先简单给出个人对各个结构的理解,但暂时不对这些结论做出解释.可以在看完后面几篇后,再回过头来看本篇. (1)kref实现了资源的智能管理,调用者,不必关心资源的释放问题,系统会在合适的时机释放资源: (2)kobj是kref的封装,利用了kref的功能,构成了sysfs里的…
内核对象kobject和sysfs(4)--kset分析 从狭义上来说,kset就是kobj的一个再封装而已.在封装之后,提供了针对kset之下所有kobj统一管理的一些方法. 我们还是从结构说起: 168 struct kset { 169 struct list_head list; 170 spinlock_t list_lock; 171 struct kobject kobj; 172 const struct kset_uevent_ops *uevent_ops; 173 }; 由…
内核对象kobject和sysfs(2)--kref分析 在介绍ref之前,先贴上kref的结构: struct kref { atomic_t refcount; }; 可以看到,kref只是包含一个原子量的数而已,并没有别的成员提供自动回收的功能.实际上,kref只是记录了某个模块的引用次数,初始状态为1.当引用计数为0的时候,将调用自定义的释放函数. 下面我们介绍内核提供的kref的操作函数: kref初始化函数kref_init: static inline void kref_init…
  本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性. 首先让我们来了解一下什么是内核对象.内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问.在此数据结构中少数成员如安全描述符和使用计数是所有对象都有的,但其他大多数成员都是不同类型的对象特有的.内核对象的数据结构只能由操作系统提供的API访问,应用程序在内存中不能访问.调用创建内核对象的函数后,该函数会返回一个句柄,它标识了所创建的对象.…
WINDOWS内核对象 原文地址:http://blog.csdn.net/misterliwei/article/details/976988  支持原创 一.前言 Windows中有很多像进程对象.线程对象.文件对象等等这样的对象,我们称之为Windows内核对象.内核对象是系统地址空间中的一个内存块,由系统创建并维护.内核对象为内核所拥有,而不为进程所拥有,所以不同进程可以访问同一个内核对象. 二.内核对象结构 每个对象都有对象头和对象体组成.所有类型的对象头结构都是相同的,而结构体部分却…
1. 一个进程在初始化时,系统将会他分配一个空的句柄表,这个句柄表仅供内核对象使用,不供用户对象和GDI对象使用.进程在首次 初始化时,该句柄表为空.句柄表是一个由数据结构组成的数组,包含一个内核对象指针,一个访问掩码和一些标志.系统用索引来 标识内核对象的信息保存在进程句柄表中的具体位置,句柄值除以4即为索引值(针对不同版本的windows系统可能不同). 2. 要注意内核对象返回值INVALID_HANDLE_VALUE(-1)和NULL(0)的区别,凡是用于创建内核对象的函数,在检查它们的…
1.每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问.这个内存块是一个数据结构,其成员维护着与对象相关的信息. 2.调用一个会创建内核对象的函数后,函数会返回一个句柄,它标识了所创建的对象.在32位windows进程中,句柄是一个32位的值,在64位windows进程中,则是一个64位的值. 3.为了增强操作系统的可靠性,这些句柄值是与进程相关的,不可以直接跨进程使用. 4.内核对象的所有者是操作系统内核,而非进程,在进程内创建的内核对象在进程终止时不一定会被销毁.大…
当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象 ,不用于用户对象或GDI对象. 创建内核对象 当进程初次被初始化时,它的句柄表是空的.然后,当进程中的线程调用创建内核对象的函数时,比如CreateFileMapping,内核就为该对象分配一个内存块,并对它初始化.这时,内核对进程的句柄表进行扫描,找出一个空项.由于表 3 - 1中的句柄表是空的,内核便找到索引1位置上的结构并对它进行初始化.该指针成员将被设置为内核对象的数据结构的内存地址,访问屏蔽设置为全部访问权,同时,…