LDD3学习笔记(17):linux设备模型

1、Kobjects结构

#include<linux/kobject.h>

包含文件,包含kobject的定义,相关结构,和函数.

voidkobject_init(structkobject*kobj);

intkobject_set_name(structkobject*kobj,constchar*format,...);

用作kobject初始化的函数

structkobject*kobject_get(structkobject*kobj);

voidkobject_put(structkobject*kobj);

kobjects管理引用计数的函数.

structkobj_type;

structkobj_type*get_ktype(structkobject*kobj);

表示一个kobjct被嵌入的结构类型.使用get_ktype来获得关联到一个给定kobject

kobj_type.

intkobject_add(structkobject*kobj);

externintkobject_register(structkobject*kobj);

voidkobject_del(structkobject*kobj);

voidkobject_unregister(structkobject*kobj);

kobject_add添加一个kobject到系统,处理kset成员关系,sysfs表示,以及热插拔事件产生.

kobject_register是一个方便函数,它结合kobject_initkobject_add.使用kobject_del来去除一

kobject或者kobject_unregister,它结合了kobject_delkobject_put.

voidkset_init(structkset*kset);

intkset_add(structkset*kset);

intkset_register(structkset*kset);

voidkset_unregister(structkset*kset);

ksets初始化和注册的函数.

decl_subsys(name,type,hotplug_ops);

易于声明子系统的一个宏.

voidsubsystem_init(structsubsystem*subsys);

intsubsystem_register(structsubsystem*subsys);

voidsubsystem_unregister(structsubsystem*subsys);

structsubsystem*subsys_get(structsubsystem*subsys);

voidsubsys_put(structsubsystem*subsys);

对子系统的操作.

2、sysfs操作

#include<linux/sysfs.h>

包含sysfs声明的包含文件.

intsysfs_create_file(structkobject*kobj,structattribute*attr);

intsysfs_remove_file(structkobject*kobj,structattribute*attr);

intsysfs_create_bin_file(structkobject*kobj,structbin_attribute*attr);

intsysfs_remove_bin_file(structkobject*kobj,structbin_attribute*attr);

intsysfs_create_link(structkobject*kobj,structkobject*target,char*name);

voidsysfs_remove_link(structkobject*kobj,char*name);

创建和去除和一个kobject关联的属性文件的函数.

3、总线,设备,和驱动

intbus_register(structbus_type*bus);

voidbus_unregister(structbus_type*bus);

在设备模型中进行注册和注销总线的函数.

intbus_for_each_dev(structbus_type*bus,structdevice*start,void*data,int(*fn)(structdevice*,void*));

intbus_for_each_drv(structbus_type*bus,structdevice_driver*start,void*data,int(*fn)(struct

device_driver*,void*));

列举每个设备和驱动的函数,特别地,绑定到给定总线的设备.

BUS_ATTR(name,mode,show,store);

intbus_create_file(structbus_type*bus,structbus_attribute*attr);

voidbus_remove_file(structbus_type*bus,structbus_attribute*attr);

BUS_ATTR宏可能用来声明一个bus_attribute结构,它可能接着被添加和去除,使用上面2个函数.

intdevice_register(structdevice*dev);

voiddevice_unregister(structdevice*dev);

处理设备注册的函数.

DEVICE_ATTR(name,mode,show,store);

intdevice_create_file(structdevice*device,structdevice_attribute*entry);

voiddevice_remove_file(structdevice*dev,structdevice_attribute*attr);

处理设备属性的宏和函数.

intdriver_register(structdevice_driver*drv);

voiddriver_unregister(structdevice_driver*drv);

注册和注销一个设备驱动的函数.

DRIVER_ATTR(name,mode,show,store);

intdriver_create_file(structdevice_driver*drv,structdriver_attribute*attr);

voiddriver_remove_file(structdevice_driver*drv,structdriver_attribute*attr);

关联驱动属性的宏和函数.

4、类

structclass_simple*class_simple_create(structmodule*owner,char*name);

voidclass_simple_destroy(structclass_simple*cs);

structclass_device*class_simple_device_add(structclass_simple*cs,dev_tdevnum,structdevice*device,

constchar*fmt,...);

voidclass_simple_device_remove(dev_tdev);

intclass_simple_set_hotplug(structclass_simple*cs,int(*hotplug)(structclass_device*dev,char**envp,int

num_envp,char*buffer,intbuffer_size));

实现class_simple接口的函数;它们管理包含一个dev属性和很少其他属性的简单的类入口

intclass_register(structclass*cls);

voidclass_unregister(structclass*cls);

注册和注销类.

CLASS_ATTR(name,mode,show,store);

intclass_create_file(structclass*cls,conststructclass_attribute*attr);

voidclass_remove_file(structclass*cls,conststructclass_attribute*attr);

处理类属性的常用宏和函数.

intclass_device_register(structclass_device*cd);

voidclass_device_unregister(structclass_device*cd);

intclass_device_rename(structclass_device*cd,char*new_name);

CLASS_DEVICE_ATTR(name,mode,show,store);

intclass_device_create_file(structclass_device*cls,conststructclass_device_attribute*attr);

属性类设备接口的函数和宏.

intclass_interface_register(structclass_interface*intf);

voidclass_interface_unregister(structclass_interface*intf);

添加一个接口到一个类(或去除它)的函数.

5、固件

#include<linux/firmware.h>

intrequest_firmware(conststructfirmware**fw,char*name,structdevice*device);

intrequest_firmware_nowait(structmodule*module,char*name,structdevice*device,void*context,void

(*cont)(conststructfirmware*fw,void*context));

voidrelease_firmware(structfirmware*fw);

属性内核固件加载接口的函数.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值