Linux设备模型之platform总线-

一:前言

Platform总线是kernel中最近加入的一种虚拟总线.在近版的2.6kernel中,很多驱动都用platform改写了.只有在分析完platform总线之后,才能继续深入下去分析.在分析完sysfs和设备驱动模型之后,这部份应该很简单了.闲言少叙.步入正题.GO.GO!以下的源代码分析是基于2.6.25的.

二:platform概貌

在分析源代码之前,先在内核代码中找一个platform架构的驱动程序.下面以i8042芯片的驱动为例进行分析.

在linux-2.6.25/drivers/input/serio/i8042.c的intel 8042的初始化入口中,有以下代码分段: static int __init i8042_init(void)

{

……

err = platform_driver_register(&i8042_driver);

if (err)

goto err_platform_exit;

i8042_platform_device = platform_device_alloc("i8042", -1);

if (!i8042_platform_device) {

err = -ENOMEM;

goto err_unregister_driver;

}

err = platform_device_add(i8042_platform_device);

if (err)

goto err_free_device;

……

}

我们在上面的程序片段中看到,驱动程序先注册了一个platform device.然后又添加了一个platform device.这里就涉及到了platform的两个最主要的操作,一个设备驱动注册,一个设备注册.

要了解platform总线的来龙去脉.得从它的初始化开始.

三:platform初始化

Platform总线的初始化是在linux-2.6.25/drivers/base/platform.c中的platform_bus_init()完成的,代码如下:

int __init platform_bus_init(void)

{

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