驱动框架

通过使用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. Linux命令:route命令

    route显示或修改IP路由表 route -n:显示路由信息,使用数字格式显示,不反解地址到主机名 #route -n Kernel IP routing table Destination Gat ...

  2. macOS 10.14+ 安装LTP

    LTP是哈尔滨工业大学(HIT,窝工)出品的一个自然语言处理工具包.其功能包括中文分词(“分词效果好于jieba分词”[引用自学长]).词性标注.实体识别等. 对于macOS来说,现有的版本可能不多, ...

  3. 设计模式课程 设计模式精讲 8-3 单例设计模式-DoubleCheck双重检查实战及原理解析

    1 课程讲解 1.1 为何要使用双重检查 1.2 双重检查的缺点 1.3 指令重排序讲解 1.4 指令重排序比喻(自己理解) 1.5 如何解决指令重排序问题 2 代码演练 2.1 代码演练1(双重检查 ...

  4. 在 aws emr 上,将 hbase table A 的数据,对 key 做 hash,写到另外一张 table B

    先 scan 原表,然后 bulkload 到新表. 采坑纪录1. bulkload 产生 hfile 前,需要先对 hash(key) 做 repartition,在 shuffle 的 read ...

  5. 如何优雅的写好python代码?

    Python与其他语言(比如 java或者 C ++ )相比有较大的区别,其中最大的特点就是非常简洁,如果按照其他语言的思路老师写Python代码,则会使得代码繁琐复杂,并且容易出现bug,在Pyth ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:激活状态

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Python 数组

    使用之前要先导入函数库  import numpy as np 数组名=np.zeros(数组大小,数据类型)    初始化为0值,这里的数据类型只能是数值类型,字符类型不能用 一.一维数组 impo ...

  8. Screen命令让Linux shell在后台运行

    #screen ping ychack.com //挂置后台ping本站 #screen ping baidu.com //挂置后台ping百度 #screen -ls //列出进程 #screen ...

  9. css实现单行居中,两行居左

    居中需要用到 text-align:center,居左是默认值也就是text-align:left.要让两者结合起来需要多一个标签. <h2><p>单行居中,多行居左</ ...

  10. 第1节 storm编程:2、storm的基本介绍

    课程大纲: 1.storm的基本介绍 2.storm的架构模型 3.storm的安装 4.storm的UI管理界面 5.storm的编程模型 6.storm的入门程序 7.storm的并行度 8.st ...