读《Android深度探索(卷1)HAL与驱动开发》的一些思考07

七、LED将为我闪烁:控制发光二级管

1.创建LED驱动的设备文件

第1步:使用cdev_init函数初始化cdev

cdev的大多数成员变量并不需要我们自己去初始化,只要调用cdev init 函数就可以初始化大部分cdev的成员变量。

第2 步:指定设备号

Linux设备文件的设备号分为主设备号和次设备号。用1个int类型(dev_t)表示。其中前12位表示主设备号,后20位表示次设备号。设备号有如下两种指定方法。

直接在代码中指定(硬编码)。

动态分配。

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

cdev_add函数用于将字符设备添加到probes.数组(保存己建立的字符设备)中。 cdev_add 函数在<Linux 内核源代码>Ifs/char dev.c 文件中实现。

第4 步:使用class_create宏创建struct class

struct class 包含了一些与设备文件有关的变量以及一些回调函数指针变量。使用class_create宏创建struct class的代码如下:

struct c1ass *leds_class=NULL;

leds_class = class_create(THIS_MODULE,”dev_name”);

第5步:使用device_create函数创建设备文件

device_creat函数用于创建设备文件,该函数在<linux内核源代码>/incIude/1innx/device.b,文件中定义,在<Linux内核源代码>/drivers/base/core.c文件中实现。

2.卸载LED 驱动的设备文件

卸载Linux驱动的设备文件稍微简单-些,需要依次调用device_destroy、class_destroy 和unreg ister_chrdev_region方法。这3 个方法的原型如下:

void device_destroy(struct class *class, dev_t devt)

void class_destroy(struct class *els)

void unregister_chrdev_region (dev_t from,unsigned count)

3.设置寄存器与初始化LED驱动

在控制LED亮、灭之前必须要了解如何设置寄存器。ARM处理器有多个寄存器,通过设置不同寄存器的值。可以设置LED引脚的状态、打开或禁止上拉(pull-up)电路以及控制LED的亮和灭。

4.控制LED

LED驱动可以使用如下两种方式控制LED:

通过字符串控制LED,

通过l/0命令控制LED;

要想使用上述两种方式控制LED。LED驱动必须要接收相应的数据。如果通过字符串控制LED。需要使用file_operations.write函数。如果通过I/0 命令控制LED,需要使用file_operations.ioctl函数。其中file_operations.write函数在上一擎的word_count驱动中已经使用过,file_oprations.write函数可以接收向设备文件写入的数据。而自file-operations.ioctl函数我们是头一次接触,今该函数可以接收向字符设备发送的命令和参数。

使用下面的命令可以通过字符串控制LED 的亮、灭。

#adb shell ‘echo 1101 > /dev/s3c6410_leds‘ //从电池一侧数第3个LED灭,其他LED都亮

#adb shell ‘echo 1 > /dev/s3c6410 leds‘    //离电池最近的LED亮,其他LED都灭

时间: 2024-11-05 17:25:48

读《Android深度探索(卷1)HAL与驱动开发》的一些思考07的相关文章

Android深度探索(卷1)HAL与驱动开发学习笔记(2)

