第七章 LED将为我们闪烁:控制发光二极管
第七章 LED将为我们闪烁:控制发光二极管
本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关。用到了几个LED代码文件路径:随书光盘、虚拟环境两个。
一、LED驱动的实现原理:linux驱动与硬件打交道的方式是与本届的I/O内存进行交互,而这里所说的I/O内存就是通过各种接口(PCI、USB、蓝牙、以太网接口等)连接到(PC、手机)的硬件(网卡、摄像头等)在主机上的映射,然后进行硬件交互。
二、编写LED驱动:创建LED驱动的设备文件:1.使用cdev_init函数初始化cdev;2.指定设备号;3.使用cdev_add函数将字符设备添加到内核的字符设备数组当中;4.使用struct_create宏创建struct_class;5.使用device_create函数创建设备文件。然后就是卸载LED驱动的设备文件,接下来设置寄存器与初始化LED驱动,最后控制LED。
三、测试LED驱动:首先编写测试I/O控制命令的通用程序,然后NDK测试LED驱动程序,接下使用java代码测试,在这几步中要用到那两个代码文件路径。
四、LED驱动的移植:移植成功后就可以完美的控制LED4个小灯的亮灭啦!
一个完整的linux驱动主要由内部处理和与硬件交互两部分组成。其中内部处理主要是指linux驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑等。与硬件交互主要是指通过ioweite、ioread32等函数与硬件中的寄存器进行数据的交互。Linux驱动在不同平台的移植也是处理这两部分。如果在不同Linux内核版本之间的移植,主要是移植第1部分,如果在不同硬件平台的移植,主要是移植第二部分。
我们在控制LED亮、灭之前必须会寄存器了如指掌:包括LED有两个引脚线、控制LED需要通过3个寄存器来完成、每个寄存器可以使用4个字符、使用GPMDAT寄存器的低4位来控制4个LED灯的亮灭。
LED驱动可以使用两种方法控制驱动:1、通过字符串控制LED;2、通过I/O命令控制LED
卸载驱动的设备文件:依次调用device_destroy class_destroy unregister_chrdev_region方法
Led驱动有两种与设备文件交互的方式:直接写入字符串数据和I/O控制命令。直接向设备文件写入数据可以使用命令行方式来完成,也可以通过write函数来完成。但I/O控制命令只能通过ioctl函数发出。
执行ioctl命令的语法格式:ioctl <设备文件> <cmd> <arg> (命令行参数必须至少有三个)
一个完整的Linux驱动主要由内部处理和硬件交互两部分组成,其中内部处理只要指Linux驱动的装载卸载、与设备文件相关的动作处理。与硬件交互主要是指通过iowrite32、ioread32等函数与硬件中的寄存器进行数据交互。
第七章 LED将为我们闪烁:控制发光二极管的更多相关文章
- 第七章 LED将为我闪烁:控制发光二极管
该Linux驱动用来控制开发板上的4个LED灯,即通过向Linux驱动发送数据可以控制LED灯的开关.LED驱动提供两种交互方式:命令和读写设备文件. 测试LED驱动之前需用USB线连接开发板,然后打 ...
- 第七章 LED 将为我闪烁:控制发光二级管
在上一章中了解到驱动程序的开发步骤,并一个实列来演示如何开发一个完整的驱动.但这个驱动只是简单的演示了实现步骤.真正的驱动需要与硬件直接进行相互交互.这节完整的演示驱动程序,控制开发板上的4个led灯 ...
- 第七章 LED将为我闪烁:控制发光二级管
LED驱动开发实验 如图所示,LED1-LED2 分别与GPC0_3.GPC0_4 相连,通过GPC0_3.GPC0_4 引脚的高低电平来控制三极管的导通性,从而控制LED 的亮灭. 根据三极管的特性 ...
- 第7章 LED将为我闪烁:控制发光二极管
所谓I/O内存是通过各种接口连接到主机的硬件在主机内存的映射.LED驱动还提供了两种交互方式:命令和读写设备文件. 创建设备文件的步骤: 第1步:使用cdev_init函数初始化cdev 第2步:指定 ...
- Android系统移植与驱动开发——第七章——LED驱动
LED驱动的实现原理 编写LED驱动: 测试LED驱动之前需要用USB数据线连接开发板,然后打开电源,成功启动之后,执行build.sh脚本文件编译和安装LED驱动,顺利则会自动连接 如果有多个设备文 ...
- 第七章:LED将为我闪烁:控制发光二极管
在之前章节了解到Linux驱动程序可以控制软硬件,可以实现软硬件之间的交互.在这章我们学习LED驱动的实现原理.Linux内核提供了多个与I/O内存交互的函数可以实现控制硬件. 编写LE ...
- LED将为我闪烁:控制发光二极管
一个完整的linux驱动主要由内部处理和与硬件交互两部分组成.其中内部处理主要是指linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑等:与硬件交互主要是指通过iowrite32.io ...
- 第七章Bulk设备
小川工作室编写,本书为LM3S的USB芯片编写,上传的均为草稿,还有没修改,可能还有很多地方不足,希望各位网友原谅! QQ:2609828265 TEL:15882446438 E-mail:paul ...
- (转)iOS Wow体验 - 第七章 - 操作图例与触屏人机工学
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第七章译文精选,其余章节将陆续放出.上一篇:Wow ...
随机推荐
- excel导出
查询的结果结 List list = commissionMService.getMapper().meishengExport(paramMap); // 第一步,创建一个webbook,对应一个 ...
- Android Build System
归类一些Android build system 相关的知识. http://elinux.org/Android_Build_System make <local_module> - m ...
- php 的txt操作,加入类容
<?php $fr=fopen("./data/test.txt",'a'); //fopen(位置,打开方式) if(!$fr) { echo " error&q ...
- linux内核学习之六 进程创建过程学习
一 关于linux进程概念的补充 关于进程的基本概念这里不多说,把自己的学习所得作一些补充: 1. 在linux内核中,系统最多可以有64个进程同时存在. 2.linux进程包含的关键要素:一段可执行 ...
- 研二下学期做的第一个项目(主要关于datagridview的一些笔记)
首先是行标题列rowheader dataGridView1.TopLeftHeaderCell.Value = "details"; ______________________ ...
- C++与Java的语法区别
C++与Java的语法区别 首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别. main 函数C++//自由浮动的函数int main( int argc, char* argv[]) ...
- dedecms购物车商品添加删除数量改变方式变成ajax
简单的做了一下修改,模板用的它默认的模板,感觉之前全是表单提交很不爽用的 修改的相关文件:/plus/posttocar.php, /plus/car.php,/templets/plus/car.h ...
- mysql 新建用户、授权、远程访问
新建用户 insert into mysql.user(Host,User,Password) values("localhost","u",password( ...
- 麦咖啡阻挡正常打开Excel文件
双击打开Excel文件,提示如下图: Excel文件被麦咖啡做阻挡,无法正常打开 处理方案: 过一会儿还是出现此问题,干脆就把缓冲区保护给禁用掉
- Unity中游戏的声音管理
using UnityEngine;using System.Collections;using System.Collections.Generic;/// <summary>/// 用 ...