字符设备驱动之LED驱动
实现
①编写驱动框架
②编写硬件实现代码
(在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驱动的更多相关文章
- 字符设备驱动之Led驱动学习记录
一.概述 Linux内核就是由各种驱动组成的,内核源码中大约有85%的各种渠道程序的代码.一般来说,编写Linux设备驱动大致流程如下: 1.查看原理图,数据手册,了解设备的操作方法. 2.在内核中找 ...
- 芯灵思Sinlinx A64 linux 通过设备树写LED驱动(附参考代码,未测试)
开发平台 芯灵思Sinlinx A64 内存: 1GB 存储: 4GB 详细参数 https://m.tb.cn/h.3wMaSKm 开发板交流群 641395230 全志A64设备树结构体 #inc ...
- Linux驱动之LED驱动编写
从上到下,一个软件系统可以分为:应用程序.操作系统(内核).驱动程序.结构图如下:我们需要做的就是写出open.read.write等驱动层的函数.一个LED驱动的步骤如下: 1.查看原理图,确定需要 ...
- linux驱动之LED驱动
通过之前的学习,了解到linux驱动编写的流程是:先通过注册函数注册我们编写的入口函数,然后在入口函数中获取设备号->注册字符设备->自动创建设备节点->获取设备树信息,最后通过销毁 ...
- 【Linux 驱动】简单字符设备驱动架构(LED驱动)
本文基于icool210开发板,内核版本:linux2.6.35: 驱动代码: (1)头文件:led.h #ifndef __LED_H__ #define __LED_H__ #define LED ...
- linux驱动之LED驱动_1
步骤: 1.框架 2.完好硬件的操作: a.看原理图.引脚 b.看2440手冊 c.写代码: IO口须要用ioremap映射 我的板子电路例如以下所看到的 1.配置GPBCON 寄存器,配置输出 ...
- linux字符设备驱动--基本知识介绍
一.设备驱动的分类 1.字符设备 字符设备是指那些能一个字节一个字节读取数据的设备,如LED灯.键盘.鼠标等.字符设备一般需要在驱动层实现open().close().read().write().i ...
- Linux字符设备驱动框架
字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标.键盘.显示器.串口等等,当我们执行ls -l ...
- Samsung_tiny4412(驱动笔记03)----字符设备驱动基本操作及调用流程
/*********************************************************************************** * * 字符设备驱动基本操作及 ...
随机推荐
- 孤荷凌寒自学python第103天认识区块链017
[主要内容] 今天继续分析从github上获取的开源代码怎么实现简单区块链的入门知识,共用时间25分钟. (此外整理作笔记花费了约34分钟) 详细学习过程见文末学习过程屏幕录像. 今天所作的工作是进一 ...
- Python学习第十六课——静态属性(property, classmethod, staticmethod)
计算所居住房子的面积 普通写法 class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.ow ...
- HDU 5568:sequence2 大数+DP
sequence2 Accepts: 93 Submissions: 358 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6553 ...
- Android。WebView加载UR请求使用Cookie储存User_Id记录用户是否登陆过
1.WebView初始化的时候用倒如下代码: if (Build.VERSION.SDK_INT >= 21) { CookieManager.getInstance().setAcceptTh ...
- JS如何阻止事件冒泡
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default5.aspx. ...
- arduino#呼吸灯
; // 使用引脚号 void setup() { // nothing happens in setup } void loop() { // fade in from min to max in ...
- 3 (mysql实战) 事务隔离
提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱. 转账过程具体到程序里会有一系列的操作,比如 ...
- mybatis typealias 问题
最近在学mybatis 在一个简单的问题上却花了挺长时间 网上也没发现有类似的案例 故记录一下 在configuration里面 typealias 和 properties 同时用会出错 具体原因 ...
- JS 循环赋值
var x_world_map_tiles = 100; var y_world_map_tiles = 100; var world_map_array = []; for (i=0; i<= ...
- Eclipse传递main函数参数
在项目上右击 Run As->Run Configurations...->Arguments->在Program arguments:的文本框中输入你要传入的参数,若有几个参数则在 ...