linux设备模型中设备和驱动的匹配过程

linux设备模型中设备和驱动的匹配过程

分析完了linux设备模型的核心实现代码,想小结下挂在总线上的设备和驱动是如何匹配上的。

以平台总线(platform bus)为例:

向系统中注册一个平台设备(platform device)时,需调用:函数,

该函数会调用相关函数初始化一个设备实例,香港空间,并将其挂到平台总线上:

int platform_device_register(struct platform_device *pdev){device_initialize(&pdev->dev);arch_setup_pdev_archdata(pdev);return platform_device_add(pdev); }

函数device_initialize()便是完成对设备实例的初始化工作,该函数是设备模型核心提供的接口函数。

接下来,将设备挂到平台总线,该函数的实现不算太复杂,网站空间,其主要功能是:

1、将平台设备和平台总线绑定起来

2、设置设备的名称

3、如果我们在创建一个平台设备时,指定了其需要的“资源”,在该函数中会分配给设备

4、调用函数将平台设备抽象的“设备”添加到设备容器中

其实,除了第3,第1和第2、以及前面对设备实例的初始化工作,都是为第4点做准备。

device_add()的源码较长,香港虚拟主机,其主要是对前面一些已被初始化的参数进行检查、在sys中创建对应的目录以及

一些属性文件、向用户空间发送热插拔事件,最后调用为我们注册的设备匹配对应的驱动。

前面写了总结了这么多,终于进入主题了——开始设备和驱动的匹配。

将设备和挂在总线上的驱动进行匹配:

void bus_probe_device(struct device *dev){struct bus_type *bus = dev->bus;struct subsys_interface *sif;int ret;if (!bus)return;if (bus->p->drivers_autoprobe) {ret = device_attach(dev);WARN_ON(ret < 0);}mutex_lock(&bus->p->mutex);list_for_each_entry(sif, &bus->p->interfaces, node)if (sif->add_dev)sif->add_dev(dev, sif);mutex_unlock(&bus->p->mutex);}

(未完)

posted on

想要成功,就一定要和成功的人在一起,不然反之

linux设备模型中设备和驱动的匹配过程

相关文章:

你感兴趣的文章:

标签云: