Android系统移植与驱动开发——第七章——LED驱动

LED驱动的实现原理

编写LED驱动:

测试LED驱动之前需要用USB数据线连接开发板,然后打开电源,成功启动之后,执行build.sh脚本文件编译和安装LED驱动,顺利则会自动连接

如果有多个设备文件将会在后来使用,则要通过指针变量cdev.list.prev和cdev.list.next指针变量连接,从而形成双向链接。

在创建设备文件时要注意:

Device_count表示建立设备文件的个数

Alloc_chrdv_region函数的第2个参数表示分配的起始设备号。

卸载Linux驱动的设备文件,需要依次调用device_destory、class_destory和unregister_chrdev_region方法

ARM控制LED的有三个寄存器,三个寄存器在内存中都有虚拟地址,向这些地址写入数据后,处理器会使用算法将虚拟地址映射为物理地址,并根据物理地址将数据写入相应的硬件端口。

驱动的设备文件。

控制LED有两种方式:

通过字符串控制LED—>file_operation.write

通过I/O命令控制LED—>file_operation.ioctl

LED驱动的模块参数

Moule_param_array(name,type,nump,perm)宏定义为LINUX驱动指定数组形式的模块参数。Name表示参数名,type表示数组元素的数据类型,nump表示存储数组长度的变量的指针,perm表示参数文件的访问权限。

编写测试I/O控制命令的通用程序,与设备文件交互的方式:直接写入字符串数据和I/O控制命令。直接向设备文件写入数据可以使用命令行方式来完成,也可以通过write函数来完成,但I/O命令只能通过ioctl发出。

一个完整的Linux驱动主要是由内部处理和硬件交互两部分组成,其中内部处理主要是指Linux驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑、与硬件交互主要是指通过函数与硬件中的寄存器进行数据交互

时间: 2024-08-26 11:57:35

Android系统移植与驱动开发——第七章——LED驱动的相关文章

Android深度探索(卷1)HAL与驱动开发 第七章 LED将为我闪烁:控制发光二极管

第七章  LED将为我闪烁:控制发光二极管 读书心得    LED驱动的实现原理 尽管Linux驱动程序直接与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互. 编写LED驱动 测试LED驱动 LED驱动的移植 在修改Linux驱动的源代码时,应尽量不要修改Linux驱动的借口. LED驱动是本书第一个真正和硬件打交道的Linux驱动,虽然LED驱动并不复杂,只是控制了四个LED,但是LED驱动已经包括了Linux驱动所有必要的部分.一个完整的Linux

Android系统移植与平台开发(七)- 初识HAL

1.      HAL的module与stub HAL(Hardware AbstractLayer)硬件抽象层是Google开发的Android系统里上层应用对底层硬件操作屏蔽一个软件层次,说白了,就是上层的应用不用关心底层硬件具体如何工作的,只要向上层提供一个统一的接口即可,这种设计思想广泛的存在于当前的软件架构设计里. 严格来讲,Android系统里完全可以没有HAL硬件抽象层,上层应用层可以通过API调用到底层硬件,但是Android自出现开始一直打着开源的旗号,而一些硬件厂商由于商业因

Android深度探索(卷1)HAL与驱动开发 第七章 LED将为我闪烁:控制发光二极管 读书笔记

本章的实验将会实现真正意义上的Linux驱动,会实现直接与硬件的交互.需要控制4个LED灯. 7.1LED驱动的实现原理 事实上并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.I/O内存是通过各种接口连接到主机的硬件在主机内存中的映射. 7.2编写LED驱动 1.创建LED驱动的设备文件 (1).使用cdev_init函数初始化cdev (2).指定设备号 (3).使用cdev_add函数将字符设备添加到内核中的字符设备数组中. (4)使用class_create宏

深入浅出 - Android系统移植与平台开发(一)

深入浅出 - Android系统移植与平台开发(一) 分类: Android移植2012-09-05 14:16 16173人阅读 评论(12) 收藏 举报 androidgitgooglejdkubuntu 目录(?)[+] +-------------------------------------------------+ +      本系列为连载,不定期会更新       + +-------------------------------------------------+ 一.A

安卓移植和驱动开发第七章心得体会

第七章 Led为我闪烁 尽管 Linux 驱动直接与硬件打交道,但并不是 Linux 驱动直接向硬件中的内存写数据, 而是与本机的内存(νO Memory,位于内核空间〉进行交互.所谓 1/0 内存是通过各种接口(PCI.USB.蓝牙.以太网口等〉连接到主机( PC.手机〉的硬件〈网卡.声卡.摄像头等〉在主机内 存中的映射.例如,在 Ubuntu Linux 上运行的驱动只需要访问运行 Ubuntu Linux 的主机中的内存即可,然后Linux内核会利1/0内存中的数据硬件交互. 如果在不同L

Android驱动开发第七章

控制发光二极管 本章我们在Linux驱动开发中实践过所以也很熟悉.也做出过不同的实验结果.所以编写LED驱动: 1.测试开发板,打开电源开关 2.创建LED驱动设备文件 3.卸载LED驱动的设备文件 4.设置寄存器与初始化LED驱动 5.控制LED 6.设置LED驱动的模块参数 本章给出了LED驱动的完整代码可以借鉴 测试LED驱动,本章介绍了一些复杂的测试方法,不仅可以向LED设备文件发送字符串,还可以发送I/O控制命令. 1.编写测试I/O控制命令的通用程序 2.使用NDK测试LED驱动 3

深入浅出 - Android系统移植与平台开发(十一)- Android系统的定制【转】

本文转载自: 4.3定制Android平台系统 通常产品厂商在拿到Android源码后会在android源码基础上进行定制修改,以匹配适应自己的产品,从本节开始,我们从最原始的Android源码系统里一步一步定制出自己的Android系统.本节主要内容包含:根据Android源码,添加新产品编译项,定制系统启动界面和文字,定制系统启动动画和声音,定制系统桌面. 4.3.1 添加新产品编译项 Android系统的源代码是一个逻辑结构非常独立工程,在一套Android源码中可以编译出多个产品映像,在

Android深度探索(卷一)HAL与驱动开发 第七章

通过学习Android深度探索(卷一)HAL与驱动开发的第七章让我了解了如何通过驱动程序来控制发光二极管,实现驱动直接与硬件交互. 一个完整的Linux驱动主要由内部处理和硬件交互两部分组成,其中内部处理主要是指Linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑等:与硬件交互主要是指通过函数与硬件中的寄存器进行数据交互. LED驱动的实现原理:尽管Linux驱动直接与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.每一个连接Linux的硬

深入浅出 - Android系统移植与平台开发(十二)- Android JNI机制

第五章.JNI机制 4.1 JNI概述 由前面基础知识可知,Android的应用层由Java语言编写,Framework框架层则是由Java代码与C/C++语言实现,之所以由两种不同的语言组合开发框架层,是由于Java代码是与硬件环境彻底"隔离"的跨平台语言,Java代码无法直接操作硬件. 比方:Android系统支持大量传感器.Java运行在虚拟机中,无法直接得到传感器数据.而Android系统基于Linux操作系统.在Linux操作系统中C/C++通过Linux提供的系统调用接口能