安卓期末重点.docx_第1页
安卓期末重点.docx_第2页
安卓期末重点.docx_第3页
安卓期末重点.docx_第4页
安卓期末重点.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录一、Android底层开发基础21、Android和Linux内核的区别:(有区别,也有联系!)22、Linux内核体系结构23、Kconfig和Makefile24、Android层次分析35、Linux框架36、Kconfig、MakeFile、.config三者之间的联系3二、Android操作系统3安卓移植4移植任务:4移植的内容:4为Android构建Linux操作系统4Android启动流程分析5一、启动BootLoader5二、加载系统内核5三、启动Init进程5四、启动Zygote进程6五、启动Runtime进程6六、启动本地服务6七、启动Home Laucher进程61、什么是进程间通信62、互斥与同步63、信号量:64、共享内存、消息队列65、管道:6三、嵌入式Linux编程环境64.1 Linux编辑器vi的使用74.2gcc编译器74.3 gdb调试器7四、硬件抽象层(HAL)75.1加入HAL的主要目的75.2、精简LED驱动75.3HAL的架构8注:HAL层设计详解见(重要):/lib/view/open1325474381453.html8五、Goldfish内核系统8Android驱动分为专用驱动和设备驱动8Goldfish是一种虚拟的ARM处理器,在Android的仿真环境中使用8Android专用驱动简介8Goldfish的设备驱动9六、Android音频系统驱动9l音频系统结构9l层次说明10七、输入系统驱动应用10输入系统介绍10Input驱动程序11八、Linux字符设备驱动设计:11字符设备:11字符设备驱动模型12注:字符驱动详解见:/86531/ (重要)12安卓期末考试重点(初稿)一、 Android底层开发基础1、 Android和Linux内核的区别:(有区别,也有联系!)Android是继承于Linux的Android和Linux内核的区别:Android在底层Linux上加了一层Dalvik,Android的APP运行在Dalvik上(.dex)2、 Linux内核体系结构 模块组成:系统调用接口;进程管理;内存管理;虚拟文件系统;网络系统;设备驱动系统;代码。 和android内核密切相关的Linux内核知识:安全:读权限;写权限;执行权限。内存管理:。进程管理:交互进程;批处理进程;守护进程父进程与子进程之间的关系。常用命令:ps(用于显示瞬间进程的动态);pstree(功能是以树状图显示运行程序);Top(常用的性能分析工具)设备驱动程序:字符设备;块设备网络3、 Kconfig和MakefileKconfig结构:菜单项、菜单组织结构(使用关键字menu显示声明为菜单;也可以使用依赖关系确定菜单结构)、关键字KconfigMakefile分为五个组成部分:Makefile:顶层的Makefile.4、 Android层次分析系统运行库层:系统正常运行的基础库l C库层,实际上很多都是成熟的开源项目l Android是如何有机地与这些库建立联系应用程序框架层:与APP开发人员关系最近l Java 库,为上层应用程序提供了API接口l 囊括了不少系统级服务进程的实现应用程序层5、 Linux框架二、 Android操作系统安卓移植移植任务: Linux中的相关设备驱动程序 屏幕、触摸屏、键盘;音频、摄像头、WiFi、蓝牙等多种设备驱动 Android本地框架中的硬件抽象层 Android系统对硬件抽象层有标准的接口定义 上述两个部分综合起来,相互结合,共同完成Android系统的软件移植 移植成功与否取决与驱动程序的品质和对Android硬件抽象层接口的理解程度。为Android构建Linux操作系统 怎样将驱动程序移植到新系统:n 编写新的源代码n 在Kconfig配置文件中增加新内容n 在Makefile中增加新内容 怎样在Android中添加扩展驱动程序:n 在Linux内核中移植硬件驱动程序,实现系统调用接口n 在HAL中把硬件驱动程序的调用封装成Stub。n 为上层应用的服务实现本地库,有Dalvik虚拟机调用本地库来完成上层Java代码的实现。n 编写Android应用程序,提供Android应用服务和用户操作界面。Android启动流程分析一、启动BootLoader Android 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样。当设备通电后首先执行BootLoader引导装载器,BootLoader是在操作系统内核运行之前运行的一段小程序。通过这段小程序初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境引导进入合适的状态,以便为最终调用操作系统内核准备好正确的运行环境。 二、加载系统内核 Linux内核映像通常包括两部分代码,分别为实模式代码和保护模式代码。当BootLoader装载内核映像到代码段内存时,分别放置实模式代码和保护模式代码到不同的位置,然后进入实模式代码执行,实模式代码执行完成后转入保护模式代码。 三、启动Init进程当系统内核加载完成之后,会首先启动Init守护进程,它是内核启动的第一个用户级进程,它的进程号总是1。四、启动Zygote进程五、启动Runtime进程六、启动本地服务进程线程1、 什么是进程间通信进程间通信(IPC)就是为了解决这些问题而提出的特有机制,它们为多任务系统提供了不同进程的通信机制,同时也提供了对于临界资源和共享资源的保护2、 互斥与同步3、 信号量:信号量的使用通常有四个步骤,分别是:l DECLARE_MUTEX(sem);l down(&sem); /获得信号量l .CODE. /临界区(被保护的资源)l up(&sem); /释放信号量三、 嵌入式Linux编程环境4.1 Linux编辑器vi的使用4.2 gcc编译器gcc的编译流程分为了4个步骤,分别为:l 预处理(Pre-Processing);l 编译(Compiling)l 汇编(Assembling);l 链接(Linking)四、 硬件抽象层(HAL)5.1加入HAL的主要目的u 统一硬件的调用接口。由于HAL有标准的调用接口,所以可以利用HAL屏蔽Linux驱动复杂、不统一的接口。u 解决了GPL版权问题。由于Linux内核基于GPL协议,而Android基于Apache Licence 2.0协议。u 针对一些特殊的要求。对于有些硬件,可能需要访问一些用户空间的资源,或在内核空间不方便完成的工作以及特殊需求。5.2、精简LED驱动l 测试读写寄存器操作l 调用LED驱动的HAL程序库1. 定义结构体和宏2. 编写打开设备的open函数3. 定义hw_module_methods_t结构体变量4. 定义HAL_MODULE_INFO_SYM变量5. 编写卸载设备的close函数6. 编写控制设备的函数l 编写调用HAL程序库的Service l HAL的存放路径和命名规则l 编写调用Service的Java库5.3HAL的架构注:HAL层设计详解见(重要):/lib/view/open1325474381453.html五、 Goldfish内核系统 Android驱动分为专用驱动和设备驱动专用驱动不是Linux内核中的标准内容,而是与体系结构和硬件平台无关的纯软件。 binder和logger:是两个普通的misc驱动程序 timed_output:是一种Android特有的驱动程序框架 timed_gpio:是基于timed_output的一个驱动程序 lowmemorykiller:是一个内存管理的组件 ram_console:是一个利用控制台驱动的框架 Goldfish是一种虚拟的ARM处理器,在Android的仿真环境中使用Goldfish处理器内核的Linux内核和标准Linux差别n Goldfish机器的移植n Goldfish一些虚拟设备的驱动程序n Android中特有的驱动程序和组件 Android专用驱动简介A. Logger驱动介绍:为用户层程序提供Log的支持。B. Timed Output驱动:实现Vibrator(振动)的驱动程序。基于sys文件系统来完成的,能够对设备进行定时控制功能。C. Ram Console驱动:是一个控制台驱动的框架,提供了一种可以辅助调试的内核机制。Ram Console与用户空间之间的接口是porc文件系统。D. Pmem驱动:Pmem的共享区域是一段连续的物理内存,而Ashmem的共享区域在虚拟空间是连续的,物理内存却不一定连续。E. Alarm驱动:一个硬件时钟,提供一个定时器用于把设备从睡眠状态唤醒。同时也提供了一个在设备睡眠时仍然会运行的时钟基准F. USB Gadget驱动:当使用Garget驱动时,Android作为一个USB设备而提供一个ADB接口。G. Paranoid驱动:Android系统中的网络驱动程序,相比Linux增加了网络认证机制。 Goldfish的设备驱动六、 Android音频系统驱动l 音频系统结构1. Android音频系统的核心是Audio系统:负责音频方面的数据流传输和控制功能,也负责音频设备的管理。2. Audio系统主要分成如下几个层次: Media库提供的Audio系统本地部分接口。 AudioFlinger作为Audio系统的中间层。 Audio的硬件抽象层提供底层支持。 Audio接口通过JNI和Java框架提供给上层。l 层次说明l Audio本地框架类:是libmedia.so的一个部分,这些Audio接口对上层提供接口,由下层的本地代码驱实现。l AudioFlinger:继承了libmedia里面的接口,提供实现库libaudiofilinger.so.这部分内容没有自己的对外头文件,上层调用的只是libmedia本部分的接口,但实际调用的内容是libaudioflinger.so。l JNI:在Audio系统中,使用JNI和Java对上层提供接口,JNI部分通过调用libmedia库提供的接口来实现。l Audio硬件抽象层:提供到硬件的接口,供Audio Flinger调用。Audio的硬件抽象层实际上是各个平台开发过程中需要主要关注和独立完成的部分。七、 输入系统驱动应用 输入系统介绍移植安卓输入系统时的工作:l 输入(input)驱动程序l 用户空间中动态配置的kl和kcm文件 Input驱动程序l Input驱动程序是Linux输入设备的驱动程序,分成游戏杆(joystick)、鼠标(mouse和mice)和事件设备(Eventqueue)3种驱动程序。Input驱动程序主设备号是13,每一种Input设备占用5位,因此每种设备包含的个数是32个:6495l Event设备在用户空间大多使用read、ioctl、poll等文件系统的接口进行操作。 read用于读取输入信息 ioctl用于获得和设置信息 poll调用可以进行用户空间的阻塞l 输入设备驱动程序的核心和Event部分代码分别是:drivers/input/input.c和drivers/input/evdev.c八、 Linux字符设备驱动设计:字符设备:每一个字符设备或块设备都在/dev目录下对应一个设备文件。linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备和块设备。字符设备驱动模型1、 分配cdev2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论