linux 驱动入门6
看/sys目录经常看到bus device driver class. 这也是网上大量说的驱动驱动模型。这些的关系得熟悉得明白吧。是的。今天我先不整他们的关系。先逐个击破,然后再统一来理清楚他们之间的关系。
那今天我们来看看class.c这个文件。
class刚接触的时候好迷糊,class是关键字,是类型,不是,是一类事物,以一种归类。是把相同类型的device归到一起的一个对象。那我们来看看class是如何注册的。不管怎么说。class也是形成一个环。
一个双向闭环链表。同样,class之间也是通过kset honeywell 臧春杰 kobject关联起来的。那我们具体看看
int __class_register(struct class *cls, struct lock_class_key *key)
{
struct subsys_private *cp; // subsys_private用的是和bus 一样的结构体。看来是共用了这个类型。为什么要共用呢? bus是关联了device driver. 那看来class也是关联了device driver. 嗯
有点道理。只是class不关心driver.他只是把相同类的device关联起来了。如何关联呢?看下文
int error;
pr_debug("device class '%s': registering\n", cls->name);
cp = kzalloc(sizeof(*cp), GFP_KERNEL); // 分配空间
if (!cp)
return -ENOMEM;
klist_init(&cp->klist_devices, klist_class_dev_get, klist_class_dev_put); //初始化
honeywell 臧春杰
INIT_LIST_HEAD(&cp->class_interfaces);
kset_init(&cp->glue_dirs);
__mutex_init(&cp->class_mutex, "struct class mutex", key);
error = kobject_set_name(&cp->subsys.kobj, "%s", cls->name); //设置kobject的名字。这个名honeywell 臧春杰字也同时也sysfs目录的名字。
if (error) {
kfree(cp);
return error;
}
/* set the default /sys/dev directory for devices of this class */
if (!cls->dev_kobj)
cls->dev_kobj = sysfs_dev_char_kobj;
#if defined(CONFIG_BLOCK)
/* let the block class directory show up in the root of sysfs */
if (!sysfs_deprecated || cls != &block_class)
honeywell 臧春杰
cp->subsys.kobj.kset = class_kset;
#else
cp->subsys.kobj.kset = class_kset; //这里就是开始指定kobj的kset类。位下一步add打基础了。
#endif
cp->subsys.kobj.ktype = &class_ktype;
cp->class = cls;
cls->p = cp;
error = kset_register(&cp->subsys); //这里就是开始真正的add了。这里有个简单的常识需要分享下。
我们经常看到kobje_****_add 也经常看到kset_register这有什么关系吗? 肯定不难,无非就是kobj和kset的关系。 其他是的功能是一样的。但是有点差别。在注册子系统subsystem的时候用
kset_register. 那什么是子系统呢? 就是别的对象能挂载在honeywell 臧春杰他下面的就叫子系统。就像class. 各个具体class可以挂在各个具体的device. 各个具体的bus可以挂载各个device和 driver。这些我们可以
称之为subsystem.
if (error) {
kfree(cp);
return error;
}
error = honeywell 臧春杰add_class_attrs(class_get(cls)); //创建了sysfs节点。
class_put(cls);
return error;
}
嗯,就这样,通过这个东西就把各个具体的class关联起来,围城双向闭环链表了。
linux 驱动入门6的更多相关文章
- linux 驱动入门1
世事艰难,人生不易. 夜深人静时候,回顾过去,往事历历在目.创南京,混苏州,下上海.都付出了巨大的努力.多少个不眠的夜晚,在冥思苦想.天生愚钝.又不是学计算机的.一直没较为深刻的理解 编程什么东西,一 ...
- linux 驱动入门4
不吃苦中苦,难为人上人.努力,给老婆孩子提供个良好的生活居住环境.http://www.cnblogs.com/nan-jing/articles/5806399.html上文提到了如何创建proc节 ...
- linux 驱动入门3
不吃苦中苦,难为人上人.努力,给老婆孩子提供个良好的生活居住环境. http://www.cnblogs.com/nan-jing/articles/5806399.html 上文提到.可以自动创建了 ...
- linux 驱动入门2
不吃苦中苦,难为人上人.努力,给老婆孩子提供个良好的生活居住环境. http://www.cnblogs.com/nan-jing/articles/5775038.html 这里提到.有这么多牛人. ...
- linux 驱动入门5
慢慢的开始转驱动,目前比较有时间,一定要把驱动学会.哎.人生慢慢路,一回头.已经工作了八九年了.努力.在买套房.改退休了.学驱动.个人认为首先要熟悉驱动框架.慢慢来.心急吃不了热豆腐. 看网上都说的设 ...
- Linux驱动入门——构建和运行模块
Hello world模块 本文介绍如何向内核中添加一个hello模块.该模块的功能是在模块加载时,向系统日志输出"hello world\n" 在模块卸载时输出"Goo ...
- Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门
Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门 转载请在文首保留原文出处:EMC中文支持论坛 - https://community.emc.com/go/chines ...
- IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)
IT技术学习指导之Linux系统入门的4个阶段(纯干货带图) 全世界60%的人都在使用Linux.几乎没有人没有受到Linux系统的"恩惠",我们享受的大量服务(包括网页服务.聊天 ...
- 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
随机推荐
- Spring Boot 系列教程8-EasyUI-edatagrid扩展
edatagrid扩展组件 edatagrid组件是datagrid的扩展组件,增加了统一处理CRUD的功能,可以用在数据比较简单的页面. 使用的时候需要额外引入jquery.edatagrid.js ...
- iOS 2.0 版本切入点
转载自:http://www.infoq.com/cn/articles/Version_2_0 移动互联网如火如荼,iOS 应用+ Android 应用+ 手机站似乎成了所有互联网公司的标配,你的网 ...
- Java中的值栈
OGNL表示式使用 和 值栈 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式 ...
- java面向对象_接口
java接口 interface,是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但 ...
- Elasticsearch head安装
es5.0目前没有head插件所以不要下载错而是版本导致无法安装head; 安装head命令在es的bin目录下执行 ./plugin install mobz/elasticsearch-head ...
- jquery指定div右键事件
<div class="nav_list_item">需要淡季右键的div</div> 我们要 给这个div注册鼠标右键的时候需要先禁用该div的网页右键菜 ...
- emacs command
eval-buffer用来执行.emacs不要再重启了,或cxce执行光标前的一行 eval-region load-file ~/.emacs goto-line global-set-key定义快 ...
- Gerald and Giant Chess
Gerald and Giant Chess time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- 用批处理文件删除n天前的文件
原文:http://blog.csdn.net/leehq/archive/2007/08/03/1723743.aspx 公司服务器用来备份数据的硬盘过段时间就会被备份文件占满,弄得我老是要登录到服 ...
- Struts2利用注解实现action跳转
使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...