zoukankan      html  css  js  c++  java
  • Android系统移植于驱动开发概述

      众所周知,Android是移动设备操作系统的龙头老大,有着极高的市场占有率,但是由于Android原生的代码支持的设备不多,因此要想在自己的设备上完美运行Android就必须开发一些驱动来使得Android来识别相应的硬件。那么,这个为特定设备定制Android的过程就被称为“移植”。

      Android的系统架构可以分为:Linux内核;C/C++代码库;Android SDK API;应用程序四部分。而Android是基于Linux的,所以Android和其他Linux系统的核心部分差异非常小。那么Android系统移植的主要工作是什么呢?Android移植可以分为应用移植和系统移植。应用移植其实和从字面上理解的一样,就是将应用程序移植到特定的硬件平台上。而Android系统移植则是将Android操作系统移植到某个特定硬件平台来运行。不过在Android系统中还增加了一个硬件抽象层——HAL。Android SDK通过HAL直接访问Linux驱动,并不像其他Linux系统一样由应用程序直接访问驱动,而是隔了HAL。之所以这样设计,有很多原因,之一是由于Linux内核基于GPL开源协议,而很多厂商不想开放源代码,所以增加了HAL层后,可以将Linux驱动的业务逻辑放在了HAL层,这样处理Linux驱动开源技术,也只是一个空架子而已。

      所以如果为Android增加了新的驱动或者修改原来的驱动代码,HAL中的代码就要做相应的调整。因此,Android移植的主要工作是:1)移植Linux驱动,2)移植HAL。而移植的复杂度则是多变的,这取决于各方面的原因,如要移植的Android系统提供了驱动源代码,或者无法获得驱动的源代码,这就有了很大的区别。

      在移植过程中需要认识到的是,Linux驱动只与Linux内核有关,也就是说与用户使用的系统无关,只要Linux系统的内核相同,那么驱动就是通用的。那么怎么进行Linux内核的判断呢?Linux系统的内核由主版本号、次版本号、修订版本号、微调版本号、为特定的Linux系统特别调校的描述这五部分组成,只要这五部分都相同,那么就可以说这两个Linux系统的内核是一样的,驱动也是通用的。学习Android驱动开发其实就是学习Linux驱动开发,不同的是Android增加了一个HAL,这属于Android特有的。不过HAL也不是必需的,通过NDK一样可以直接访问Linux驱动。

  • 相关阅读:
    eclipse下c/cpp " undefined reference to " or "launch failed binary not found"问题
    blockdev 设置文件预读大小
    宝宝语录
    CentOS修改主机名(hostname)
    subprocess报No such file or directory
    用ldap方式访问AD域的的错误解释
    英特尔的VTd技术是什么?
    This virtual machine requires the VMware keyboard support driver which is not installed
    Linux内核的文件预读详细详解
    UNP总结 Chapter 26~29 线程、IP选项、原始套接字、数据链路访问
  • 原文地址:https://www.cnblogs.com/ww3344/p/5427569.html
Copyright © 2011-2022 走看看