转了个圈,又回来了
分类: 嵌入式
2010-01-03 13:59:22
Platform总线是Kernel中加入的一种虚拟总线,在最近版本的2.6的内核版本中,很多的驱动都已经用platform改写了。前面已经介绍了如何用platform总线在管理设备,下面介绍platform总线它本身是如何建立的。下面的内核代码是linux2.6.31.5版本的。
首先可以把Platform总线看成一个设备,然后也是一个总线。Platform总线的初始化是在/drivers/base/platform.c中的platform_bus_init()中完成的。
struct device platform_bus = {
.init_name = "platform",
};
struct bus_type platform_bus_type = {
.name = "platform",
.dev_attrs = platform_dev_attrs,
.match = platform_match,
.uevent = platform_uevent,
.pm = PLATFORM_PM_OPS_PTR,
};
int __init platform_bus_init(void)
{
int error;
early_platform_cleanup();
error = device_register(&platform_bus);
if (error)
return error;
error = bus_register(&platform_bus_type);
if (error)
device_unregister(&platform_bus);
return error;
}
这个函数向系统注册platform_bus设备以及platform_bus_type总线。以后的platform的设备都会以此为parent,在sysfs系统中表现为,所有platform类型的设备都会添加在/sys/devices/platform下面。至于device_register, bus_register以及刚才提到的sysfs系统将在以后的文章中介绍。