驱动框架

通过使用platform设备驱动框架,实现led驱动与设备操作的分离。

 
 

我们关注led_drv里面的 struct platform_driver led_drv里面的.probe函数,当有同名的device注册到内核,将运行这个driver的probe函数(同名的:led_dev里面的struct platform_device led_dev里面的.name与 struct platform_driver led_drv里面的.name一一对应)。

 
 

led_dev.c

1

5

20

21         []                 .start                          .end                          .flags                 },
27

28         []                 .start                          .end                          .flags                 }
33 };
34

35 {
37

38 }
39

40         .name                                  .id                                  .num_resources                  .resource                         .dev                 .release         }
48 };
49

50

51 {
53         platform_device_register(         ;
55 }
56

57

58 {
60         platform_device_unregister(          }
63

64 module_init(led_dev_init);
65 module_exit(led_dev_exit);
66 MODULE_LICENSE("GPL");

 
 

 
 

led_drv.c

1

5

20

21

22

24

27

30

32

33 {
35                                    ;
39 }
40

41
{
44         

46         copy_from_user(                  {
49                          }
51                                   }
54         ;
55 }
56

57         .owner                  .open                  .write         };
62

63 {
65         

67         printk(         
69                  res );
71         gpioctl         gpiodat

74         res );
75         led_pin

77                  major ,

80         led_class

82                  led_class_dev ),

85         ;
86 }
87

88 {
90         printk(         

93                  unregister_chrdev(major,         class_device_unregister(led_class_dev);
96         class_destroy(led_class);
97

98                  iounmap(gpioctl);
100

101         ;
102 }
103

104         .probe                  .remove         .driver                 .name                  }
110 };
111

112 {
114         platform_driver_register(         ;
116 }
117

118 {
120         platform_driver_unregister(          }
123

124 module_init(led_drv_init);
125 module_exit(led_drv_exit);
126 MODULE_LICENSE("GPL");

 
 

app.c

1

6 {
8                                    
12         printf(                  {
15                 printf(                          }
18         
19         filename ];
20         
21         printf(         
23         fd                  {
26                 printf(                          }
29         
30                  ]))
32         {
33                 val                 write(fd, );
35         }
36                  ]))
38         {        
39                 val                 write(fd, );
41         }
42         ;        
43 }

 
 

Makefile

1

3         make -C

6         make -C         rm -rf modules.order
9

10 obj-m += led_drv.o
11 obj-m +=
led_dev.o

platform设备驱动框架的更多相关文章

  1. Linux设备驱动框架设计

    引子 Linux操作系统的一大优势就是支持数以万计的芯片设备,大大小小的芯片厂商工程师都在积极地向Linux kernel提交设备驱动代码.能让这个目标得以实现,这背后隐藏着一个看不见的技术优势:Li ...

  2. Linux内核驱动学习(四)Platform设备驱动模型

    Linux platform设备驱动模型 文章目录 Linux platform设备驱动模型 前言 框架 设备与驱动的分离 设备(device) 驱动(driver) 匹配(match) 参考 前言 ...

  3. Linux 设备驱动开发 —— platform设备驱动应用实例解析

    前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 —— platform 设备驱动 ,下面将通过一个实例来深入我们的学习. 一.platform 驱动的工作过程 platfor ...

  4. 一步步理解linux字符设备驱动框架(转)

    /* *本文版权归于凌阳教育.如转载请注明 *原作者和原文链接 http://blog.csdn.net/edudriver/article/details/18354313* *特此说明并保留对其追 ...

  5. 宋宝华:Linux设备驱动框架里的设计模式之——模板方法(Template Method)

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前言 <设计模式>这本经典 ...

  6. Linux内核的LED设备驱动框架【转】

    /************************************************************************************ *本文为个人学习记录,如有错 ...

  7. RT Thread的SPI设备驱动框架的使用以及内部机制分析

    注释:这是19年初的博客,写得很一般,理解不到位也不全面.19年末得空时又重新看了RTThread的SPI和GPIO,这次理解得比较深刻.有时间时再整理上传. -------------------- ...

  8. platform设备驱动全透析

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://21cnbao.blog.51cto.com/109393/337609 1.1 ...

  9. 【linux设备模型】之platform设备驱动

    一.platform总线.设备和驱动     platform是一种虚拟总线,对应的设备称为platform_device,对应的驱动称为platform_driver. platform_devic ...

随机推荐

  1. XModem与YModem

    XModem用在串口异步传文件: #define SOH 0x01 #define STX 0x02 #define EOT 0x04 #define ACK 0x06 #define NAK 0x1 ...

  2. Linux centosVMware 配置Tomcat监听80端口、配置Tomcat虚拟主机、Tomcat日志

    一.配置Tomcat监听80端口 关闭tomcat报错 [root@davery src]# /usr/local/tomcat/bin/shutdown.sh 重装tomcat即可 vim /usr ...

  3. 超参数 hyperparameters

    转载:https://www.cnblogs.com/qamra/p/8721561.html 超参数的定义:在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据 ...

  4. Android Studio的HAXM不支持虚拟机

    因为我的计算机是服务器,不支持虚拟机,所以报这个错了. 解决方式是直接连接物理手机,打开USB调试,安装驱动,运行项目即可.

  5. 为什么阿里Java规约要求谨慎修改serialVersionUID字段

    serialVersionUID简要介绍 serialVersionUID是在Java序列化.反序列化对象时起作用的一个字段.Java的序列化机制是通过判断类的serialVersionUID来验证版 ...

  6. 【剑指Offer面试编程题】题目1517:链表中倒数第k个结点--九度OJ

    题目描述: 输入一个链表,输出该链表中倒数第k个结点. (hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为两个整数n和k(0< ...

  7. java并发LockSupport

    java并发LockSupport LockSupport是阻塞和唤醒线程的重要类. park()方法使得当前线程阻塞 unpark(Thread thread)唤醒线程 例子 可以把注释取消再执行, ...

  8. 用于云计算的自我更新、自我修补的Linux版本已发布!

    自动化是 IT 行业的增长趋势,其目的是消除重复任务中的手动干扰.Oracle 通过推出 Oracle Autonomous Linux 向自动化世界迈出了又一步,这无疑将使 IoT 和云计算行业受益 ...

  9. Fiddler抓取HTTPS

    对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler.可是在初学时,大家对于fiddler如何抓取HTTPS真是伤了脑筋,可能你一步步按着网上的帖子成功了,那当然是极好的. 有可能没有成 ...

  10. springboot#配置https

    1.准备证书 2.1 springboot 1.x配置 2.2 springboot 2.x配置 1.准备证书: keytool -genkeypair -alias tomcat -keyalg R ...