Android深度探索(三)

第八章

这章将介绍蜂鸣器的实现原犁,并实现一个完整的蜂呜器驱动(可以打开和关闭蜂鸣 器).Linux驱动的代码重用,可以采用标准的C程序的方法将要重用的代码放在其他的文件中。如果要使用某些功能,include相应的头文件即可,也可以是另外一种动态重用的方式,也是一个Linux驱动可以使用另外一个Linux驱动中的资源。蜂鸣器是 S3C6410 开发板上带的一个硬件设备。可以通过向寄存器写入特定的值来控制蜂鸣器 发出尖叫声。  PWm时驱动的实现方式不同于LED 驱动,PWM 驱动将由多个文件组成。这也是大多数Linux 驱动的标准实现方式。在编译 Linux 驱动时将这些文件进行联合编译。本节将介绍把 Linux 驱动分成多个文件的方式。这些文件中的数据结构、函数的代码也可以被多个不同的驱动使用, 所 以这也是代码重用的重要方法。 PWM 驱动与 LED 驱动的实现流程类似,可能还要简单一些。在本章只是为了演示如何将一个 Linux 驱动分成多个实现文件,才使用了比较简单的 PWM 驱动。通过本章的学习,可以掌握 Linux 驱动常用的代码重用方式。

第九章

HAL是建立在Linux驱动之上的一套程序库,这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。Google为Android加入HAL主要有如下的目的:统一硬件的调用接口、解决了GPL版权问题。加入HAL的驱动使应用程序不需要再关心Linux驱动和设备文件的交互方式,而只需要像访问普通API一样就可以和Linux驱动进行交互。

实现LED驱动在设备文件的read和write函数中读写指定的寄存器。基本原理是只从指定寄存器读取或写入5个字节,第1个字节用于指定读写的动作以及寄存器类型。后4个字节是读写的实际的数据。在与LED驱动交互时,只要向设备文件读取或发送5个字节的数据,就可以读写指定的寄存器。由于LED驱动程序的设备文件接收的不是字符串,而是字节类型的数据,因此需要单独做一个程序向设备文件写入字节形式的数据,或从设备文件中读取字节类型的数据。

HAL模块可以被Android系统自动调用,自然也拥有类似main或init函数的接口,只不过这个接口不是函数,而是一个固定名称的结构体变量HAL_MODULE_INFO_SYM.也就是说,所有的HAL程序都必须要有一个HAL_MODULE_INFO_SYM变量。编写HAL模块的步骤和原理:定义结构体和宏,编写HAL模块的open函数,定义hw_module_methods_t结构体变量,定义HAL_MODULE_INFO_SYM变量,编写HAL模块的 close函数,编写控制LED的函数

在Android系统中使用Linux驱动有两种方式,一种就是通过传统的方式直接与Linux驱动交互,如直接读写设备文件的数据。另外一种是Android特有的,就是通过HAL模块。HAL模块本质上就是通过Linux共享库与Linux驱动交互,然后应用程序再访问Linux共享库。

第十章

对于复杂的Linux驱动及HAL等程序库,需要使用各种方法对其进行调试,例如,设置断点、逐步跟踪代码、输出调试信息等。Printk函数运行在内核空间,printf函数运行在用户空间。

初始化Linux驱动

Static int _init printk_demo_init(void)

卸载Linux驱动

Static void _exit printk_demo_exit(void)

使用printk函数可以很方便地将消息写入日志文件或控制台,但大量使用printk函数操作日志文件或控制台设备文件会严重影响Linux驱动的性能,因此,这就要求Linux驱动只在开发阶段使用printk函数输出消息。Printk函数在控制台显示消息是通过/dev/console设备文件实现的,该设备文件只在字符界面的控制台下才起作用,所以printk函数只有用在字符界面的控制台上才能正常输出消息。

在Linux文件系统中,/proc经常被用来作为内核空间与用户空间进行数据交互的工具。/proc是虚拟文件系统,所以读写/proc文件系统的速度要远比读写/dev文件系统的速度快。因此,/proc文件系统也可作为Linux驱动与用户空间程序交互的工具。在Linux驱动程序中可以使用内核函数在/proc目录中创建和删除虚拟文件,也可以建立和删除虚拟目录。/proc文件系统和/dev文件系统一样,也需要设置访问文件的动作处理函数,/dev文件系统通过file_operations.read和file_operations.write函数指针变量读写设备文件的读写动作处理函数。Proc_dir_entry结构体代表一个虚拟目录或文件。

