linux 设备模型
来源:互联网 发布:淘宝客订单虚假交易 编辑:程序博客网 时间:2024/04/28 07:42
linux设备模型是对linux内核结构的一个基本的描述,主要功能包括:电源管理(比如说休眠,待机之类的),与用户空间通信(利用sysfs和用户空间交互),热插拔,提供设备类型信息,维护对象的生命周期。主要有下面组件组成。
一、 kobject 和 kset
kobject
1、数据结构
struct kobject {
const char *name;//指向对象的名字
struct list_head entry;//连接所在kset单元中的兄弟
struct kobject *parent; //指向父对象
struct kset *kset; //指向所属的kset
struct kobj_type *ktype;//指向对象类型描述符指针
struct sysfs_dirent *sd; //对象在sysfs文件系统中的目录
struct kref kref;//引用计数
unsigned int state_initialized:1;//避免再次被初始化
unsigned int state_in_sysfs:1;
unsigned int state_add_uevent_sent:1;
unsigned int state_remove_uevent_sent:1;
unsigned int uevent_suppress:1;
};
2、主要接口:
void kobject_init(struct kobject *kobj, struct kobj_type *ktype) 初始化一个kobject结构
void kobject_put(struct kobject *kobj) 减少对象的引用计数,并在次数为0的时候释放他
struct kobject *kobject_get(struct kobject *kobj) 增加对象引用计数
struct kobject *kobject_create_and_add(const char *name, struct kobject *parent) 动态创建一个kobject对象,并将他注册进sysfs中
kset
它是嵌入到相同类型结构的kobject集合,属于一个特定的子系统,kobject利用它找到自己所属的类型,然后在sys下建立正确的位置,
1、数据结构
struct kset {
struct list_head list;//所拥有的kobject链表的头部
spinlock_t list_lock; //list操作的自旋锁
struct kobject kobj;//内嵌的kobject
struct kset_uevent_ops *uevent_ops;//
};
2、主要接口
void kset_init(struct kset *k) 初始化一个kset结构
struct kset *kset_create_and_add(const char *name,
struct kset_uevent_ops *uevent_ops,
struct kobject *parent_kobj) 动态创建一个kset结构,并将它添加到sysfs中
static void kset_release(struct kobject *kobj) 释放一个kset 结构
kobject 和 kset 单独用的时候很少,下面是一个不会用到的例子~~
#include <linux/module.h>#include <linux/init.h>#include <linux/kobject.h>static struct kset *my_kset;static struct kobject my_kobj;static void my_kobj_release(struct kobject *kobj);static struct kobj_type my_type = { .release = my_kobj_release,};static void my_kobj_release(struct kobject *kobj){ printk("%s %d, release kobj %s\n",__func__, __LINE__,kobj->name);// kfree(kobj);}static int __init example_init(void){ int retval; my_kset = kset_create_and_add("my_kset", NULL, NULL); if(!my_kset) { printk("%s %d,create kset failed\n",__func__, __LINE__); return -ENOMEM; } memset(&my_kobj, 0, sizeof(my_kobj)); my_kobj.kset = my_kset; retval = kobject_init_and_add(&my_kobj, &my_type, NULL, "%s","my_kobj"); if(retval) { kobject_put(&my_kobj); kset_unregister(my_kset); printk("%s %d kobject create fail\n",__func__, __LINE__); return -EINVAL; } printk("my kset kobj create success\n"); return 0;}static void __exit example_exit(void){ kobject_put(&my_kobj); kset_unregister(my_kset); printk("my kset kobj release success\n");}module_init(example_init);module_exit(example_exit);MODULE_LICENSE("GPL");
把这个模块插入内核后效果是,在/sys 多一个my_kset目录 在my_kset中有一个my_kobj
二 bus device driver
待续。。。。。。。。
- Linux设备模型_platform设备
- linux设备模型详解
- linux设备模型详解
- Linux设备驱动模型
- linux的设备模型
- Linux设备模型
- [转]linux设备模型
- Linux的设备模型
- Linux设备模型
- Linux 设备模型
- Linux设备模型
- linux设备模型分析
- Linux 2.6 设备模型
- Linux设备模型 (1)
- Linux设备模型 (2)
- Linux设备模型 (3)
- Linux设备模型 (4)
- Linux设备模型
- VL01N/VL02N增强-退货订单(ZRE,ZWRE,ZRD)在VL01N对于发货过账时判断成本是否为0碰到的问题
- NASM汇编指令复习
- cookie实现自动登陆(1)
- 瑞星携手华为——打开虚拟化安全市场的新大门
- 在 Unix 环境中正确设置 NLS_LANG (文档 ID 1548858.1)
- linux 设备模型
- IT English Collection(13) of Nib file
- 鲍尔默最后一次员工大会:声泪俱下别微软
- c++实现bmp文件的读写
- input event获取按键键值
- 【Android UI设计与开发】第10期:顶部标题栏(一)ActionBar详细概述和简单示例
- A. Petya and Java
- Android详细的对话框AlertDialog.Builder使用方法
- pv操作及信号量实用实例详解