设备 驱动 总线模型#
- dev.c
#include <linux/module.h>
#include <linux/platform_device.h>
static struct platform_device *mydev;
static int __init mydev_init(void)
{
mydev = platform_device_alloc("mydev", -1);
if(!mydev){
return -ENOMEM;
}
platform_device_register(mydev);
return 0;
}
module_init(mydev_init);
static void __exit mydev_exit(void)
{
platform_device_unregister(mydev);
}
module_exit(mydev_exit);
MODULE_LICENSE("GPL v2");
- drv.c
#include <linux/module.h>
#include <linux/types.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <linux/slab.h>
#include <linux/poll.h>
#include <linux/platform_device.h>
#include <linux/miscdevice.h>
#include <linux/of_device.h>
static int my_probe(struct platform_device *pdev)
{
printk(KERN_DEBUG "my probe\n");
return 0;
}
static int my_remove(struct platform_device *pdev)
{
printk(KERN_DEBUG "my remove\n");
return 0;
}
static struct platform_driver myDrv = {
.driver = {
.name = "mydev",
.owner = THIS_MODULE,
},
.probe = my_probe,
.remove = my_remove,
};
module_platform_driver(myDrv);
// module_platform_driver(xxx);
// 最终展开后就是如下形式:
// static int __init xxx_init(void)
// {
// return platform_driver_register(&xxx);
// }
// module_init(xxx_init);
// static void __exit xxx_exit(void)
// {
// return platform_driver_unregister(&xxx);
// }
// module_exit(xxx_exit);
MODULE_LICENSE("GPL v2");