linux中platform总线解析(四)(platform设备注册后自动匹配驱动)

当一个platform设备注册后,就会自动为其匹配驱动,这是怎么做到的呢?
其实前面的分析已经有提到。
这里只说函数调用,以及关键的部分,具体的不再分析。

下面再来分析一次。

这里函数进行了删减,把这个自动匹配的过程突显出来。

具体的函数调用关系:

platform_add_devices--->platform_device_register---->platform_device_add--->device_add---->bus_probe_device


int platform_add_devices(struct platform_device **devs, int num)
{
	for (i = 0; i < num; i++) {
		ret = platform_device_register(devs[i]);
	}
	return ret;
}



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


int platform_device_add(struct platform_device *pdev)
{
	int i, ret;
	.......
	ret = device_add(&pdev->dev);
	.......
	if (ret == 0)
		return ret;

}



int device_add(struct device *dev)
{
	struct device *parent = NULL;
	struct kobject *kobj;
	struct class_interface *class_intf;
	int error = -EINVAL;
	.......
	.......
	bus_probe_device(dev);
	.......
	.......
	if (parent)
		klist_add_tail(&dev->p->knode_parent,
			       &parent->p->klist_children);
}


void bus_probe_device(struct device *dev)
{
	struct bus_type *bus = dev->bus;
	struct subsys_interface *sif;
	int ret;
//因为platform总线设置了这个drivers_autoprobe自动匹配标志,所以后面就会接着
//调用函数device_attach函数,为设备查找驱动。
	if (bus->p->drivers_autoprobe) {
		ret = device_attach(dev);
		WARN_ON(ret < 0);
	}
	........
	........
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值