字符设备驱动之笔记-Platform设备驱动机制(2)
来源:互联网 发布:淘宝哪里有卖av碟片 编辑:程序博客网 时间:2024/09/21 06:21
/* 1.构建平台驱动的结构体*/
static struct platform_driver s3c2410fb_driver = {
.probe = s3c2410fb_probe,
.driver = {
.name = "s3c2410-lcd",
.owner = THIS_MODULE,
},
};
/*2. 注册这个平台驱动结构体*/
int __devinit s3c2410fb_init(void)
{
return platform_driver_register(&s3c2410fb_driver);
}
platform_driver_register里面做了什么事情
----------------------------------------------------------------------------
drv->driver.bus = &platform_bus_type; /*将我们的驱动bus设置为虚拟的平台总线类型*/
return driver_register(&drv->driver); /*向虚拟平台总线的驱动链表上注册*/
return bus_add_driver(drv); /*将本drv驱动注册登记到drv->bus所在的总线上*/
/*里面实现了什么*/
if (drv->bus->drivers_autoprobe) {
error = driver_attach(drv); /*调用此函数去总线的设备链表上匹配*/
return bus_for_each_dev(drv->bus, NULL, drv, __driver_attach); /*搜寻设备链表上的每个设备并调用 总线的match函数*/
klist_iter_init_node(&bus->klist_devices, &i,
(start ? &start->knode_bus : NULL));
while ((dev = next_device(&i)) && !error)
error = fn(dev, data); //__driver_attach
klist_iter_exit(&i);
__driver_attach的分析:
---------------------------------------------------------
if (!dev->driver)
driver_probe_device(drv, dev);
if (drv->bus->match && !drv->bus->match(dev, drv)) //drv->bus->platform_match
goto done;
ret = really_probe(dev, drv);
{
else if (drv->probe) {
ret = drv->probe(dev); //s3c2410fb_probe,
}
}
platform_bus_type 结构体的定义:
--------------------------------------------------------
struct bus_type platform_bus_type = {
.name = "platform",
.dev_attrs = platform_dev_attrs,
.match = platform_match,
.uevent = platform_uevent,
.suspend = platform_suspend,
.suspend_late = platform_suspend_late,
.resume_early = platform_resume_early,
.resume = platform_resume,
};
里面有个非常关键的函数platform_match
platform_match里面做了什么事情:(匹配驱动和设备)
---------------------------------------------------------------------------
static int platform_match(struct device * dev, struct device_driver * drv)
{
struct platform_device *pdev = container_of(dev, struct platform_device, dev);
/*靠名字来匹配,名字哪里来的 .name = "s3c2410-lcd"*/
return (strncmp(pdev->name, drv->name, BUS_ID_SIZE) == 0);
}
- 字符设备驱动之笔记-Platform设备驱动机制(2)
- 字符设备驱动之笔记-Platform设备驱动机制(1)
- 字符设备驱动之LED-平台设备驱动(platform设备驱动)
- 字符设备驱动之LED-平台设备驱动(platform设备驱动)
- 字符设备注册platform平台驱动机制
- Linux-Platform 字符设备驱动
- 字符设备驱动之I2C设备驱动(2)
- linux字符设备驱动-poll机制笔记
- 驱动笔记(2)--字符设备
- 字符设备驱动之笔记-misc设备驱动分析
- Linux之platform设备驱动
- Linux字符设备驱动之poll机制
- linux 设备驱动笔记 - 字符设备驱动
- 【linux设备模型】之platform设备驱动
- Linux设备驱动之《字符设备驱动》
- 设备驱动之二----字符设备驱动
- 字符设备驱动之I2C设备驱动
- Linux设备驱动之字符设备驱动
- 关于ANR
- 女子花2万元雇友人杀逝世女街坊
- Direct3D几何流水线
- Earthquake
- 字符设备驱动之笔记-Platform设备驱动机制(1)
- 字符设备驱动之笔记-Platform设备驱动机制(2)
- 插入排序
- POJ3080
- 在Kmplayer中设置多字幕
- 完美攻略Apache+Svn
- C++ Primer Plus学习:第十二章 类和动态内存(1)
- 如何提取网页中的视频
- Use WLST offline to update a Weblogic domain
- HDU 倒数第二小