Android模拟器只能通过端口映射方式使用gdbserver调试程序,但开发板除了可以通过IP连接到gdbserver外,还可以通过串口进行连接。

时间: 2024-11-25 17:28:56

Android深度探索(三)的相关文章

Android深度探索HAL与驱动开发 第三章

Android深度探索HAL与驱动开发 第三章 Git使用入门 读书笔记 Git是对源代码进行管理的软件. 一.安装Git # apt-get install git # apt-get install git-doc git-emall git-gui gitk 用以下命令控制Git: # apt-get install git-core # apt-get install git-doc git-svn git-email git-gui gitk 二.查看Git文档 查看git-check

Android深度探索第三章总结

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

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

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

Android 深度探索(卷1)HAL 与驱动开发 第三章 GIT 使用入门 心得体会

Android 深度探索(卷1)HAL 与驱动开发 第三章 GIT 使用入门 心得体会 本章主要介绍GIT的学习,以及介绍GIT用于获取诸多开源项目的源代码. 在使用GIT之前我们首先对其安装,其安装命令: #apt-get  install git #apt-get  install git-doc git-svn git-gui gitk 在Linux 下可以直接使用man命令查看指定命令的帮助文档.这对我们初学者提供了很大的帮助. Git的功能很复杂,为此这章节举例为我们演示如何创建版本库

Android深度探索HAL与驱动开发 第四章

Android深度探索HAL与驱动开发 第四章 源代码的下载和编译 读书笔记 一.下载编译和测试Android源代码 1.配置Android源代码下载环境 创建一个用于存放下载脚本文件的目录(可将该文件放到任何一个目录在这里使用-/bin) # mkdir ~/bin # PATH=~/bin:$PATH 2.下载repo脚本文件(用于下载Android源代码) # curl htttps://dl-ssl.google.com/dl/googlesource/git-repo/repo> ~/

Android深度探索HAL与驱动开发 第二章

Android深度探索HAL与驱动开发 第二章 搭建Android开发环境 读书笔记 一.Android底层开发需要的工具 1.JDK6或以上版本 2.Eclipse3.4或以上版本 3.ADT(用于开发Android的应用程序) 4.CDT(用于开发Android NDK程序) 5.Android SDK 6.Android NDK 7.交叉编译环境 8.Linux内核源代码 9.Android源代码 10.用于调试开发板的串口工具:minicom 二.安装JDK 下载JDK后在终端输入 #

Android深度探索总结

Android深度探索前四章总结 通过这几章的学习真实体会到“移植”的概念:为特定设备定制Android的过程,但是移植的过程中开发最多的就是支持各种硬件设备的Linux驱动程序,本章对Android和Linux做了总体介绍.接着介绍了Android的四层架构:Linux内核:C/C++代码库:Android SDK API;应用程序.又引入Android移植,Android移植包括两部分:应用移植,系统移植.而且为硬件平台添加新的模块,必须为此模块添加一个新的驱动程序,或者修改原来的程序. 学

android深度探索第一章

Android深度探索HAL与驱动开发的第一章学习了android系统移植与系统开发详述. 正如书上的导言所说,,android已经成为当前智能手机操作系统的老大.所以其重要性可想而知,其学习的意义非比寻常.其发展的迅速,很大程度上取决于任何人都可以利用android的源代码定制完全属于自己的嵌入式系统,而不需要向Google交钱.而由于android原生的代码支持的设备不多,因此,要想在自己的设备(包括手机.智能电视.平板等)上完美运行android,就需要另外一些开发程序,使得android

android深度探索xinde &lt; 5&gt;

通过学习Android深度探索(卷1)HAL与驱动开发的第五章搭建S3C6410开发板的测试环境,我掌握了搭建S3C6410开发板的测试环境的方法 1安装串口调试工具:minicom 以Ubuntu Linux为例,需要按照如下步骤安装.配置和调试minicom: 第一步:检测当前系统是否支持USB转串口 #lsmod | grep usbserial 如果有usbserial说明系统支持USB转串口 第二步:安装minicom #apt-get install minicom 第三步:配置mi

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