Platform是一种模型
它把硬件和软件分离出来,就像单片机一样的,你在使用某个模块的时候,第一要看原理图,知道这个模块连在那个引脚上,要知道有多少个引脚,第二就是根据模块手册的上信息,去操作这些引脚。
platform的device就是硬件(多少个引脚,用了什么资源),platform的driver就是驱动(操作这些引脚来初始化模块)。
所以就要有两个文件:
一个xxx_device.c,里面描述了硬件相关的信息。
一个xxx_driver.c,里面描述着怎么操作模块。
这两个文件怎么匹配起来?
在结构体platform_device 中有一个成员name,它会和结构体platform_driver中的成员driver的成员name匹配,名字一样,说明driver可以去使用device的资源(即硬件)。
匹配成功会发生什么?
结构体platform_driver中有一个成员函数指针 probe,一旦匹配成功,就会去执行probe函数,在这里面就是初始化的操作了。
设备树与platform
可以去使用设备树,这样可以不需要额外写device.c文件。如果要使用设备树的方式,设备树中compatible中的属性值与结构体platform_driver的成员id_match_table的值保持一致,当这两个属性一致时,也会去调用probe函数,再调用相关函数即可获取到设备树中的节点资源,初始化模块。