平台设备驱动模型
构造platform_driver结构体,用platform_driver_register来注册这个结构体
构造platform_device结构体,用platform_device_register来注册这个结构体
用platform_device_register来注册平台设备,如果有同名的平台驱动,执行平台驱动的probe函数
用platform_driver_register来注册平台驱动,如果有同名的平台设备,执行平台驱动的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 struct platform_device test_plat_dev = {
.name = "testplat",
};
static int test_plat_probe(struct platform_device *dev)
{
printk(TAG" FUNC:%s LINE:%d\n", __func__, __LINE__);
return 0;
}
static struct platform_driver test_plat_drv = {
.probe = test_plat_probe,
.driver = {
.name = "testplat",
.owner = THIS_MODULE,
},
};
static int test_plat_init(void)
{
int ret;
printk(TAG" FUNC:%s LINE:%d\n", __func__, __LINE__);
platform_device_register(&test_plat_dev);
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);
platform_device_unregister(&test_plat_dev);
}
module_init(test_plat_init);
module_exit(test_plat_exit);
MODULE_LICENSE("GPL");
在执行platform_driver_register(&test_plat_drv)时,由于有同名(都为testplat)的设备,test_plat_drv的probe函数就会执行。