精华内容
下载资源
问答
  • 摘要: 本设计是实现Android底层驱动开发并裁剪定制Android操作系统。其大概流程是在linux系统上借助于gcc编译器编写调试驱动代码,在Android源码中编写APP应用程序、中间件的共享库代码、Android.mk文件、利用javah...

     

     

     

     

     

     

    毕业论文

     

    题   目  实现Android底层驱动开发并裁剪定制Android操作系统           

    学   院         电子信息与电气工程学院      

    姓   名                     牛xxx民           

    专   业         电子信息科学与技术          

    学   号               2012xxxxxxx         

    指导教师           逯xxx胜教授           

    提交日期           2016.05.10         


     

    原创性声明

     

    本人郑重声明:本人所呈交的论文是在指导教师的指导下独立进行研究所取得的成果。学位论文中凡是引用他人已经发表或未经发表的成果、数据、观点等均已明确注明出处。除文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的科研成果。

    本声明的法律责任由本人承担。

     

     

    论文作者签名:      年  月  日 

     

    论文指导教师签名:

     

     

     

     

     

    实现Android底层驱动开发并裁剪定制Android操作系统

    牛xxx民

    (电子信息与电气工程学院 电子信息科学与技术,甘肃,天水,741000)

     

    摘要: 本设计是实现Android底层驱动开发并裁剪定制Android操作系统。其大概流程是在linux系统上借助于gcc编译器编写调试驱动代码,在Android源码中编写APP应用程序、中间件的共享库代码、Android.mk文件、利用javah工具生成头文件,并实现对底层驱动的调用,在这里只实现led的点亮与熄灭,其目的是更注重理解整个Android底层驱动开发的过程,达到举一反多的效果。在官网上下载Android5.0源码,并进行代码的删减和增加,在整个Android系统中加入自己的东西,配置好Android系统编译环境,并在linux平台编译成镜像文件,完成定制Android操作系统,利用烧写工具更新到平板上,最终展现出来。

    关键词:配置环境,驱动开发,定制系统,删减增加

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Android underlying driver development and tailor custom Android operating system

    Jianmin Niu

    (Electronic information and electrical engineering college Electronic information science and technology,tianshui,gansu,741000

     

    AbstractThis design is to realize the Android underlying driver development and tailor custom Android operating system.Its process is probably on a Linux system using GCC compiler debugging driver code, write the APP in the Android source code application, middleware, Shared library code, Android. Mk files, header files generated by the javah tools,, and implement the calls to the underlying driver, here only led the lighting and extinguishing of, its purpose is to pay more attention to understand the whole Android underlying driver development process, for more than a reverse effect.In the official website to download Android5.0 source code, and code of cuts and increase, add their own things, in the whole Android configured Android compilation environment, and compile the Linux platform into image file, complete custom Android operating system, using burning tools update to the tablet, eventually.

       Keywords:configuration environment,driver development, custom system,Cut to increase

     

     

     

     

     

     

     

     

     

    目录

    目录 4

    1 引言 6

    2 文献综述 6

    2.1国内外研究现状与发展 6

    2.2研究的目的及意义 7

    3 研究方法 7

    3.1技术特点 7

    3.2实现方案 8

    4 裁剪定制Android操作系统 9

    4.1理解Android系统总框架 9

    4.1.1 Android系统总框架 10

    4.1. 2Android 运行时 10

    4.2配置搭建开发环境 11

    4.2.1首先获得Android源码 11

    4.2.2.编译环境硬件要求 12

    4.3 Android 系统源代码目录结构解析 12

    4.4 Android 系统移植流程 13

    4.4.1 Android 系统移植流程概述 13

    4.4.2 Android Kernel移植过程 14

    4.2.3 Android 编译系统配置 15

    4.5添加Android新平台 16

    4.5.1 梳理框架 16

    4.5.3具体修改过程 17

    4.6定制Android系统图标 17

    4.7 Android系统启动过程 17

    5 应用层控制底层硬件设备 19

    5.1 控制方案 19

    5.2.1 硬件电路设计 22

    5.2.2利用方案一实现 22

    5.2.3利用方案二实现 25

    5.2.4利用方案三实现 25

    6 结束语 26

    致  谢 26

    参考文献 27

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    1 引言

         当今,在电子行业,特别是在庞大的手机市场Android操作系统已经占领主导地位,Android可以说是无处不在。整个Android系统又被叫做一个生态系统,可以说涉及了所有嵌入式相关的内容,从最底层的linux系统到上层的APP应用开发,包含C、C++、java等多种编程语言,可以说是把能涉及到的相关知识都涉及到了,其综合性能不言而喻。所以,学好Android操作系统,对于电子行业的人来说至关重要。本人在这里就其Android操作系统,进行了从底层硬件到中间件,直至上层应用的开发,并对整个流程进行了详细阐述,从官方下载Android源码来进行裁剪,对源码进行删减和添加,定制成符合自己的一个精简Android操作系统,并编写了一个点亮LED灯的驱动代码以及上层应用程序代码,实现上层对底层的调用,最终来点亮LED灯。

    2 文献综述

    2.1国内外研究现状与发展

     Android操作系统最初由Andy Rubin开发,主要支持手机20059月由Google收购注资。200712月,Google85家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后GoogleApache开源许可证的授权方式,发布了Android的源代码。200811月第一部Android智能手机发布。Android逐渐扩展到平板电脑及其他领域,如数码相机游戏机等。2011年,Android在全球的市场份额首次超过塞班系统,跃居全球第一。20128月美国科技博客网站BusinessInsider评选出二十一世纪十款最重要电子产品,Android操作系统榜上有名。2013年的第四季度,Android平台手机的全球市场份额已经达到79%2013年全世界采用这款系统的设备数量已经达到近10亿台。2014第一季度Android平台已占所有移动广告流量来源的42.9%,首度超越iOS2015年在移动设备的市场份额中Android排名第一,应用的下载次数达到500亿;每天有16万台的Android设备售出,并仍以每年49.2%的速度在增长[5]

         Android具有平台开放性,开发的平台允许任何移动终端厂商加入到Android联盟中来;Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生,其前景一片光明;跟iPhone相比,它更具有广泛的开发群体;从技术角度而言,android手机比iPhone等其他手机更强调搜索功能,界面更强大,可以说是一种融入了全部web应用的平台。android的版本很多,随着版本的更新,从普通的联系人到现在的数据同步,从最初的触屏到现在的多点触摸,从简单的Google Map到现在的导航系统,这都说明android已经逐渐稳定,而且功能越来越强大。另外,android不仅支持JavaCC++等主流编程语言,还支持RubyRython等脚本语言,甚至Google专门为android应用开发推出simple语言,这使得android有着非常广泛的开发群体;从安全角度来讲,以后手机在生活中的地位会越来越重要,而一些手机病毒也会越来越多,以后智能手机也会成为黑客攻击的一部分,android平台是基于Linux的,安全性相对其他系统更可靠[9]

        Android在中国的前景十分广阔,首先是有成熟的消费者,在国内,android社区十分红火,这些社区为android在中国的普及做了很好的推广作用。国内厂商和运营商也纷纷加入了android阵营,包括中国移动,中国联通,华为通讯,联想,TCL等大企业,同时不仅仅局限于手机,国内厂家也陆续推出了采用android系统的其它产品[6]

        总之,Android在国内外都有着很好的发展势头,其发展前景一片良好。

    2.2研究的目的及意义

    由于Android基于Linux内核且具有开源性、高度模块化、广泛的硬件支持、很好的安全性和可靠性、良好的用户体验以及开放性较强的特点,加上Android Market和众多第三方应用商店做后盾,在应用方面的资源也非常丰富,由于其适应了移动互联网的发展趋势,切合了移动互联网产业链各方的发展变化需求,所以使得它迅速得到众多厂商和广大爱好者的支持,取得了迅猛的发展[6]

    综上可知,对Android操作系统的研究与开发,是作为一个从事移动互联网行业的软件工程师而言必不可少的一部分,它也将会是一个最有前景的选择。

    3研究方法

    3.1技术特点

     对于Android操作系统的定制,全世界各大移动厂商都在使用Google公司提供的Android源码,由于每一个厂商所设计的硬件千差万别,并且客户需求也有所不同,这就要求每一个厂商都要根据自己的硬件设备和相关要求去重新定制符合自己的Android操作系统,虽然Google公司提供的Android源码一般来说都可以直接使用,因为它是跨平台的,但是该源码几乎包含了各个移动设备的所有能实现的公共的东西,使得它占用内存资源特别的大,一般都在30G左右,所以不能直接使用它而是要重新定制,最终使得它符合自己需求并且极大的减少内存资源,一般经过定制之后最终生成的镜像文件只占用手机的700M左右的内存。

     在本设计中,本人可以随意的对Android源码进行裁剪,在这里使用Android5.0源码,虽然Android源码在不断的升级,但其代码目录结构和相关功能不变,所以即使升级到任何版本也是能够随意的进行定制。主要是在底层驱动环节增加和删除设备相关信息,对不需要的设备信息进行删除,对需要添加的设备信息进行代码编写,对相关配置文件进行相关修改,在上层应用界面也可以随意的添加和修改应用程序,最终定制出一套符合自己的精简Android操作系统。该设计过程所添加的应用程序与我们平时直接在操作系统上安装APK应用软件有极大的区别,平时安装的APK应用软件可以随意的进行删除和添加,但如果把它添加定制到操作系统里就不能直接删除,如果要删除也可以,则必须要获得root权限才可以。

    3.2实现方案

        一般的,一个系统软件都会进行分层设计。对于linux系统又包含大的三部分:bootloader、linux内核、根文件系统。其中bootloader又由应用层、逻辑层、驱动层组成;linux内核又由系统调用接口层、逻辑层、驱动层组成。虽然整个linux系统的代码很庞大,但我们也会仅仅因为功能需求而进行选配,对编译系统而言,所谓的选配就是哪些要编译,哪些不编译。在这里主要工作就是熟悉bootloader和linux内核的目录结构,进行Makefile的编写,修改源代码,代码大部分可用,但是有一部分因为硬件变化或逻辑功能变化,需要进行代码修改,对于那些设备驱动不全的,也需要添加驱动代码。该过程所需要的工具有交叉编译工具链、tftp服务、NFS服务等,搭建好linux平台,实现linux系统移植。

        编写一个led驱动程序,中间件共享库代码,上层APP应用程序,实现led点亮。首先要熟悉模块化驱动的编写,再熟悉平台驱动的编写,对于led驱动属于字符设备驱动,要按照字符设备的驱动程序去编写。

    裁剪定制出一个精简的Android操作系统,首先要到官网上下载Android源码,其次,要熟悉Android源码目录结构,在编译Android源码之前先进行厂商定制,添加好自己的代码,对于不需要的进行行裁剪,保留其精华即可,使得系统不过于太庞大。该过程所需要的工具有,linux系统、java SDK、相关的动态库、JNI共享库等。

    4裁剪定制Android操作系统

    4.1理解Android系统总框架

     

    图4-1 Google Android 软件架构

     

    图4-2  Android系统总框架图

    4.1.1 Android系统总框架

     Android系统总框架图包括Android--应用层、Android--应用程序框架、Android---库(系统运行库)、Android--硬件抽象层、Android-Linux内核层,共5层。应用层包含所有的用JAVA语言编写的应用程序。应用程序框架是核心应用程序所使用的API(应用程序编程接口)框架,包含隐藏在每个应用后面的一系列的服务和系统。系统运行库是一些核心库,该核心库提供了JAVA编程语言核心库的大多数功能,包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。硬件抽象层作为硬件和软件栈之间的抽象层,起着承上启下的作用。内核层是Android 的核心系统服务所必需依赖的,如安全性,内存管理,进程管理,网络协议栈和驱动模型。

    4.1. 2Android运行时

     所谓的Android 运行时,每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成同时高效地运行多个DVM实例的虚拟系统。 Dalvik虚拟机执行(.dex)的是Dalvik可执行文件,该格式文件针对内存使用做了优化。

    同时DVM虚拟机是基于寄存器(Stack-based)的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 "dx" 工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。

    对于一个应用,一个虚拟机实例,一个进程之间的关系而言。每一个android应用都运行在一个dalvik虚拟机实例中,而每一个虚拟机都是在一个独立的进程空间。虚拟机的进程机制内存分配和管理、mutex等的实现都依赖于底层操作系统。所有android应用的线程都对应于一个Linux线程,虚拟机因而可以更多地依赖于操作系统的线程调度和管理机制。不同的应用在不同的空间里运行,对不同来源的应用都使用不同的Linux用户来运行,可以最大程度地保护应用的安全和独立运行。

    Dalvik虚拟机有两个特征:

    1.专有的dex文件格式。我们都知道dalvik虚拟机使用的是dex文件格式,那么为什么它要弃用字节码文件而是使用专有的dex文件格式呢?有如下原因,<1>.每个应用中会定义很多类,编译完成后即会有很多相应的class文件,class文件中会有大量冗余信息,而dex文件格式会把所有的class文件内容整合到一个文件中,这样,除了减少整体的文件尺寸和I/O操作外,也提高了类的查找速度。<2>.增加了对新的操作码的支持。<3>.文件结构尽量简洁,使用等长的指令,借以提高解析速度。<4>.尽量扩大只读结构的大小,借以提高跨进程的数据共享

    2.dex的优化,为了调整所有字段的字节码(LITILE_ENDIAN)和对齐结构中的每一个域,验证DEX文件中的所有类,并对一些特定的类和方法里的操作码进行优化,它是基于寄存器相对于一些基于堆栈的虚拟机,基于寄存器的虚拟机在硬件、通用性上要差一些,但是在代码的执行效率上却更上一筹。

    4.2配置搭建开发环境

    4.2.1首先获得Android源码

    1.获得Android源码的路径有很多种,如:

    (1).从官网上获得(现在不行了,现在提供了一些镜像网站)

    http://source.android.com/source/downloading.html

    (2).可以从方案提供商要

    (3).从Soc开源社区获取:www.linaro.org

    2.从官网获取源码的具体命令:

    $repo init –u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 下载一个特定的源码分支,下载库文件(注意repo是一个工具)

    $ repo sync同步下载 ,真正把源码同步到本地,初始化同步版本

    4.2.2.编译环境硬件要求

    1.编译的硬件环境

    由于下载源码约10GB,编译源码约30GB,至少拥有1.5GB的物理内存 ,内存要尽可能的大,不然再编译过程中会死掉,内存不够时它会杀掉部分编译进程,这样就出问题了。

    2.编译的软件环境:

        (1).使用Ubuntu (10.04) LTS(长期支持版)以上版本,JDK5 以上的java运行环境(本设计安装的是jdk6), 对于Android5.0(2.3及以上版本)需要使用64位系统编译,使用gcc 4.4 编译器,必须确认编译器版本是否匹配。

     (2).配置软件环境具体命令

    1>.安装JDK

    $ sudo apt-get install sun-java6-jdk   //安装并设置环境变量

    2>. 安装一系列必要工具

    $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs  x11proto-core-dev  libx11-dev  lib32readline5-dev lib32z-dev  libgl1-mesa-dev  g++-multilib  mingw32 tofrodos  python-markdown  libxml2-utils  xsltproc  (例如:bison是进行语法分析的,g++-multilib是32位、64位库相互转换等等)。

    4.3 Android系统源代码目录结构解析

     

    图4-3 Android 系统源码目录结构

        在Android 系统源码目录结构中,abi定义了函数参数的执行顺序相关代码。art是第三方的工具,支持应用层的一些工具。bionic里面是一些基础的库的源代码 ,即它把标准C库重新写了一遍。bootloader/legacy是启动引导相关代码,这个我们基本上不用,嵌入式设备有自己专门的启动代码。build目录中存放的是编译系统mk文件,包含编译规则和generic通用类产品基础配置文件。cts是Android兼容性测试套件标准 。dalvik是JAVA虚拟机相关代码,不存在跨平台,只与使用的类相关。development包含程序开发所需要的模板和工具 ,如AVD,示例源码 。device是设备相关代码(最重要的目录),与定制厂商有关的,内部包括厂商目录和产品目录。frameworks是核心Android应用框架库,核心框架——java及C++语言。Hardware主要是硬件适配层HAL代码 ,硬件抽象层代码。ndk是Android本地开发包相关代码 ,一个JNI接口,具体是java如何调C的代码。Out目录是编译后生成的目录,编译完成后的代码输出到这个目录,它不会产生中间代码。Prebuilt:支持Linux and Mac OS builds x86和arm架构下预编译(预先提供的)的一些资源 ,如图片等等。packages包含Android的各种系统级应用程序 ,Android原生的应用层程序,如计算机源码。sdk 包含工具源码及qemu相关源码(与ndk区别:只能运行纯java程序)。system是Android根文件系统相关源码,如:init、adb、toolbox及一些库,库代码。Docs是介绍开源的相关文档。external是允许第三方开源的,Android使用的一些开源的模块代码,通用的东西,如waifi。libcore是与核心库相关的代码。

    4.4 Android系统移植流程

    4.4.1 Android 系统移植流程概述

    图4-4 Android 系统移植流程解析

    1. 编译生成bootloader

    2. 获得支持Android的Android Linux Kernel

    3. 基于Android Kernel移植设备驱动

    4. 下载与Android Kernel匹配的Android Source

    5. 编译Android Source生成并定制Android文件系统

    4.4.2 Android Kernel移植过程

    1.修改kernel .config(基于Android的一些驱动),即选配Android原生的一些驱动。参考目录为kernel-3.18/Documentation/android.txt(具体目录会随具体公司的项目而有所变动)。

     

    图4-5 kernel .config样例

     

    图4-6 kernel .config内容样例

    2.编译针对Android的linux内核

    进入linux源码目录“lichee”下,第一次编译需要执行:

    $ ./build.sh config

    执行上面命令后会出现一系列菜单选项,按提示选择相应的选项,选配符合自己的环境,配置完成后自动进入uboot和内核的编译,第一次完成配置编译后,若以后再执行,只需执行以下命令:

    $ ./build.sh

    每次执行这条命令后,都会按照第一次的配置来编译uboot和内核。

    4.2.3 Android编译系统配置

    1.修改几个重要的makefile。

    Android.mk:编译源码mk文件,每个module和package目录下有这么一个文件,很多地方都有这个东西,它的内容就是告诉编译器本层的哪些需要编译哪些不需要编译。

    main.mk:定义了编译全部代码的依赖关系。

    config.mk:用于配置编译系统,决定如何编译。

    envsetup.mk:定义了编译环境配置。

    product_config.mk:读取AndrodProducts.mk生成TARGET_DEVICE目标设备变量。

    AndroidProducts.mk:定义某厂商所有产品文件列表

    BoardConfig.mk:定义开发板软件相关配置项,对具体硬件的说明。

    2.编译修改后的Android 5.0源码并生成最终镜像。

    进入androidL目录,执行命令$source build/envsetup.sh导出环境变量,加载编译用到的环境变量,添加产品相应配置,然后执行命令$lunch选择相应的产品,列出所有系统编译项,让用户选择编译平台 ,之后再执行命令$extract-bsp,拷贝内核和模块到Android 中,最后执行编译Android系统de命令$make -j2,在当前目录执行编译,–j2表示2个线程同时编译(仅多核CPU),它会执行一系列.mk,会生成很多镜像文件,如boot.img、ramdisk.img、system.img、system.img、recovery.img。执行命令$pack -d 打包生成最终可烧写镜像文件,会把/system/vendor/modules/下的.ko打包成一个总的img的镜像。

    4.5添加Android新平台

    4.5.1梳理框架

    Android源码可以被编译成不同的平台系统,为了方便对源码分类管理,所有平台相关代码放到device目录下,不同的厂商在device下对应不同目录,同一厂商可能有多个产品(TARGET_PRODUCT),这些产品都通过产品配置文件来描述其产品细节(<PRODUCT_NAME>.mk),同一厂商的多个产品由产品列表文件AndroidProducts.mk说明,同一厂商的产品可能使用相同的主板设备 (TARGET_DEVICE)

    图4-7 平台设备目录架构

     

    注:在Android5.0中AndroidProducts.mk也放到了产品目录下面了,在5.0之前是放在厂商目录下的。

    4.5.3具体修改过程

       1.在 device/目录下创建公司目录。

       2.创建一个产品名目录,用来存放产品相关文件。

       3.创建设备相关目录 【这一步省略】注:通常device_name和product_name一样 。

      4.在具体的产品目录下所要修改的内容有

      (1).创建一个product_name.mk文件。

      (2).创建AndroidProducts.mk文件。

          (3).创建 BoardConfig.mk文件,用来配置硬件设备相关信息。

      (4).添加AndroidBoard.mk文件。

       5.如果需要修改系统属性,要在board目录下添加system.prop 文件。

       6.最后,将新的平台的编译选项添加到lunch菜单中,创建vendorsetup.sh 。

       7.在产品目录下新建一个具体的<产品.mk>文件,定义具体的软件相关的东西。

    4.6定制Android系统图标

    在平板开机过程中,屏幕上可能会显示4种形式内容:

    (1)在硬件Boot时出现Boot Logo画面

    (2)Linux启动时画面,可能会显示Linux Logo

    (3)Android系统本地启动阶段画面,可能显示定制画面

    (4)Android系统显示系统启动阶段,可以显示滚动字体或逐帧动画

       

       图4-8 Boot Logo画面    图4-9 Android系统本地启动阶段画面

    4.7 Android系统启动过程

    1.Android系统启动过程(几乎和linux系统启动过程一样):

        Android系统启动有4个阶段;

    1.硬件BOOT、加载Linux内核并挂载Rootfs

    2.init进程启动及Native服务启动

    3.System Server及Android服务启动

    4.Home桌面启动

        2.总体启动框架图

     

    图4-10 总体启动框架图

    3.总体启动流程图

    图4-11 总体启动流程图

    5应用层控制底层硬件设备

    5.1控制方案

    方案一:在早期的Android系统软件架构中,还没有HAL层,在这种情况下,上层APP通过JNI(java本地接口)调用在LIBRARIES层用C代码写好的.SO的共享库,之后,动态库会通过系统调用接口到内核层调用一个写的比较简单的驱动代码,进而到硬件层。

    注:.SO的共享库会通过makefile(modules.mk)被拷贝到根文件系统当中,最终被打包到Android镜像中。

                                  图5-1 实现流程图

        方案二:在后期的Android系统软件架构中,有了HAL层,在HAL层包括两部分代码,首先是谷歌写好的通用代码为上层提供一个通用接口,另外是自己写的驱动代码,这部分是为了与硬件紧密相关。上层APP应用程序通过调用HAL层谷歌的通用代码然后去调用在HAL层的自己写好的相对复杂的驱动代码,进而去调用kernel层相对简单的驱动代码。

                                      图5-2 实现流程图

        方案三:在后期的Android系统软件架构中,不仅有了HAL层,还包含了应用框架层代码,该层的代码是为了单独实现应用层具体的类以及运行一个对应的服务管理器供应用层代码调用,从而使得应用层代码实现完全的与底层独立,上层APP应用程序通过调用应用框架层服务,再让应用框架层代码去调用HAL层谷歌的通用代码然后去调用在HAL层的自己写好的相对复杂的驱动代码,进而去调用kernel层相对简单的驱动代码。

                                   图5-3 实现流程图

    5.2 如何用应用程序去控制一个灯

    5.2.1硬件电路设计

    1.LED模块框图

     

    图5-4 LED模块框图

    2.LED对应的CPU控制接口图

     

    图5-5 LED对应的CPU控制接口图

    5.2.2利用方案一实现

    利用方案一,首先在linux内核层(linux源码目录中)写一个比较简单的驱动代码,这个驱动代码被编译成.ko文件,之后在Android源码中执行extract-bsp命令就会把这个.ko文件拷贝到Androidde 源码中,再通过makefile(modules.mk)拷贝到根文件系统当中,最终被打包到Android镜像中,在.rc文件(init.sun8.rc)中来指定加载的驱动,并改变其权限;其次,在LIBRARIES层写C代码,把它最终编译成一个.so共享库,它是用来调用底层驱动程序并对上层提供一个接口,起到承上启下的作用。最后写一个APP应用程序。

    1.程序流程框图

    5-6 程序流程框图

    2.编写厂商自定义的初始化脚本文件

    如果我们想让自己添加的设备即定制的东西在Android启动时就加载进来,则必须在初始化脚本文件中对它进行声明并改变它的所有者、权限等信息。本人让硬件定制了一个LED灯,在lichee目录下添加了具体的驱动代码,编译出来后拷贝到device目录下,又经过makefile中的命令把它放到/system/vendor/mudules/中,值得注意的是这个驱动是一定能自动创建设备节点的。

    具体修改目录,androidL/device/softwinner/fspad-733/init.sun8i.rc

    3.linux底层驱动代码

    编写驱动代码是软件环节的重中之重,它是硬件的灵魂,没有它一切操作都是无用。本人在此只添加了led驱动代码,如果要添加其它的设备相关驱动,方法一样,在这里只需达到举一反三的效果即可。

    具体修改目录,lichee/linux-3.4/drivers/char/fspad723_led.c(fspad723_led.h)

    4.编写底层驱动代码对应目录的kconfig和makefile文件

        要想让编写的驱动代码在内核编译后生成.ko文件,则必须添加此代码,在该文件中本人只加了一条指令,obj-m += fspad723_led.o,表示直接指定把它编译成模块。

    具体修改目录,lichee/linux-3.4/drivers/char/makefile

    具体修改目录,lichee/linux-3.4/drivers/char/kconfig

    5.编写APP应用程序

        要想实现手机启动之后用界面图标去控制底层驱动代码进而控制硬件LED的亮灭就必须添加此代码。改APP代码可以在PC机上deeclipse软件里编写,之后生成APK文件即可。

    具体修改目录,androidL/hardware/farsight/LedDemo/led_java

    6.编写中间件的共享库代码

        要想把上层应用程序与底层驱动联系起来必须添加此代码,它起着承上启下的作用。对于Android系统来说,把中间件的实现放在库libraries当中,要么放在HAL层当中。对于中间件的代码存放位置Android中比较随意,没有具体的位置,可以放在任何目录下面,至于它会把它排在哪个层次这个是由makefile决定,在这里把中间库代码实现在具体设备目录fspad-733下面,在这个目录下自己创建了一个目录hardware.

    具体修改目录,androidL/device/softwinner/fspad-733/harware/legacy

    在legacy目录下面有一个com_farsight_ledlegacy_legacy.h文件该头文件使用javah工具生成的,由于上层是用java语言而下层使用c语言写的,对于两种不同的语言要建立通信,则必须要有一中翻译机制,即javah(jdk开发包中提供的一个工具)。要生成com_farsight_ledlegacy_legacy.h文件,在PC机运行里打开DOS窗口,进入工程源码目录E\androidL/Eclipse/ledlegacy工程目录执行命令,javah -classpath bin/class -d jni -jni com.farsight.ledlegacy.legacy,执行之后会在android/Eclipse/ledlegacy/

    Jni目录生成一个.h头文件,把它复制到androidL/device/softwinner/

    fspad-733/harware/legacy目录即可。

    7.编写底层驱动代码对应目录的Android.mk文件

    该文件用来指定代码如何编译的。

    8.总述运行流程

        应用程序运行的时候,先去创建类的对象,在创建该对象的时候就加载了“legacy”共享库,然后就可以在java主运行界面mainActivity.java中调用这个类,最终来打开设备,执行关灯和灭灯操作。

    9.用串口调试去测试驱动代码

        在平台驱动时,有一个sysfs目录,在sys/class/farsight_led/led/下面会生成一个属性为enable的文件。

    在终端下执行:

    1.获取权限:$chmod 777 /sys/class/farsight_led/led/enable

    2.若第一步不行,则执行:$su root

    3.执行“亮灯”命令:$echo “1” > /sys/class/farsight_led/led/enable  

    4.执行“灭灯”命令:$echo “0” > /sys/class/farsight_led/led/enable

    5.2.3利用方案二实现

    1.程序流程框图

                         5-7  程序流程框图

    2.具体实现代码步骤(略)

    5.2.4利用方案三实现

    1.程序流程框图

    图5-8 程序流程框图

    2.具体实现代码步骤(略)

    6 结束语

        本设计通过在Android5.0源码中添加和删除了诸多的代码,最终完成了Android操作系统的裁剪与定制,并且实现了底层驱动代码的添加,对整个Android操作系统流程与架构有了深刻的理解。通过此次毕业设计,使得我在以后的工作当中可以实现对任意升级的Android源码进行定制,最终达到与具体硬件的完美匹配。

    致  谢

         首先衷心的感谢我的指导老师逯宗胜教授,在本次设计中给予了我莫大的的帮助和关怀,在完成设计的过程当中悉心的教导了我并给予了诸多的建议,使我受益匪浅。在大学的四年里,逯老师凭借渊博的专业知识并时刻本着负责任的态度去完成每一件事,让我影响深远,我相信,他的师德和人格将会伴随我的一生,让我去更好的走向成功的道路。

    在本次毕业设计中,用到了各方面的专业知识,对自己有了新的认识,感谢学校对我四年来的辛勤培养,完善的实验平台,在大学四年里能有机会在实验室里认真的学习,感谢给予我帮助的老师们,感谢在一起相互学习的伙伴,感谢陪我度过四年的和给予我帮助的所有同学。最后衷心感谢各位评审的专家对我论文的审阅。

     牛建民

                                                      2016519日

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    参考文献

    [1] 韦东山.嵌入式Linux应用开发完全手册.人民邮电出版社,2008.08

    [2] 周庆国.Android底层开发实战.机械工业出版社,2015.10

    [3] 陈强.Android底层接口与驱动开发技术详解.中国铁道出版社,2014.05

    [4] 明日科技.Android从入门到精通.清华大学出版社,2012.09

    [5]计算机研讨_百度文库

    [6]国内安卓手机的发展现状与前景趋势分析

    [7] 康华光等.电子技术基础模拟部分(第五版).高等教育出版社.2008

    [8] 康华光等.电子技术基础数字部分(第五版).高等教育出版社.2008

    [9] 李刚.疯狂Android讲义(第3版).电子工业出版社.2015

    [10] 宋宝华.Linux设备驱动开发详解(第2版).人民邮电出版社.2010

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • android操作系统

    千次阅读 2017-08-16 17:33:46
    做为一名安卓开发人员, 我们需要了解安卓这个操作系统。 我们今天主要了解一下Android系统架构、Android应用开发特色、Android已发布的版本。

    做为一名安卓开发人员, 我们需要了解安卓这个操作系统。

       我们今天主要了解一下Android系统架构、Android应用开发特色、Android已发布的版本。

    一,Android系统架构

          通过Android系统架构我们可以更好地了解Android系统是怎么工作的。Android分为四层架构:Linux内核层、系统运行库层、应用框架层和应用层。

          1.Linux内核层

                Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动,如:显示驱动、音频            驱动、照相机驱动、蓝牙驱动、WiFi驱动、电源管理等。

           2.系统运行库层

                 这一层通过一些C/C++库来为Android系统提供了主要的特性支持。如SQLite库提供了数据库的支持,                       OpenGL/ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等等。

                     同样这一层还有安卓的运行时库,它主要提供了一些核心库,能够允许开发者使用Java语言来编写Android           应用。另外,Android运行时库中还包含了Dalvik虚拟机(5.0系统之后改为ART运行环境),它使得每一                     Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例。相较于Java虚拟机,Dalvik             是专门为移动设备定制的,他针对手机内存、CPU性能有限等情况做了优化处理。

          3.应用框架层

                这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成            的,开发者也可以通过使用这些API构建自己的应用程序。

           4.应用层

              所有安装在手机上的应用程序都是属于这一层的。

    二、Android应用开发特色

         1.四大组件

            活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)、内容提供器(Content Provider)

          2.丰富的系统控件

             使用这些控件使我们轻松地编写出漂亮的界面。

          3.SQLite数据库

               Android系统自带了轻量级、运算速度极快的嵌入式关系型数据库。

          4.强大的多媒体

              Android系统提供了丰富的多媒体服务,如音乐、视频、录音、拍照、闹铃等等

          5.地理位置定位

              现在的Android手机都内置有GPS。

    三、Android已发布的版本

             想要了解Android系统版本及其详细信息,可以访问谷歌相关网站微笑

             

     

           

             



           


    展开全文
  • android操作系统开发语言组成

    千次阅读 2014-08-13 10:56:58
    Android系统开源是人尽可知的

            Android系统开源是人尽可知的,但是Android操作以及运行的应用程序是由什么语言开发,还有基于什么开源系统开发,相互之间是什么样的关系,可能会让一部分人头晕。

    今天我们来梳理一下这个很流行的系统都是由哪些开发语言组成。

    1)Android是基于linux的开源操作系统。

            Android是基于linux的开源操作系统,但系统本身却是用java开发的。

            Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。在这里Linux做了很修改。

    2)linux是使用标准C语言开发的操作系统。        

           Linux是用c语言开发,这也是很多windows平台的程序如果使用纯c语言开发就可以跨Linux平台的原因。

    3)Android底层驱动以及操作系统内核使用C语言以及汇编开发。

          C语言以及汇编是开发硬件驱动的常见语言。

    4)Android操作系统本身是使用Java开发,并使用JNI调用本地的C语言库,实现操作系统底层调度。

           JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

    5)Android应用是使用Java开发;同时也可以使用C/C++ native开发,但是多数时候不用用到C。所以基本上就是Java为标准开发语言。


    6)Android使用了修改过的JVM(Java虚拟机)叫做dalvik虚拟机,其本质还是Java虚拟机。

           Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。

           2014年6月25日,Android L 将正式亮相于召开的谷歌I/O大会,Android L 改动幅度较大,谷歌将直接删除Dalvik,代替它的是传闻已久的ART。

    7)所以对应每一个APP都会创建个dalvik虚拟机,也就是一个linux进程。


    展开全文
  • Android操作系统本身是使用Java开发,并使用JNI调用本地的C语言库,实现操作系统底层调度。也就是说类似于Java写的前端,C写的后端。 Android应用是使用Java开发;同时也可以使用C/C++ native开发,但是多数时候不用...

    Android是基于linux的开源操作系统,而linux是使用标准C语言开发的操作系统,所以android底层驱动以及操作系统内核使用C语言以及汇编开发的。

    但是

    Android操作系统本身是使用Java开发,并使用JNI调用本地的C语言库,实现操作系统底层调度。也就是说类似于Java写的前端,C写的后端。

    Android应用是使用Java开发;同时也可以使用C/C++ native开发,但是多数时候不用到C。所以基本上就是Java为标准开发语言。

    展开全文
  • Android - Android操作系统结构

    千次阅读 2014-11-29 16:53:35
    Android操作系统结构本文地址:http://blog.csdn.net/caroline_wendy结构图:1. Linux内核(内核空间)可移植性、安全性、实用功能。2. 本地层(用户空间)(1) HAL(Hardware Abstraction Layer):硬件抽象层,使用...
  • 前言 从毕业后到做开发已经两年多了,刚开始学习...不再那么迷茫,说来也惭愧,干这么长时间了,竟然对Android操作系统一无所知,我相信打开这篇博客的人也是跟我一样好奇,233 介绍 你们知道android系...
  • C和C++不安全?Android 支持 Rust 开发操作系统

    千次阅读 多人点赞 2021-04-13 15:38:35
    本文来自 CSDN资讯 Rust这两年实火了。 近年来,Rust凭借着出色的内存效率、速度与安全性,...而作为一个完善的移动操作系统Android系统涉及到很多组件,可以广义地概括为两部分:生态系统及操作系统本身。 作为
  • Windows命令行调试unity(Android)应用环境变量配置准备步骤:先下载好我们需要的Android SDK和JDK。Android SDK推荐地址:http://tools.android-studio.org/index.php/sdk -安卓中文社区选择好对应平台的安装包或...
  • android操作系统的介绍

    千次阅读 2011-10-30 17:23:41
    Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。 2010年末数据显示,仅正式推出两年的操作系统...
  • android(Google公司开发操作系统

    千次阅读 2014-11-10 13:44:51
    Android是一种基于Linux的自由及开放源代码的操作系统,...Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手
  • Android操作系统安全

    千次阅读 2012-04-08 21:34:22
    作者:苗甦  Android在迅猛发展的同时,其安全问题一直没有引起足够的重视,但在2010年6月研究人员发布Android平台的... 根据以上的Android系统架构分析,可以发现在三个层面可能存在恶意软件。分别是处于最高
  • 在MAC中安装并搭建Android开发环境的详细步骤和教程。 Android开发平台搭建主要需要的工具有:Java虚拟机JDK、Eclipse、Eclipse插件ADT(Android Developer Tool)和Android开发包SDK,以下是具体的安装方法。 A...
  • 在开始研究Android系统之前,我们要准备好一些开发的资料,比如Ubuntu,源码,开发资料等,Android系统本身来说,非常的庞大,应用使用的是JAVA语言,底层使用C/C++,所以,如果条件允许的话,尽可能的多掌握一些吧...
  • Android 操作系统 获取Root权限 原理解析
  • Android 是Google开发的基于Linux平台的开源手机操作系统(在华注册商标名为“安致”)。它摩托罗拉的首款Android手机CLIQ包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往...
  • Android 操作系统你必须了解的知识

    千次阅读 2014-05-13 11:25:19
    Android 操作系统介绍 Android是Google于2007年11月05日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层(Software Stack,又名软件叠层)的...
  • Android 系统开发Android 系统启动流程简介

    千次阅读 多人点赞 2014-09-08 00:04:38
    Android 系统启动总结 : Android 系统启动分底层 Linux 内核启动 和 应用系统启动;-- 底层系统启动 : 系统上电, bootloader 启动, linux kernel 启
  • 最近在开发一个WAP版本的项目,涉及到了视频播放,由于本人没有Android系统的手机,所以想到,搭建一个Android开发环境,利用里面的模拟器去测试,ok,不多说了下面就是配置步骤: DownLoad the SDK And Eclipse1. ...
  • Android操作系统源代码下载方法

    千次阅读 2013-10-30 21:19:51
    Android操作系统源代码下载 使用Ubuntu Liunx系统下载Android操作系统源代码,可以参考Andorid官方网站的下载说明: http://source.android.com/source/downloading.html 源代码的站点: ...1.安装命令行方式下工作的文件...
  • Android 操作系统中的内存回收策略

    万次阅读 2015-04-15 14:30:19
    Android 操作系统中的内存回收可分为两个层次:1、默认内存回收、即Application Framework 层的默认回收。2、内核级内存回收。 Linux 内核中的内存回收 lowmemorykiller、OOM_killer。默认内存回收:(代码可查阅 ...
  • android和linux操作系统的区别

    万次阅读 2017-03-23 13:39:02
    Android是由Google为移动设备开发的开源操作...Linux操作系统于1991年由Linus Torvalds作为台式计算机的开源操作系统开发。Linux操作系统是作为MINIX操作系统开发的,不支持使用Intel 80386机器的32位功能。虽然Andro
  • 何为定制Android系统?就是在特定的硬件上,移植上Android操作系统,并修改原生Android系统以提供给定制的APP操作定制硬件的方法。所以,定制Android的主要工作有以下三部分: 适配硬件; 制作接口; 定制APP;
  • LZ-Says:热腾腾的一天那,貌似今天帝都达到了高温,热腾腾,我滴天。。。各位老铁注意防暑,多喝水~~~ 前言 昨天更新了一篇启程文,地址如下...而今天,继续我们的重走Android路。 今天为大家带来如下俩点内...
  • android系统开发-心得体会

    千次阅读 2018-04-17 11:41:03
    记得最开始搞android培训出来那会,开始都是简历造假去找的工作,那时也没接触过系统开发,当时也就像想着能找到个工作就不错了,而当时第一份工作就是做系统开发,虽说那时工作也不怎么忙,但也算是入了个行,基本...
  • 第四章、Android编译系统与定制Android平台系统 4.1Android编译系统Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同目录下,对于这个大的一个工程,...
  • Android开发必备工具

    万次阅读 多人点赞 2020-03-29 17:59:06
    工欲善其事,必先利其器,在Android项目的开发中,借助工具能使开发效率大幅提升,下面分享我经常使用的工具,欢迎各位同学补充。 1.Android Studio Android程序员的吃饭工具,可以说现在绝大部分的安卓项目都是跑...
  • Android车载嵌入式操作系统(Android Automotive)

    万次阅读 多人点赞 2019-06-03 17:31:26
    摘要: 大家最熟悉的Android系统应该是手机和平板设备上的,大部分人可能没想过Android系统和汽车有什么关系。但实际上,Android系统在四年前就在布局汽车这个平台。我最近对相关内容做了一些了解。下面将我所了解到...
  • 笔者对于Android的学习时间比较晚,我没有使用eclipse对于Android进行开发学习,接触Android开发的时候,Androidstudio3.0就已经出来了,而且这毕竟是专门进行Android项目开发的,都说是Google的亲儿子,我没用过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 276,995
精华内容 110,798
关键字:

android操作系统开发