Android深入探索第七章

编写Led灯驱动的步骤如下:

1、 创建LED驱动设备文件:

(1)使用cdev-init函数初始化cdev;

(2)指定设备号;

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

(4)使用class_creat宏创建struct class;

(5)使用device_create函数创建设备文件;

2、卸载Led驱动的设备文件

3、 设置寄存器和初始化led驱动

4、 控制led灯:

(1)通过字符串控制LED

(2)通过I/O命令控制

5、 LED驱动的模块参数

6、 测试LED驱动

(1)编写测试I/O控制命令的通用程序;

(2)使用NDK测试LED驱动;

(3)使用Java测试LED驱动;

7、Led驱动移植

控制LED:

1.编写ioctl接口函数

2.填充file_operations结构,主要是将ioctl函数注册进去

3.填充miscdevice结构,主要是次设备号、fops和设备名称。

4.编写要提供给module_init宏使用的初始化代码,设置LED端口为输出,注册到内核

5.编写要提供给module_exit宏使用的注销代码,主要是注销掉初始化中注册到内核的miscdevice设备

ARM处理器有多个寄存器,通过设置不同的寄存器的值。可以设置LED引脚的状态,打开或者禁止上拉电路以及控制LED的亮和灭。LED驱动可以使用两种方式来控制LED,同过字符串控制LED和通过I/O命令控制LED。对于测试LED驱动我们可以通过编写测试I/O控制命令的通用程序,或者使用NDK测试LED驱动,也可以使用Java测试LED驱动。

时间: 2024-11-05 04:59:45

Android深入探索第七章的相关文章

Android深度探索——第七章读书笔记及心得

控制发光二极管 ——第七章读书笔记及心得 通过本章的学习掌握了一个真正和硬件打交道的linux驱动程序.知道了一个完整的linux驱动只要由内部处理与硬件交互两部分组成.其中的内部处理指linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑.与硬件交互主要是指通过部分函数与硬件中的寄存函数进行数据交互. Linux驱动直接与硬件打交道,但是并不是linux启动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.每一个连接linux的硬件在I/O内存中都会有映射首地址. 创建LED

Android深度探索第七章总结

通过本章的学习掌握了一个非常实用的linux驱动程序.知道了一个完整的linux驱动只要由内部处理与硬件交互两部分组成.其中的内部处理指linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑.与硬件交互主要是指通过部分函数与硬件中的寄存函数进行数据交互. Linux驱动是与本机的I/O内存进行交互.每一个连接linux的硬件在I/O内存中都会有映射首地址. 创建LED驱动的设备文件的步骤: 1.使用cdev_init函数初始化cdev 2.指定设备号 3.使用cdev_add函数将字符

Android深度探索--第七章读后感

编写LED驱动 创建LED驱动的设备文件 1.使用cdev_init函数初始化cdev. 2.指定设备号:用1个int类型表示 Linux设备文件的设备号,前12位表示主设备号,后20位表示次设备号设备号有两种指定方法:直接在代码中指定(硬编码):动态分配 (alloc_chrdev_region).分别使用MAJOR和MINOR宏从设备号号中获取主设备号和次设备号. 3.使用cdev_add函数将字符设备添加到内核中的字符设备数组中 4.使用class_create宏创建struct clas

Android深度探索第七章

linux驱动直接与硬件交互,但并不是linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.每一个连接Linux的硬件在I/O内存中都会有映射首地址.任何现代的操作系统主机插入硬件时都会检测到该硬件,但硬件被检测只能说明在内核空间中建立了I/O内存,要想用户空间的程序可以访问硬件,还必须安装可与I/O内存交互的驱动程序. 读者可以根据下面的步骤创建一个设备文件: (1)使用cdev_init函数初始化cdev; (2)指定设备号,可以直接在代码中指定也可以动态分配: (3)使用

Android深度探索第七章心得

从上到下,一个软件系统可以分为:应用程序.库.操作系统(内核).驱动程序.开发人员可以专注于自己熟悉的部分,对于相邻层,只需要了解它的接口,无需关注它的实现细节.以点亮LED为例,这4层软件的协作关系如下: 1.应用程序使用库提供的open函数打开代表LED的设备文件. 2.库数据open函数传入的参数执行“swi”指令,这条指令会引起CPU异常,进入内核. 3.内核的异常处理函数根据这些参数找到相应的驱动程序,返回一个文件句柄给库,进而返回给应用程序. 4.应用程序得到文件句柄后,使用库提供的

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

Android深度探索第四章总结

Android深度探索第四章主要是源代码的下载和编译.要下载Android源代码首先需要配置Android源代码下载环境(1.创建一个用于存放下载脚本文件的目录:2.下载repo脚本文件:3.创建用于存放Android晕代码的目录:4.初始化:5.开始下载Android源代码).介绍了Android源代码目录结构(/bootable这个目录下存放 android 部分启动相关代码,包括 android 的 recovery模式,一般用于进行 OTA 升级,由 C++ 编写,可以看到用于显示的ui

Android深度探索第三章总结

Android深度探索第三章主要是Git使用入门.这一章首先让我们先安装Git,在进行编程是可以查看Git文档man git—checkout安装git—doc后会安装git文本格式和HTML格式的文本.查看文本用git help <sub—command>.使用命令"git init"初始化的版本库(暂且称为working repository)将会生成两类文件:第一类是版本库目录.git目录,它里面存放的是版本的历史记录信息和实际项目文件的拷贝;你可以把这类版本库叫做&

《Android深度探索》第一章心得体会

<Android深度探索>第一章讲的是Android系统移植与驱动开发概述.Android的系统架构分为四层:Linux内核.C/C++代码库.Android SDK API.应用程序.Android移植的主要工作:移植Linux驱动和移植HAL.学习Linux驱动要准备一个自己熟悉的Linux操作系统,用于开发和测试Linux驱动:准备一块开发板:学习GNU C:学习相关的硬件知识:不断地实践.Linux将存储器和外设分为3大类:字符设备.块设备.网络设备. 通过对第一章的学习,我了解到由于