Android深度探索(卷1)HAL与驱动开发学习笔记(2) 第二章搭建Android开发环境 书中介绍了两种JDK的安装方法, 方法一: 从官网下载JDK并进行配置,解压后在终端打开profile文件来设置PATH环境变量(# soure /etc/profile),打开profile文件后输入下面的内容 export PATH=.:developer/jdk6/bin:$PATH 保存profile文件以后,有两种方法可以重新加载profile文件. 1.# sourse  /etc/pro

Android深度探索(卷1)HAL与驱动开发 心得体会 第十章 嵌入式Linux的调用技术

Android深度探索(卷1)HAL与驱动开发 心得体会 第十章  嵌入式Linux的调用技术 对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行调试.例如,设置断点,逐步跟踪代码.输出调试信息等.虽然嵌入式Linux在调试方面并没有Visual Studio.Delphi.Eclipse这些可视化工具方便,但是学习一些这方面的技术无疑更有助于开发强大而稳定的Linux内核模块. 对于嵌入式Linux内核模块,可执行程序.代码库的调试可能更要复杂些.因为在大多数时候需要至少两台

Android深度探索(卷1)HAL与驱动开发 第一章 Android系统移植与驱动开发概述 读书笔记

Android深度探索(卷1)HAL与驱动开发 第一章 Android系统移植与驱动开发概述 读书笔记 本章是 Android系统移植与驱动开发概述性的具体讲解.首先,Android被分为了四层架构.在最底层的是Linux内核 .然后分别是C/C++代码库.Android SDK A和应用程序.而Android的移植又分为系统移植和应用移植.系统移植要实现Android操作系统在其他硬件平台上运行起来,其中的关键是Linux的内核.内核必须要完成对平台上运行的各个硬件的识别.所以这就需要Linu

Android深度探索(卷1)HAL与驱动开发 第二章 搭建Android开发环境 读书笔记

Android深度探索(卷1)HAL与驱动开发 第二章 搭建Android开发环境 读书笔记   本章主要讲解在Ubuntu Linux 下搭建Android开发环境. 1.JDK:从官网下载压缩包,并将其解压缩. Gedit etc/profile 并设置PATH环境变量,记得PATH. 2.搭建Android应用程序开发环境. 安装Android SDK 安装Eclipse 安装ADT 配置ADT 建立AVD 这个步骤是安装Android SDK,步骤与操作与在Windows操作系统下的安装

Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记

Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记     本章学习了使用git下载两套源代码并搭建两个开发环境.分别为Android源代码和Linux内核源代码.Android源代码中包含了HAL(即硬件抽象层) 的代码,并学习了如何搭建这两种开发环境. Android 的移植的本质就是Linux内核的移植,Linux内核的移植主要是Linux驱动的移植.而开发和测试Linux驱动就需要安装以上两个开发环境. 搭建两套环境的具体步骤如下: 一.下载编译和测试A

Android深度探索(卷1)HAL与驱动开发 第三章 Git使用入门 读书笔记

Android深度探索(卷1)HAL与驱动开发 第三章 Git使用入门 读书笔记     本章是对Git的一个概述. Linux是一个开源的系统.事实上,在Linux上许多软件都和底层程序以及内核驱动有关,然而Linux内核的版本非常多,如果每个版本上的软件都采用安装包的形式,则匹配这么多版本的安装包将十分庞大.所以有很多软件不是以二进制安装包的形式来安装和使用的.而是将源代码下载下来,并在每个用户自己的Linux中编译并安装,即使用make 和make install 命令.而Linus作为L

Android深度探索(卷1)HAL与驱动开发 第六章 第一个Linux驱动程序:统计单词个数

Android深度探索(卷1)HAL与驱动开发 第六章 第一个Linux驱动程序:统计单词个数 统计单词个数的功能是封装在Linux驱动中的. Linux驱动的工作和访问方式是Linux亮点之一,同时受到了业界大防范好评.Linux系统将每一个驱动都映射成一个文件.这些文件称为设备文件或者驱动文件,都保存在 /dev 目录中.这种设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易.当然,也比访问Linux API 更容易.由于大多数Linux驱动都有与其对应的设备文件,因此与Li

Android深度探索(卷1)HAL与驱动开发学习笔记(7)

Android深度探索(卷1)HAL与驱动开发学习笔记(7) 第七章 控制发光二极管   LED驱动实现原理       2. 编写LED驱动 * 创建LED驱动的设备文件 ·使用cdev_init 函数初始化cdev ·指定设备号 ·使用cdev_add函数将字符设备添加到内核中字符设备组中 ·使用class_creat宏创建stuct class ·使用device_creat 创建设备文件 卸载LED驱动的设备文件 依次调用device_destory.class_destory.unre

Android深度探索(卷1)HAL与驱动开发学习笔记(4)

Android深度探索(卷1)HAL与驱动开发学习笔记(4) 第四章  源代码的下载与编译 一.源代码配置Android源代码下载环境 1.建一个用于存放下载脚本文件(repo)的目录 # mkdir ~/bin # PATH=~.bin:$PATH 2.下载repo脚本文件 # curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo #chmod a+x ~/bin/repo 3.创建用于存放Andro

Android深度探索(卷1)HAL与驱动开发学习笔记(6)

Android深度探索(卷1)HAL与驱动开发学习笔记(6) 第六章 第一个Linux驱动程序 统计单词个数   Linux系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中.这种设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易.虽然C语言里没有事件的概念,但却有与事件类似的概念,这就是回调(c a l l b a c k)函数.因此,编写Lin u x驱动最重要的一步就是编写阴调函数,否则与设备文件交互的数据将无法得到处理. 6.1编写L