2012-09-02 10:57:50
分类: LINUX
下面来看看内核时怎么注册platform总线的过程
点击(此处)折叠或打开
- int __init platform_bus_init(void)
- {
-
int error; -
early_platform_cleanup();
-
error = device_register(&platform_bus);//注册了platform的设备 -
if (error) -
return error; -
error = bus_register(&platform_bus_type);//注册了platform总线 -
if (error) -
device_unregister(&platform_bus);
-
return error; - }
点击(此处)折叠或打开
- 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_dev_pm_ops, - };
1、定义一个platform_device,并注册
2、定义一个platform_driver,并注册
定义platform_device过程
点击(此处)折叠或打开
- struct platform_device *platform_device_alloc(const char *name, int id)
- {
-
struct platform_object *pa; -
pa = kzalloc(sizeof(struct platform_object) + strlen(name), GFP_KERNEL); -
if (pa) { -
strcpy(pa->name, name); -
pa->pdev.name = pa->name; -
pa->pdev.id = id; -
device_initialize(&pa->pdev.dev);
-
pa->pdev.dev.release = platform_device_release; -
arch_setup_pdev_archdata(&pa->pdev);
-
}
-
return pa ? &pa->pdev : NULL; - }
下面首先来看看platform_device的注册过程
点击(此处)折叠或打开
- struct platform_device {
-
const char * name; //设备名 -
int id; //设备ID -
struct device dev;
-
u32 num_resources; //设备使用的资源的数目 -
struct resource * resource; //设备使用的资源 -
const struct platform_device_id *id_entry;
-
/* MFD cell pointer */ -
struct mfd_cell *mfd_cell; -
/* arch specific additions */ -
struct pdev_archdata archdata;
- };
点击(此处)折叠或打开
- struct resource {
-
resource_size_t start; -
resource_size_t end; -
const char *name; -
unsigned long flags; -
struct resource *parent, *sibling, *child; - };
点击(此处)折叠或打开
- int platform_device_register(struct platform_device *pdev)
- {
-
device_initialize(&pdev->dev);//dev初始化
-
arch_setup_pdev_archdata(pdev);
-
return platform_device_add(pdev);//加入到dev链表 - }
点击(此处)折叠或打开
- int platform_device_add(struct platform_device *pdev)
- {
-
int i, ret = 0; -
if (!pdev) -
return -EINVAL; -
if