实现

①编写驱动框架

②编写硬件实现代码

(在Linux系统下操作硬件,需要操作虚拟地址,因此需要先把物理地址转换为虚拟地址 ioremap()

如何实现单个灯的操作:

实现方法之一——操作次设备号

主设备号:用于查找对应的文件操作结构体;

次设备号:用于区分同类型设备下的不同设备;

 
 

 
 

实例

driver.c

1

12

14 ];
16

17

20

23         .open         .write         .owner };
28

29 static int myLED_open(struct
inode {
31                                    ;
35 }
36

37

38
{
41                  

44         copy_from_user(                  {
47                 :
48                                                  {
50                                                          }
52                                                                                   }
55                         

57                 :
58                                                  {
60                                                          }
62                                                                                   }
65                         

67                 :
68                                                  {
70                                                          }
72                                                                                   }
75                         

77                 default:

78                                                  {
80                                                          }
82                                                                                   }
85                         

87         }
88         ;
89 }
90

91 {
93         

95                  gpfcon );
97         gpfdat

99         major ,         myLED_class

102                  myLED_class_dev[] ),

105                  {
107                 myLED_class_dev[minor]         }
109         ;
110 }
111

112 {
114         

116                  iounmap(

119         unregister_chrdev(major,

121         class_device_unregister(myLED_class_dev[]);
122                  {
124                 myLED_class_dev[minor]         }
126         class_destroy(myLED_class);
127          }
129

130 module_init(myLED_init);
131 module_exit(myLED_exit);

 
 

app.c

1

6 {
8                                    
12         printf(                  {
15                 printf(                          }
18         
19         filename ];
20         
21         fd                  {
24                 printf(                          }
27         
28         ]))
29         {
30                 val                 write(fd, );
32         }
33         ]))
34         {        
35                 val                 write(fd, );
37         }
38         ;        
39 }

 
 

Makefile

1

3         make -C

6         make -C $(KERN_DIR) M=`pwd`
modules clean
8         rm -rf modules.order
9

10 obj-m
+= myLED.o

字符设备驱动之LED驱动的更多相关文章

  1. 字符设备驱动之Led驱动学习记录

    一.概述 Linux内核就是由各种驱动组成的,内核源码中大约有85%的各种渠道程序的代码.一般来说,编写Linux设备驱动大致流程如下: 1.查看原理图,数据手册,了解设备的操作方法. 2.在内核中找 ...

  2. 芯灵思Sinlinx A64 linux 通过设备树写LED驱动(附参考代码,未测试)

    开发平台 芯灵思Sinlinx A64 内存: 1GB 存储: 4GB 详细参数 https://m.tb.cn/h.3wMaSKm 开发板交流群 641395230 全志A64设备树结构体 #inc ...

  3. Linux驱动之LED驱动编写

    从上到下,一个软件系统可以分为:应用程序.操作系统(内核).驱动程序.结构图如下:我们需要做的就是写出open.read.write等驱动层的函数.一个LED驱动的步骤如下: 1.查看原理图,确定需要 ...

  4. linux驱动之LED驱动

    通过之前的学习,了解到linux驱动编写的流程是:先通过注册函数注册我们编写的入口函数,然后在入口函数中获取设备号->注册字符设备->自动创建设备节点->获取设备树信息,最后通过销毁 ...

  5. 【Linux 驱动】简单字符设备驱动架构(LED驱动)

    本文基于icool210开发板,内核版本:linux2.6.35: 驱动代码: (1)头文件:led.h #ifndef __LED_H__ #define __LED_H__ #define LED ...

  6. linux驱动之LED驱动_1

    步骤: 1.框架 2.完好硬件的操作: a.看原理图.引脚 b.看2440手冊 c.写代码: IO口须要用ioremap映射 我的板子电路例如以下所看到的 1.配置GPBCON 寄存器,配置输出   ...

  7. linux字符设备驱动--基本知识介绍

    一.设备驱动的分类 1.字符设备 字符设备是指那些能一个字节一个字节读取数据的设备,如LED灯.键盘.鼠标等.字符设备一般需要在驱动层实现open().close().read().write().i ...

  8. Linux字符设备驱动框架

    字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标.键盘.显示器.串口等等,当我们执行ls -l ...

  9. Samsung_tiny4412(驱动笔记03)----字符设备驱动基本操作及调用流程

    /*********************************************************************************** * * 字符设备驱动基本操作及 ...

随机推荐

  1. W - Prime Time 素数判断+前缀和

    W - Prime Time 题意:用公式n*n+n+41,判断素数的百分比 #include<iostream> #include<algorithm> #include&l ...

  2. STM32 RTC上的唤醒和闹钟

    RTC很简单只要给备用电,RTC就会不停,可以进行设置和读时间.同时在RTC上也涉及了闹钟(EXTI_17:RTC_FLAG_ALRAF,相当于RTC的定时器,闹钟到了之后进行异步操作)和唤醒中断(低 ...

  3. CSP-J2019 加工零件

    Background: 之前 $noip $死了,泥萌都说 \(noip SPFA\) 了,现在 \(noip\) 复活了,所以 \(SPFA\) 也复活了. (注:这里的 \(noip\) 跟 \( ...

  4. Spark 写 Hive table 非常慢【解决】

    代码如下: dataFrame.createOrReplaceTempView("view_page_utm") val sql = s""" |in ...

  5. Centos7 配置subversion

    CentOS7:配置SVN服务器 Posted on 2016-11-10 15:17 eastson 阅读(4266) 评论(0) 编辑 收藏 1. 安装 CentOS通过yum安装subversi ...

  6. iOS直播集成和问题总结(阿里云直播)

    https://www.jianshu.com/p/714ce954e628 最近接手公司的直播项目,对以前遗留的问题做处理和优化, 于是顺便看了下阿里云直播的文档,在下面写下对直播的理解和遇到的问题 ...

  7. Element-UI中关于table表格的样式操作

    项目中使用到element-ui组件库,经常需要操作表格,编辑样式的过程中遇到一些问题,官网针对table给出了很多的api,自己可以自定义,基本能满足产品需求,但是没有给出具体的案例,网上的资料也比 ...

  8. GPU运行Tensorflow的几点建议

    1.在运行之前先查看GPU的使用情况: 指令:nvidia-smi 备注:查看GPU此时的使用情况 或者 指令:watch nvidia-smi 备注:实时返回GPU使用情况 2.指定GPU训练: 方 ...

  9. 华为轮值CEO,富士康却坚持独裁,二者究竟有什么不一样?

    谈到深圳龙华的大企业,人们会很自然地想到华为和富士康,两家公司毗邻,有两个门仅仅隔着一条马路,都是世界500强,对国家,对社区的经济发展有着重要贡献,员工压力最大的时候,也都出现过自杀的情况,一个讲究 ...

  10. emWin 模拟器环境搭建

    转载http://www.nxpic.org/module/forum/thread-609329-1-1.html 这个模拟器工程在Segger官网下载:https://www.segger.com ...