我目前正在查看 sound/soc/imx 中的机器驱动程序。在初始化函数中,按此顺序;
platform_driver_register(...);
...
platform_device_alloc(..., ...);
platform_set_drvdata(..., ...);
platform_device_add(...);
...
对于平台设备,为什么需要先做"分配"然后做"添加"?
platform_device_alloc()
的意思是"创建平台设备";platform_device_add()
的意思是"将平台设备添加到设备层次结构",所以我只是想知道,为什么两者都需要?
platform_device_alloc函数仅执行platform_device结构的内存分配,并使用外部参数初始化其变量。
http://lxr.free-electrons.com/source/drivers/base/platform.c#L197
platform_device_add 函数执行在设备驱动程序层次结构中注册预期设备所需的所有任务。
http://lxr.free-electrons.com/source/drivers/base/platform.c#L277
这两个函数的分离旨在允许驱动程序开发人员在需要时进行粒度级别的配置。
这两个操作组合在platform_device_register_simple和其他相关功能中,这些功能在其中执行内存分配和设备注册。