织梦CMS - 轻松建站从此开始!

罗索

Linux关于总线、设备、驱动的注册顺序

落鹤生 发布于 2012-12-11 10:10 点击:次 
1. platform bus先被kenrel注册。 2. 系统初始化过程中调用platform_add_devices或者platform_device_register,将平台设备(platform devices)注册到平台总线中(platform bus) 3. 平台驱动(platform driver)与平台设备(platform device)的关联是在 platform_driver_reg
TAG:

1. platform bus先被kenrel注册。
2. 系统初始化过程中调用platform_add_devices或者platform_device_register,将平台设备(platform devices)注册到平台总线中(platform bus)
3. 平台驱动(platform driver)与平台设备(platform device)的关联是在platform_driver_register或者driver_register中实现,一般这个函数在驱动的初始化过程调用。

通过这三步,就将平台总线,设备,驱动关联起来。

1. platform bus先被kenrel注册。
------------------------------------------------------
do_basic_setup() -->-driver_init() -->-platform_bus_init() --> bus_register()


2. 系统初始化过程中调用platform_add_devices或者platform_device_register,将平台设备(platform devices)注册到平台总线中(platform bus)
------------------------------------------------------
系统启动阶段,总线的驱动链表还是空的,所以启动阶段的platform_add_devices()只负责将设备添加到总线的设备链表上。

linux-2.6.26/drivers/base/platform.c
int platform_add_devices(struct platform_device **devs, int num)
{
----...
----ret = platform_device_register(devs[i]);
----...
}

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

int platform_device_add(struct platform_device *pdev)
{
----...
----pdev->dev.bus = &platform_bus_type;
----...
----ret = device_add(&pdev->dev);
----...
}

device_add() -->
-bus_attach_device()

void bus_attach_device(struct device *dev)
{
----struct bus_type *bus = dev->bus;
----int ret = 0;

----if (bus) {
--------if (bus->p->drivers_autoprobe)
------------ret = device_attach(dev);
--------WARN_ON(ret < 0);
--------if (ret >= 0)
------------klist_add_tail(&dev->knode_bus, &bus->p->klist_devices);
----}
}


device_attach()的返回值:
1           设备和驱动匹配成功
0           设备已经注册,但是总线上没有与之相匹配的驱动(系统启动阶段,由于总线上还没有驱动,所以设备在此匹配不到与之对应的驱动,只是将其添加到总线的设备链表)
-ENODEV     设备没有注册(registered) -- 设备在哪里注册?

如果设备和驱动匹配成功;或者设备已经注册,但是总线上没有与之相匹配的驱动,bus_attach_device()将调用klist_add_tail()将设备添加到总线的设备链表尾部。
(tanxiang1103)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201212/16422.html]
本文出处:网易博客 作者:tanxiang1103 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容