Linux总线驱动-02: struct bus_type 结构体

本文详细介绍了Linux内核中struct bus_type结构体的各个成员,包括name、bus_attrs、dev_attrs等,以及相关的方法如match、uevent、probe等。通过示例代码展示了如何为总线添加属性、设备属性和驱动属性,以及如何处理设备的注册、移除和电源管理。此外,还提供了Makefile和测试步骤,帮助读者理解如何编译和测试虚拟总线驱动。
摘要由CSDN通过智能技术生成

本文测试系统为:Ubuntu 10.10 x86_64 2.6.35-24-generic

 

上节中,除了简单的框架,我们还看到了一个和总线驱动相关的结构体bus_type。这个结构体的定义在include/linux/device.h中。本节先简单介绍结构体中的成员,再对每个成员作详细描述。

 

1. 成员简单介绍

 

2. 成员详细描述

 

2.0 预备知识

在开始之前,我们先简单介绍一个结构体struct attribute。这个结构体作为属性的基本结构,嵌入在struct bus_attribute等结构体中。如下:

我们只关心name和mode成员。name作为属性文件名称,会出现在sysfs伪系统系统的特定目录下(具体目录和struct attribute所在的驱动相关),而mode是name文件的权限。
作为文件名称,name不能含有”/”,同时最好不含有空格,因为 shell分隔符IFS一般包含空格,空格对shell应用处理等会带来不便和错误。name值必须具有持久属性,例如静态字符数组或者字符串字面值(不能是栈内字符数组)。
mode和用户空间中文件的属性一致,可以针对所有者、同组、其他用户分别设置读、写、可执行权限等,需要注意的是,即使设置可执行权限,属性文件也是不允许执行的,最起码在当前的内核版本下是不允许执行的。

 

2.1 const char *name;
总线名称,体现在sysfs文件系统的/sys/bus下,不能和别的总线名称有冲突。作为文件名称,它不能含有”/”;同时最好不含有空格,值必须有持久性。例如:
struct bus_type ycbus_type = { .name = “ycbus” };

 

2.2 struct bus_attribute *bus_attrs;
总线属性。表现为/sys/bus/<name>/文件夹下的文件。这个结构体的具体定义如下:


其中struct attribute attr的如2.0所述。show和store方法的第一个参数都是struct bus_type指针,用来指示属

Linux 内核中,`struct device_driver` 结构体用于表示设备驱动程序,其定义如下: ```c struct device_driver { const char *name; struct bus_type *bus; struct module *owner; const char *mod_name; bool suppress_bind_attrs; const struct of_device_id *of_match_table; int (*probe) (struct device *dev); int (*remove) (struct device *dev); void (*shutdown) (struct device *dev); int (*suspend) (struct device *dev, pm_message_t state); int (*resume) (struct device *dev); const struct attribute_group **groups; const struct dev_pm_ops *pm; const struct driver_private *p; }; ``` 其中,各字段的含义如下: - `name`:设备驱动程序的名称字符串。 - `bus`:指向该设备驱动程序所属的总线类型的指针。 - `owner`:指向该设备驱动程序所属的内核模块的指针。 - `mod_name`:该设备驱动程序所属的内核模块的名称。 - `suppress_bind_attrs`:该字段用于控制是否在 sysfs 中显示驱动程序的绑定属性。 - `of_match_table`:指向 Open Firmware 设备匹配表的指针。 - `probe`:设备探测函数。 - `remove`:设备删除函数。 - `shutdown`:设备关机函数。 - `suspend`:设备挂起函数。 - `resume`:设备恢复函数。 - `groups`:指向设备驱动程序的属性组的指针。 - `pm`:指向设备驱动程序的电源管理操作的指针。 - `p`:指向设备驱动程序的私有数据的指针。 需要注意的是,`struct device_driver` 结构体中的各个字段都是可选的,具体实现时可以根据需要进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值