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指针,用来指示属

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值