当前位置: 技术问答>linux和unix
关于linux设备驱动模型中bus_type有些不懂
来源: 互联网 发布时间:2017-04-26
本文导语: struct bus_type { const char* name; //总线类型的名称 struct subsystem subsys; //该总线所属的子系统subsystem,代表自身---kset struct kset drivers; //该总线所...
struct bus_type
{
const char* name; //总线类型的名称
struct subsystem subsys; //该总线所属的子系统subsystem,代表自身---kset
struct kset drivers; //该总线所使用的驱动程序的集合
struct kset devices; //挂接在该总线上的所有设备的集合
.........................
.........................
}
问题1 :这个bus_type中的devices结构体,网上都讲这个devices作用是挂接在该总线上的所有设备的集合。但是device_register中将device中的kobj中的kset指向的是devices_subsys。没有指向devices。
问题2:
:device_register中将所有注册的device中的kobj结构体的kset都指向devices_subsys。在设备模型中设备之间的层次关系没有体系出来。
上面两个问题不知道我简述清楚了不
{
const char* name; //总线类型的名称
struct subsystem subsys; //该总线所属的子系统subsystem,代表自身---kset
struct kset drivers; //该总线所使用的驱动程序的集合
struct kset devices; //挂接在该总线上的所有设备的集合
.........................
.........................
}
问题1 :这个bus_type中的devices结构体,网上都讲这个devices作用是挂接在该总线上的所有设备的集合。但是device_register中将device中的kobj中的kset指向的是devices_subsys。没有指向devices。
问题2:
:device_register中将所有注册的device中的kobj结构体的kset都指向devices_subsys。在设备模型中设备之间的层次关系没有体系出来。
上面两个问题不知道我简述清楚了不
|
device_register中将device中的kobj中的kset指向是总线上的对应的devices keset。
driver也一样。
driver也一样。
|
1) 在device_register所在的core.c中,有
struct kset *devices_kset; // 定义为为kset
devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL); //初始化为devices
2) device_register执行过程的初始化中有
dev->kobj.kset = devices_kset; // 设置dev所属容器为devices_kset
从linu2.6到3.10,以上代码基本没变。所以,网上的说法是对的
struct kset *devices_kset; // 定义为为kset
devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL); //初始化为devices
2) device_register执行过程的初始化中有
dev->kobj.kset = devices_kset; // 设置dev所属容器为devices_kset
从linu2.6到3.10,以上代码基本没变。所以,网上的说法是对的
|
二楼“bjtea”说的已经很清楚了,
1。创建device kset容器
2.把注册的device对应的kobj.kset指向容器。
1。创建device kset容器
2.把注册的device对应的kobj.kset指向容器。
|
你列出的源码只能说明向驱动模型内添加设备,会指向devices_subsys就是对应的/sys/devices目录。
但是和在bus上的devices kset容器添加设备并不矛盾,在device_add(dev);中就进一步实现了总线挂接对应设备的代码。对应的:/sys/bus/PCI(i2c,spi...)/devices。
但是和在bus上的devices kset容器添加设备并不矛盾,在device_add(dev);中就进一步实现了总线挂接对应设备的代码。对应的:/sys/bus/PCI(i2c,spi...)/devices。