平台设备通过device tree实现
在设备树的soc节点下添加node
testplat {
compatible = "testfac,plat";
};
机器会根据设备树的节点来自动创建平台设备,platform_driver的driver成员里的of_match_table的compatible成员与设备树里的compatible属性匹配时,就会执行platform_driver里设置的probe函数。
参考代码
#include <linux/init.h>
#include <linux/module.h>
#include <linux/major.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/platform_device.h>
#define TAG "testplat"
static int test_plat_probe(struct platform_device *dev)
{
printk(TAG" FUNC:%s LINE:%d\n", __func__, __LINE__);
return 0;
}
static const struct of_device_id test_plat_of_match[] = {
{ .compatible = "testfac,plat", },
{},
};
static struct platform_driver test_plat_drv = {
.probe = test_plat_probe,
.driver = {
.name = "testplat",
.owner = THIS_MODULE,
.of_match_table = test_plat_of_match,
},
};
static int test_plat_init(void)
{
int ret;
printk(TAG" FUNC:%s LINE:%d\n", __func__, __LINE__);
ret = platform_driver_register(&test_plat_drv);
return ret;
}
static void test_plat_exit(void)
{
printk(TAG" FUNC:%s LINE:%d\n", __func__, __LINE__);
platform_driver_unregister(&test_plat_drv);
}
module_init(test_plat_init);
module_exit(test_plat_exit);
MODULE_LICENSE("GPL");
执行platform_driver_register时,会优先根据of_match_table里的compatible来匹配平台设备,匹配到的话,执行probe函数。