关于klist
来源:互联网 发布:淘宝3天不发货怎么投诉 编辑:程序博客网 时间:2024/06/06 02:16
今天在公司看linux driver相关的内容,现在出来背下书。看klist.c这个文件,klist这个kernel list是继承了list_head这个单纯的链表,在它的基础上添加了kref的引用计数的功能。kref是一个引用计数的原子操作的变量。put的是时候,kref的值减1,get的时候加1。内核里的对象object都是用这个kref判断对象何时releas该对象的。刚创建的时候,kref的为1,当通过put函数使kref变为0的时候,就调用release函数释放这个对象的内存空间。klist的k_node的成员只多了一个kref,然后把这个k_node嵌套到其他object里,形成能计引用个数的双向。klist的链表头也添加了put和get这两个操作函数的指针。为啥要看这个klist?因为在bus上,挂所有的device和device_driver对象,就是通过两个klist分别把这个bus_type的device和device_driver连起来的。同时在bus上添加device_driver时,会迭代 iterate这个bus上所有的device,尝试和这个device_driver进行match(这个match是bus的match方法)。如果match成功,则调用device_driver的probe函数,对进行设备进行相应的初始化。
关于kref:内核中的代表对象kobject包含kref,且内核中的bus、device、device_driver都是继承这个kobject。这kref就是为了判断对象是否能被release,是否还有别的地方引用该对象。
klist应该是kernel list的缩写,而不是kref listd的 缩写,有人在邮件列表中问了。
关于cdev、block_dev和这个bus device device_driver驱动模型的关系:暂时还不是很清楚,但是我觉得这个cdev和block_dev应该在这个驱动模型的上面,cdev和block_dev这两个概念应该在这个驱动模型的上面一层(更接近file),他们应该不是一个层的概念。
sysfs文件系统:原文是把内核里的对象和对象之间的关系export导出到userspace用户空间。让用户能够访问。但是这能访问的都是简单的,因为用户读写的attribute属性都是ascii的字符串。
内核中每个继承了object的对象,都会在sysfs中生成对应的目录或文件。
这个klist简单的继承了list_head ,写的也很干净clean,所以内核中链接对象的时候,都会通过这个klist来链接,既能链接对象,又能进行引用计数。
0 0
- 关于klist
- klist链表
- \lib\klist.c
- linux基本部件----klist
- kobject kset klist
- 三大链表之klist
- Linux内核中的klist分析
- Linux内核中的klist分析
- Linux内核中的klist分析
- klist函数的简单分析
- klist链表链接图
- Linux内核链表list_head扩展---klist
- 更强的链表klist
- 更强的链表klist
- linux内核部件--又见链表之klist
- 设备驱动模型==>klist
- 更强的链表klist
- linux内核部件--链表之klist
- php 生成静态页面函数
- MongoDB架构图解
- seo网站域名选择技巧
- gentoo下配置中文输入法(搜狗输入法)
- spring 源码分析之环境搭建
- 关于klist
- JAVA的文件上传和下载详解
- 【BZOJ 1036】 [ZJOI2008]树的统计
- ①Android开发小技巧之ToolBar-文字居中
- 关于产品设计、素材,发布等网站收集
- JcJc对政府网站公文错别字识别的能力更强了
- 基于OpenCV的条形码区域检测(完)
- HDP学习--Managing HDFS Storage(02)
- Oracle学习阶段总结