系统启动:
start_kernel( void ) ——> rest_init ( ) —— > 启动内核线程kernel_thread( ),并执行kernel_init继续初始化
——> do_basic_setup( void ) ——> driver_init( void ) ——> platform_bus_init( )完成虚拟设备初始化
一、platform_device:
1、资源resource的实现
2、platform_device_id结构体:用于匹配内容
二、platform_driver:通过实现其定义的函数,从而完成相应的操作;
1、有无platform架构关于驱动安装和卸载的对比:
(1)没有platform架构:
(2)有platform架构:
2、设备的关闭、暂停、恢复(可选):
3、驱动的基类(实现继承)和匹配操作:
三、platform设备和驱动的注册函数:
1、注册:将platform设备注册到platform总线上;
(1)platform_device_add:
(2)platform_bus:系统初始化时注册的表示虚拟总线的设备;
(3)platform_bus_type:系统初始化时调用platform_bus_init将platform_bus_type注册到内核中;
最后调用device_add将platform_device_add设备注册到内核中;
2、注册平台驱动paltform_driver_register():
(1)匹配函数(设备和驱动需要匹配):platfoem_bus_init ——> platfoem_bus_type ——> platfoem_match
通过dev和drv得到平台设备和驱动的*pdrv指针!!!
1)platform_device:通过platform_device得到device dev的地址,再通过container_of逆推得到platform_device的地址;
2)如果定义了id_table,则通过以下规则匹配,否则查看pdev和drv的name是否相等;即如果平台设备和平台驱动名字相同则匹配成功(前提没有定义id_table)。