实现

①编写驱动框架

②编写硬件实现代码

(在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. Java 8 有哪些新特性

    一.支持 lambda 表达式 例如:查询学生信息,并打印 List<Student> studentList = Student.findAllStudent(); for(Studen ...

  2. c++继承:公有、私有、保护(对应p12访问限制)

    公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...

  3. 第一次试水bof

    BOF come from https://www.jarvisoj.com/challenges nc pwn2.jarvisoj.com 9881(远程连接) 在ubuntu16.04上进行连接, ...

  4. 搭建私有CA并实现证书颁发

    一.搭建私有CA服务器 1.安装包 # yum -y install openssl 2.生成密钥对儿 # cd /etc/pki/CA # (umask 077;openssl genrsa -ou ...

  5. Python 之并发编程之进程下(事件(Event())、队列(Queue)、生产者与消费者模型、JoinableQueue)

    八:事件(Event()) # 阻塞事件:    e = Event() 生成事件对象e    e.wait() 动态给程序加阻塞,程序当中是否加阻塞完全取决于该对象中的is_set() [默认返回值 ...

  6. 【C++初学者自学笔记一】(把自己刚学到的东西做一下总结,如果有哪些地方不足请留言指正)

    这是我写的第一个博客关于C++的一些笔记,我不会写的太深奥,因为这样很多人会看不懂(我刚开始学C语言深受其害).个人觉得C++这门语言有些类似于C语言但是有些函数的用法还是有不一样的.C语言中的头文件 ...

  7. delphi IdSMTP发送邮件

    TIdPOP3组件简介 TIdPOP3 是用来接收邮件服务器的邮件信息到用户端的一个组件.它实现了RFC 1939协议. 在使用TIdPOP3组件时需设置它的几个成员属性. Host :指定邮件服务器 ...

  8. MySQL操作之DDL

    目录 SQL语句的分类 DDL语句 SQL语句的分类 DDL(Data Definition Languages)语句:数据定义语言.这些语句定义了不同的数据段. 数据库.表.列.索引等数据库对象的定 ...

  9. Android适配底部虚拟按键的方法

    ---恢复内容开始--- 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近项目进行适配的时候发现部分(如华为手机)存在底部虚拟按键的手机会因为虚拟按键的存在导致挡住部分界面,因为需要全屏显示 ...

  10. IAR STM32F10x_StdPeriph_Driver 3.4转3.6.1库

    1.Fatal Error[Pe1696]: cannot open source file core_cmInstr.h STM32F10x_StdPeriph_Driver 3.4库移植换成3.6 ...