Linux设备模型实例

来源:互联网 发布:血酬定律知乎 编辑:程序博客网 时间:2024/05/17 04:45

led_dev.c

/*分配/设置/注册一个platform_device*/#include <linux/kernel.h>#include <linux/types.h>#include <linux/interrupt.h>#include <linux/list.h>#include <linux/timer.h>#include <linux/init.h>#include <linux/serial_core.h>#include <linux/platform_device.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>static struct resource led_resource[] = {//[0] = DEFINE_RES_MEM(0x56000050, 8),//[1] = DEFINE_RES_IRQ(4),};struct platform_device led_dev = {.name= "myled",.id= 0,.num_resources= ARRAY_SIZE(led_resource),.resource= led_resource,};//入口函数static int led_dev_init(void){//注册一个平台设备platform_device_register(&led_dev);return 0;}//出口函数static void led_dev_exit(void){platform_device_unregister(&led_dev);}module_init(led_dev_init);module_exit(led_dev_exit);MODULE_LICENSE("GPL");




led_drv.c

/*分配/设置/注册一个platform_driver*/#include <linux/module.h>#include <linux/version.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/interrupt.h>#include <linux/irq.h>#include <linux/sched.h>#include <linux/pm.h>#include <linux/slab.h>#include <linux/sysctl.h>#include <linux/proc_fs.h>#include <linux/delay.h>#include <linux/platform_device.h>#include <linux/input.h>//probe函数static int led_probe(struct platform_device *pdev){//根据platform_device的资源进行ioremap//注册字符设备驱动程序printk(KERN_ALERT "led_probe: find led!\n");return 0;}static int led_remove(struct platform_device *pdev){//卸载字符设备驱动程序//iounmapprintk(KERN_ALERT "led_remove: remove led!\n");return 0;}//注册一个platform driverstatic struct platform_driver led_drv = {.probe= led_probe,.remove= led_remove,.driver= {.name= "myled",.owner= THIS_MODULE,}};//入口函数static int led_drv_init(void){platform_driver_register(&led_drv);return 0;}//出口函数static void led_drv_exit(void){platform_driver_unregister(&led_drv);}module_init(led_drv_init);module_exit(led_drv_exit)MODULE_LICENSE("GPL");