总线设备驱动模型
一. 总线模型概述
随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,
2.4内核已经难以满足这些需求。为适应这种形势的需要,从Linux2.6内核开始提供了全新的设备模型。
二. 总线
1. 描述设备
1. 在Linux 内核中, 总线由bus_type结构表示, 定义在<linux/device.h>
structbus_type
{
const char*name; /*总线名称*/
int(*match) (structdevice *dev, structdevice_driver*drv); /*驱动与设备的匹配函数*/
………
}
2. int(*match)(structdevice * dev, structdevice_driver* drv)
当一个新设备或者新驱动被添加到这个总线时,该函数被调用。用于判断指定的驱动程序是否能处理指定的设备。若可以,则返回非零。
2. 注册
总线的注册使用如下函数bus_register(structbus_type*bus)若成功,新的总线将被添加进系统,并可在/sys/bus 下看到相应的目录
3. 注销
总线的注销使用函数 : void bus_unregister(structbus_type*bus)
三. 驱动
1. 描述设备
在Linux内核中, 驱动由device_driver结构表示。
structdevice_driver
{
const char*name; /*驱动名称*/
structbus_type*bus; /*驱动程序所在的总线*/
int(*probe) (structdevice *dev);
………
}
2. 注册
#驱动的注册使用如下函数
intdriver_register(structdevice_driver*drv)
3. 注销
#驱动的注销使用如下函数
void driver_unregister(structdevice_driver*drv)
四. 设备
1. 描述设备
在Linux内核中, 设备由structdevice结构表示。
structdevice 、
{
const char *init_name; /*设备的名字*/
struct bus_type*bus; /*设备所在的总线*/
………
}
2. 注册
#设备的注册使用如下函数
intdevice_register(structdevice *dev)
3. 注销
#设备的注销使用以下函数
void device_unregister(structdevice *dev)