本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容。

所谓“移植”是指为特定的自己的设备,如手机定制Android的过程。自己开发一些程序(移植)装载在设备上,使得Android系统可以识别设备中的蓝牙,WiFi等,这样就可以使用这些功能了。这些程序大多是支持各种硬件设备的Linux驱动程序。

这一章中介绍了许多在进行Android系统移植和驱动开发前要了解的概念以及要做的准备。接下来主要说的是在Android系统移植过程中的主要工作

Android移植分为两部分:应用移植和系统移植。

应用移植指将第四层的应用程序移植到某一特定硬件平台上。为了使应用程序可以在新的硬件平台上正常运行,需对源代码进行一些修改。没有源代码只能重新实现,应用移植并不涉及驱动和HAL(hardware abstraction layer-android的硬件抽象层)程序库的移植。

Android系统移植是指让Android操作系统在特定硬件平台上运行,首要条件是该操作系统支持硬件平台的CPU架构。Linux内核支持很多常用的CPU架构,如ARM、PowerPC。要使Android在不同硬件平台上正常运行,不仅要支持CPU架构,还要让Android可以识别平台上的各种硬件,蓝牙、声卡等。这些都由Linux内核完成,重要的就是Linux驱动。系统移植要移植CPU架构,还要移植Linux驱动程序。修改驱动程序使得Linux内核与新设备模块可正常交互,工作起来。

HAL位于系统架构第二层,也是Linux程序库,Android SDK(第三层)通过HAL直接访问Linux驱动。其他Linux系统是由应用程序直接访问驱动,而Android是要有HAL作为中介,这样设计的原因是Linux内核是基于GPL开源协议的,但很多驱动厂商不想开放源代码让其他人所知道,就增加了HAL层,将Linux驱动的业务逻辑放在HAL层,处理Linux驱动开源技术就是个空架子。为Android增加或修改了原来的驱动代码,相应的HAL代码也要做修改。

Android移植有两部分:①移植Linux驱动②移植HAL 基本就是Linux内核的移植,主要移植驱动程序

如果要移植的Android系统提供了驱动源代码,直接根据移植的目标平台修改驱动代码即可。但更多的是无法获得驱动源代码或要实现的驱动程序所对应的硬件是自己特有的,就需要从头自己编写驱动程序以及相关配置文件。Android的移植是要尽可能找到驱动和HAL的源代码,直接修改这样比从头开始编写要容易得多。不过驱动和HAL的代码量不是很大。不同Linux版本的驱动程序不能通用,需重新修改源代码,并在新的Linux内核下重新编译才可以在新的Linux内核版本下运行新的驱动程序。Android开放源代码,即使同一个Android版本,Linux的内核也可能不同,因为有自制的ROM会更换不同的Linux内核,就和官方的Android对应的Linux内核不同。移植Linux驱动时主要考虑Linux内核版本,即使Android版本不同,只要Linux内核版本相同,Linux驱动就可以互相替换,有时还需考虑HAL是否和Linux驱动兼容。

第一章 Android系统移植与驱动开发概述的更多相关文章

  1. 第一章Android系统移植与驱动开发概述--读书笔记

    以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构. ...

  2. 第一章 Andorid系统移植与驱动开发概述 - 读书笔记

    Android驱动月考1 第一章 Andorid系统移植与驱动开发概述 - 读书笔记 1.Android系统的架构: (1)Linux内核,Android是基于Linux内核的操作系统,并且开源,所以 ...

  3. Android深度探索HAL和驱动开发(卷1) 第一章 Android系统移植和驱动开发

    由于Android是基于Linux内核的,因此,Android和其他Linux系统的核心部分差异非常小.然而不同版本的Android使用的Linux内核的版本有细微的差异,所以不同Android驱动可 ...

  4. 第一章:Android系统移植与驱动开发概述

    Android是基于Linux内核的,与Linux内核没有太大的区别,只是增加了一些自己独有的驱动,随着Android发布版本的不断升级,他所使用的Linux内核也在不断升级,以适应新的安卓版本,为他 ...

  5. Android系统移植与驱动开发----第一章

    第一章 Android系统移植与驱动开发 Android源代码定制完全属于自己的嵌入式系统,但是支持的设备不多,所以要移植,而在移植的过程中使用的不得不提的是驱动开发. Android系统构架主要包括 ...

  6. Android 系统移植与驱动开发--第二章搭建Android环境核心步骤及心得

    第二章 搭建Android 开发环境 虽然在这一章中讲的是Android底层开发环境,但是相应伴随的还有Android NDK程序来测试Linux驱动,HAL程序库.底层开发不仅需要交叉编译环境,还要 ...

  7. Android系统移植与驱动开发

    21世纪,Android发展非常迅速,在市场上占有很大的比例,遥遥领先与iOS,很大程度上是因为任何人都可以利用Android的源代码定制完全属于自己的嵌入式开发系统,而不需要向Google交一分钱. ...

  8. 1Android系统移植与驱动开发概述

    1.Android系统架构分为四层,从下至上依次为Linux内核层,C/C++代码库.Android SDK API.应用程序,要熟悉每一层的内容以及功能: 2.Android移植分为应用移植和系统移 ...

  9. Android系统移植与驱动开发--第四章

    第四章 源代码的下载和编译 一个android内核相当于4G,而一个Linux内个只有几百M,Linux内核相对于android内核来说实在是小巫见大巫.了解android源代码不一定要详细了解,只去 ...

随机推荐

  1. ORACLE RAISE

    ORACLE 出错信息的输出 偷懒的办法直接在Exception 后使用raise但是错误信息不是很完整使用RAISE_APPLICATION_ERROR(-20999, DBMS_UTILITY.f ...

  2. merge into在oracle10g和oracle 11g中的使用差别一

    oracle10g上的代码 MERGE INTO TCGGYSGHCP CP    USING (SELECT *             FROM (SELECT QD.LIFNR,         ...

  3. python+selenium安装步骤

    1.先安装python 2.下载setuptools 使用方法是在 命令提示符(cmd)下 输入 "easy_install包名称" 3.安装pip 4.安装selenium如果是 ...

  4. Best Time to Buy and Sell Stock III [LeetCode]

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  5. Windows 10系统更换Windows 7系统磁盘分区注意事项一

    新买的电脑预装系统是WIN10,考虑到兼容性问题,打算更换为WIN7,但在新机上不能直接装WIN7系统,需要在BIOS启动中做一点小改动. 原因分析:由于Windows 8采用的是UEFI引导和GPT ...

  6. 坑备忘error: expected class-name before '{' token

    今日重构之前的代码,修改了命名空间,然后一处派生的子类定义处总是总是报error: expected class-name before '{' token,网上查了查原因,出现这种情况大致有两种情况 ...

  7. NoSQl简介(转)

    NoSQL,全称是“Not Only Sql”,指的是非关系型的数据库.这类数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的.原始的目的是为了大规模web应用,这场全新的数据库革命运动 ...

  8. 如何通过命令行创建和设置一个MySQL用户

    我想要在MySQL服务器上创建一个新的用户帐号,并且赋予他适当的权限和资源限制.如何通过命令行的方式来创建并且设置一个MySQL用户呢? 要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可 ...

  9. 临界区 TRTLCriticalSection 和 TCriticalSection

    临界区对象TCriticalSection(Delphi) 与 TRtlCriticalSection 的区别 TRtlCriticalSection 是一个结构体,在windows单元中定义: 是I ...

  10. 线程隔离ThreadLocal

    ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地 ...