class.c重要函数浅析
来源:互联网 发布:java 什么是包 编辑:程序博客网 时间:2024/06/05 15:23
int class_create_file(struct class *cls, const struct class_attribute *attr)
{ //create an attribute file for an object.
{ //create an attribute file for an object.
error = sysfs_create_file(&cls->p->class_subsys.kobj,
&attr->attr);
&attr->attr);
...
}
static int add_class_attrs(struct class *cls)
{
{
...
error = class_create_file(cls, &cls->class_attrs[i]);
...
}
int __class_register(struct class *cls, struct lock_class_key *key)
{ //
struct class_private *cp;
{ //
struct class_private *cp;
klist_init(&cp->class_devices, klist_class_dev_get, klist_class_dev_put);
INIT_LIST_HEAD(&cp->class_interfaces);
kset_init(&cp->class_dirs);
__mutex_init(&cp->class_mutex, "struct class mutex", key);
error = kobject_set_name(&cp->class_subsys.kobj, "%s", cls->name);
INIT_LIST_HEAD(&cp->class_interfaces);
kset_init(&cp->class_dirs);
__mutex_init(&cp->class_mutex, "struct class mutex", key);
error = kobject_set_name(&cp->class_subsys.kobj, "%s", cls->name);
...
cp->class_subsys.kobj.ktype = &class_ktype;
cp->class = cls;
cls->p = cp;
cp->class = cls;
cls->p = cp;
error = kset_register(&cp->class_subsys);
error = add_class_attrs(class_get(cls));
...
}
struct class *__class_create(struct module *owner, const char *name,
struct lock_class_key *key)
{
struct lock_class_key *key)
{
struct class *cls;
cls = kzalloc(sizeof(*cls), GFP_KERNEL);
...
cls->name = name;
cls->owner = owner;
cls->class_release = class_create_release;
cls->owner = owner;
cls->class_release = class_create_release;
retval = __class_register(cls, key);
...
}
void class_dev_iter_init(struct class_dev_iter *iter, struct class *class,
struct device *start, const struct device_type *type)
{
struct device *start, const struct device_type *type)
{
klist_iter_init_node(&class->p->class_devices, &iter->ki, start_knode);
}
struct device *class_dev_iter_next(struct class_dev_iter *iter)
{
{
while (1) {
knode = klist_next(&iter->ki);
if (!knode)
return NULL;
dev = container_of(knode, struct device, knode_class);
if (!iter->type || iter->type == dev->type)
return dev;
}
knode = klist_next(&iter->ki);
if (!knode)
return NULL;
dev = container_of(knode, struct device, knode_class);
if (!iter->type || iter->type == dev->type)
return dev;
}
}
int class_for_each_device(struct class *class, struct device *start,
void *data, int (*fn)(struct device *, void *))
{
void *data, int (*fn)(struct device *, void *))
{
class_dev_iter_init(&iter, class, start, NULL);
while ((dev = class_dev_iter_next(&iter))){
while ((dev = class_dev_iter_next(&iter))){
....
}
}
struct device *class_find_device(struct class *class, struct device *start,
void *data,
int (*match)(struct device *, void *))
void *data,
int (*match)(struct device *, void *))
{
class_dev_iter_init(&iter, class, start, NULL);
while ((dev = class_dev_iter_next(&iter)){
while ((dev = class_dev_iter_next(&iter)){
...
}
}
int class_interface_register(struct class_interface *class_intf){
parent = class_get(class_intf->class);
mutex_lock(&parent->p->class_mutex);
list_add_tail(&class_intf->node, &parent->p->class_interfaces);
list_add_tail(&class_intf->node, &parent->p->class_interfaces);
...
class_dev_iter_init(&iter, parent, NULL, NULL);
while ((dev = class_dev_iter_next(&iter))){...}
while ((dev = class_dev_iter_next(&iter))){...}
}
阅读(236) | 评论(0) | 转发(0) |0
上一篇:linux字符cdev和Inode的关系
下一篇:va_start va_end 的使用和原理
相关热门文章
- linux 常见服务端口
- 【ROOTFS搭建】busybox的httpd...
- xmanager 2.0 for linux配置
- 什么是shell
- linux socket的bug??
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
评论热议
0 0
- class.c重要函数浅析
- C重要字符串函数
- C语言函数浅析
- C++inline函数浅析
- c/c++重要函数总结
- C语言中重要函数
- linux 下重要C函数集合
- c语言编写几个重要的函数
- 浅析c语言的函数调用
- C语言可变参函数浅析
- [C++] C++的拷贝构造函数浅析
- C语言函数调用栈浅析
- C语言中函数指针数组浅析
- 浅析C语言之sprintf函数
- 重要函数
- C++class默认生成4个函数
- C++class默认生成4个函数
- C++class默认生成4个函数
- Linux内核入门—— __attribute__ 机制
- kzalloc详解
- Makefile
- linux字符cdev和Inode的关系
- HAL层开发框架介绍
- class.c重要函数浅析
- va_start va_end 的使用和原理
- superblock,file,dentry,inode的区别
- 对linux字符设备的理解(整体架构)
- printk及控制台的日志级别
- 菜鸟编译Linux内核
- Linux/stat.h 读写权限
- 三星S3C2440 Datasheet LCD Controller 章节翻译(2)
- proc函数