int platform_device_register(struct platform_device * pdev) { device_initialize(&pdev->dev); return platform_device_add(pdev); } 它首先调用device_initialize()来初始化该设备,然后调用platform_device_add()来添加该设备。关于device_initialize()我们暂且不分析,在这里只关注platform_device_add() // ...
2.另外一种机制就是动态申请platform_device_alloc()一个platform_device设备,然后通过platform_device_add_resources及platform_device_add_data等添加相关资源和属性。 无论哪一种platform_device,最终都将通过platform_device_add这册到platform总线上。 区别在于第二步:其实platform_device_add()包括device_add(),不...
my_device = platform_device_alloc("my_dev", -1); /*注册设备*/ ret = platform_device_add(my_device); /*注册失败,释放相关内存*/ if (ret) platform_device_put(my_device); return ret; } static void my_device_exit(void) { platform_device_unregister(my_device); } module_init(my_devic...
* private data.*/structbus_type {constchar*name;constchar*dev_name;structdevice *dev_root;conststructattribute_group **bus_groups;conststructattribute_group **dev_groups;conststructattribute_group **drv_groups;int(*match)(structdevice *dev,structdevice_driver *drv);int(*uevent)(structdevice *d...
3.注册字符设备驱动cdev_alloc cdev_init cdev_add(与内核有关) 4.利用udev/mdev机制创建设备文件(节点), class_create,device_create(与内核有关) 5.硬件部分初始化 io资源映射ioremap,内核提供gpio库函数(与硬件相关) 注册中断(与硬件相关) 初始化等待队列(与内核有关) ...
设备树的产生就是为了替代driver中过多的platform_device部分的静态定义,将硬件资源抽象出来,由系统统一解析,这样就可以避免各驱动中对硬件资源大量的重复定义,这样一来,几乎可以肯定的是,设备树中的节点最终目标是转换成platform device结构,在驱动开发时就只需要添加相应的platform driver部分进行匹配即可。
int platform_device_register(struct platform_device *pdev); int platform_add_devices(struct platform_device **pdevs, int ndev) 一般的规则是只注册那些实际存在的设备, 但也有例外. 例如, 某外部网卡未必会装配在所有的板子上, 或者某集成控制器所在的板上可能没挂任何外设, 而内核却需要被配置来支持这些...
继续回到platform_device_add()函数里面,如果insert74、_resource()成功,下一步就会调用280行device_add()函数来将设备添加到设备树里面。这个函数暂且不做分析。3 platform_driver驱动的注册过程,一般分为三个步骤:1、定义一个platform_driver结构platform_device对应的驱动是struct platform_driver,它的定义如下/ ...
设备用platform_device表示,驱动用platform_driver进行注册。 const struct platform_device_id *id_table 其中描述硬件…
234 * separately _iff_ pdev was allocated by platform_device_alloc(). 235 */ 236int platform_device_add(struct platform_device *pdev) 237{ 238 int i, ret = 0; 239 240 if (!pdev) 241 return -EINVAL; 242 243 if (!pdev->dev.parent) 244 pdev->dev.parent = &platform_bus; ...