对 Linux 设备驱动模型的一些理解
第 3 页 共 13 页
kset 的基本操作:
/* 初始化 */
void kset_init(struct kset *kset);
/* 注册 */
int kset_register(struct kset *kset);
/* 反注册 */
void kset_unregister(struct kset *kset);
/* 引用计数加 1 */;
struct kset *kset_get(struct kset *k);
/* 引用计数减 1 */
void kset_put(struct kset *k);
2 高层数据结构
高层主要包括三个结构:device,device_driver,bus_type。这几个结构的定义在
include/linux/device.h 中。
2.1 device
device 代表一个设备,对应于/sys/devices/下的一个目录。定义如下:
struct device {
struct device *parent; /* 父设备 */
/* 私有数据(driver/base/base.h 中):子设备链表,父设备链表节点,驱动程序链表节点,
总线链表节点*/
struct device_private *p;
struct kobject kobj; /* 内嵌的 kobject */
const char *init_name; /* 初始化名称 */
struct device_type *type; /* 所属类型 */
struct semaphore sem; /* 信号量,用于和 device_driver 同步 */
struct bus_type *bus; /* 总线 */
struct device_driver *driver; /* 关联的设备驱动程序 */
void *driver_data; /* data private to the driver */
void *platform_data; /* Platform specific data */
struct dev_pm_info power;
#ifdef CONFIG_NUMA
int numa_node; /* NUMA node this device is close to */
#endif
u64 *dma_mask; /* dma mask (if dma'able device) */
u64 coherent_dma_mask;
struct device_dma_parameters *dma_parms;
struct list_head dma_pools; /* dma pools (if dma'ble) */
struct dma_coherent_mem *dma_mem;