首先创建led驱动的设备文件,可以使用cdev_init,register_chrdev_region,cdev_add等建立主设备号的设备文件。步骤如下:

1使用cdev_init初始化cdev

2指定设备号

3使用cdev_add函数将字符设备添加到内核中的字符设备组中

4使用class_creat宏创建struct class

5使用device_creat函数创建设备文件

然后卸载led驱动的设备文件

{Device_destroy(leds_class,dev_number);

If(leds_class)

Class_destroy(leds_class);

Unregister_chrdev_region(dev_number,DEVICE_NUMBER);

Return;}

Static void leds_exit(void)

{

Leds_destroy_device();

Printk(DEVICE_NAME”\text!\n”);

}

Module_exit(leds_exit);

然后设置寄存器与初始化led驱动,arm处理器有多个寄存器,通过设置不同寄存器的值,设置led引脚状态、打开或禁止上拉电路以及控制led的亮和灭。一下几点需要知道

Led有两个引脚,GPB0和GPB1

控制led需要通过三个寄存器完成

每一个寄存器可以使用4个字节

使用GPMCON寄存器的低16位将led的两个端口属性设为output。

使用GPMDAT寄存器的低4位控制4个led的亮灭。

使用GPMPUD寄存器的低八位分别打开四个led的上拉电路

然后就是比较重要的控制led,要想完成这一过程,led驱动就必须接受相应的数据。如果通过字符串控制,需要使用file_operations.write。如果通过I/O命令控制led,需要使用file_operations.ioctl函数。编写时需要了解几点:

4个led的状态用一个长度为4的char数组存储

如果写入的字符串长度小于4,直接写入,如果大于4,只写前4个

如果写入的字符串小于4,相当于后面的都是0

向GPNMDAT寄存器写入数据之前最好先读取GPMDAT当前值

最后进行测试led驱动,方法有一下几种:

编写控制命令的通用程序:led驱动有两种与设备文件交互的方式:直接写入字符串数据和I/O控制命令。

使用NDK测试led驱动

使用java测试led驱动

http://www.cnblogs.com/caoyutao/

Android深度探索--HAL与驱动开发----第七章读书笔记的更多相关文章

  1. Android深度探索--HAL与驱动开发----第五章读书笔记

    第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...

  2. Android深度探索--HAL与驱动开发----第四章读书笔记

    1. 下载.编译.测试源代码 创建存放下载文件的目录(repo) 下载repo脚本文件 创建用于存放源代码的目录 开始下载源代码. 2. 源代码目录含义摘要 Abi 应用程序二进制接口 Device ...

  3. Android深度探索--HAL与驱动开发----第六章读书笔记

    Linux驱动程序与其他类型的Linux程序一样拥有自己的规则,下面给出一个编写基本的Linux驱动的一般步骤: (1)建立Linux驱动的骨架(装载和卸载Linux驱动): (2)注册和注销设备文件 ...

  4. Android深度探索--HAL与驱动开发----第三章读书笔记

    1. 什么是Git? Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开 ...

  5. Android深度探索HAL与驱动开发 第四章 源代码下载和编译

    前面说过Android移植主要就是Linux内核的移植,而Linux内核移植主要是Linux驱动的移植,所以为了开发和测试Linux驱动,有必要学习在Ubuntu Linux下如何搭建两套开发环境:A ...

  6. Android深度探索HAL与驱动开发 第三章 Git入门

    Git功能十分复杂,简单来说它使你的开发更为快捷和可控,尤其是在开源项目上展现的友好的交互和回馈. 熟悉一些git指令操作对开发者的帮助可以避免开发者受到一些外在因素打断开发进度,甚至延误项目的che ...

  7. 《Android深度探索HAL与驱动开发》第一章阅读心得

    首先了解到Android系统架构是由四层构成:其中第一层是Linux内核,他的作用是负责Linux的驱动程序以及内存.进程.电源等管理操作:第二层是C/C++代码库,也就是Linux下.so的文件:第 ...

  8. 《Android深度探索HAL与驱动开发》第二章阅读心得

    按照书中所讲的步骤,第一步先准备好搭建Android开发环境所需要的工具:JDK6或以上版本:Eclipse3.4或以上版本:ADT:CDT:Android SDK:Android NDK;交叉编译环 ...

  9. Android深度探索HAL与驱动开发 第二章 搭建Android开发环境

    通常以应用移植和系统移植的为Andorid系统移植的主要部分.同时为了适应不同平台硬件设备,对源代码进行相应的修改.除了要移植相适应的CPU架构,最重要是移植Linux驱动. 但是由于一些特别的原因, ...

随机推荐

  1. AJAX第二发

    开始总结自己在项目上的使用AJAX的情况: 该图为向后台请求的数据,前台返回的结果,返回的数据类型为object,businessObj由许多key组成,我们项目前台需要调用的数据就藏在数组recor ...

  2. ActiveReports中如何使用Excel数据源

    ActiveReports支持的数据源类型非常多,无论是常用的Oracle数据库.SQL Server.mySQL,还是开源的PostgreSQL,只要是具有ODBC驱动的数据库都可以正常使用,本文讲 ...

  3. CSS3--overflow属性

    overflow:当内容溢出元素框时发生的事情: overflow:默认,内容不会裁剪,会呈现在元素框之外: overflow:hidden:内容会被裁剪,并且其余部分是不可见的(清除浮动) over ...

  4. 20169212《Linux内核原理及分析》第十二周作业

    格式化字符串漏洞实验 格式化字符串漏洞是由像 printf(user_input) 这样的代码引起的,其中 user_input 是用户输入的数据,具有 Set-UID root 权限的这类程序在运行 ...

  5. kaggle数据挖掘竞赛初步--Titanic<数据变换>

    完整代码: https://github.com/cindycindyhi/kaggle-Titanic 特征工程系列: Titanic系列之原始数据分析和数据处理 Titanic系列之数据变换 Ti ...

  6. css中左侧固定,右侧自适应

    谈谈我开始出来工作时候的一道面试题吧 当初我记得在太平洋网络面试的时候,面试官给我出了这么一道题: 有一个外层的div 中间有左右两个div 要求左侧的div 1.只告诉你宽度;       2.只告 ...

  7. WCF学习总结

    1. WCF简介 WCF (Windows Communication Foundation)是由微软发展的一组数据通信的应用程序开发借口.WCF由服务地址(Address) .协议绑定 (Bindi ...

  8. mysql5.6新特性总结

    一. server参数默认值设置的变化http://dev.mysql.com/doc/refman/5.6/en/server-default-changes.html 二. innodb增强1.全 ...

  9. struts下ajax提交与页面进行提示 返回值为null

    @Override    public String execute() throws Exception {        if ("none".equals(task)) {  ...

  10. 高手总结的“恋爱法”学习Linux系统,效果更好。

    如果你恋爱了,那你一定非常喜欢她.了解她,知道她喜欢吃什么玩什么,知道她需要什么,在她生气的时候可以哄她开心,一切尽在你的手指中.那你想学好Linux吗?喜欢Linux吗?你懂她吗?你有喜欢Linux ...