用platform可实现驱动和BSP资源的分离,做到资源易于统一管理和驱动易于跨平台移植
a.系统初始化时,调用platform_add_device将设备添加到系统,其实这个函数的具体实现又调用了platform_device_register();
ps:在mx28的BSP中,这个功能被封装在mx28_add_device()中,而mx28_add_device绕过了platform_add_device()最终直接调用platform_device_register()实现的。
b.在驱动加载时,调用platform_driver_register注册驱动;
以上两个步骤中,注册驱动时怎么关联到正确的device的呢?通过各自参数结构(platform_device和platform_driver)中的name匹配的,所以name要一致;
c.在驱动加载时,驱动会调用probe函数,建议在这个函数中使用platform_get_resource去获取与设备相关的resource;
这个resource指针是保存在platform_device的实例中的,随设备实例在初始化时一起注册到系统中的。
ps:在mx28的BSP中,platform_device的实例是以数组表的形式统一定义的(在device.c中dev_lookup[]),然后在要注册device的地方调用 mxs_get_device()获取到相应实例,并将resource指针赋值到这个实例中,再进行platform_add_device(即mx28_add_device)。
阅读(2863) | 评论(0) | 转发(0) |