sysfs分析】的更多相关文章

  Linux设备模型——设备驱动模型和sysfs文件系统解读 内核版本:2.6.30 1. What is sysfs? 个人理解:sysfs向用户空间展示了驱动设备的层次结构.我们都知道设备和对应的驱动都是由内核管理的,这些对于用户空间是不可见的.现在通过sysfs,可以在用户空间直观的了解设备驱动的层次结构. 我们来看看sysfs的文件结构: [root@yj423 /sys]#ls block     class     devices   fs        module bus   …
内核对象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(3)--kobj分析 在分析kobj之前,先总结下kobj的功能: 实现结构的动态管理: 实现内核对象到sysfs的映射: 实现自定义属性的管理. 关注一下kobj的结构: struct kobject { const char *name;// 该内核对象的名称 struct list_head entry;// 链入kset的连接件 struct kobject *parent;// 指向父对象,可以为空 struct kset *kset; // 指向的…
内核对象kobject和sysfs(2)--kref分析 在介绍ref之前,先贴上kref的结构: struct kref { atomic_t refcount; }; 可以看到,kref只是包含一个原子量的数而已,并没有别的成员提供自动回收的功能.实际上,kref只是记录了某个模块的引用次数,初始状态为1.当引用计数为0的时候,将调用自定义的释放函数. 下面我们介绍内核提供的kref的操作函数: kref初始化函数kref_init: static inline void kref_init…
我们在Linux设备管理(一)_kobject, kset,ktype分析一文中介绍了kobject的相关知识,在Linux设备管理(二)_从cdev_add说起和Linux设备管理(三)_总线设备的挂接举例介绍了内核中是如何进行设备管理的,并在Linux设备管理(四)_从sysfs回到ktype一文中结合sysfs机制和kobject对内核的设备管理机制进行一定深度的讨论,从中可以看出,字符设备的cdev本身的kobject是没有初始化的,也没有在sysfs中创建任何目录,平台设备是将设备挂接…
sysfs是一个基于ramfs的文件系统,在2.6内核开始引入,用来导出内核对象(kernel object)的数据.属性到用户空间.与同样用于查看内核数据的proc不同,sysfs只关心具有层次结构的设备信息,比如系统中的总线,驱动以及已经加载的模块等,而诸如PID等信息还是使用proc来管理.本质上,sysfs文件的层次结构就是基于内核中kset与kobject逻辑结构来组织的.从驱动开发的角度,sysfs为我们提供了除了虚拟字符设备的read/write/ioctl和proc系统之外的另外…
Linux内核大量使用面向对象的设计思想,通过追踪源码,我们甚至可以使用面向对象语言常用的UML类图来分析Linux设备管理的"类"之间的关系.这里以4.8.5内核为例从kobject,kset,ktype的分析入手,进而一探内核对于设备的管理方式 container_of宏 这个宏几乎是linux数据结构的基础,Linux中的链表与传统的链表不同,其链表的节点本身并不包含任何数据,任何想要插入到链表的数据只需要包含一个事先写好的节点 //include/linux/types.h 1…
Linux内核suspend状态 Linux内核支持多种类型的睡眠状态,通过设置不同的模块进入低功耗模式来达到省电功能.目前存在四种模式:suspend to idle.power-on standby(Standby).suspend to ram(STR)和sudpend to disk(Hibernate),分别对应ACPI状态的S0.S1.S3和S4. Suspend to idle完全是软件相关的并且尽量将CPU维持在深度idle状态. Power-on standby设置设备进入低功…
Android在内存管理上于Linux有些小的区别,其中一个就是引入了lowmemorykiller.从lowmemorykiller.c位于drivers/staging/android也可知道,属于Android专有,没有进入Linux kernel的mainline. lmkd,即Low Memory Killer Daemon,基于memory子系统和Kernel lowmemorykiller功能参数,选择一个合适的进程,然后kill进程,以达到释放内存的目的.所以也绕不开Kernel…
1 cgroup介绍 CGroup是control group的简称,它为Linux kernel提供一种任务聚集和划分的机制,可以限制.记录.隔离进程组(process groups)所使用的资源(cpu.memory.I/O等).CGroup也是LXC为实现虚拟化所使用的资源管理手段.CGroup本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O或内存的分配控制等具体的资源管理功能是通过这个功能来实现的.这些具体的资源管理功能称为CGroup子系统. CGroup子系统包含如下:…