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驱动。

  • 相关阅读:
    51nod1179【思维】
    网络时间校准
    获取网络时间,减轻自己服务器的请求压力
    C# async/await异步编程深入理解
    C#中的异步编程--探索await与async关键字的奥妙之处,原来理解和使用异步编程可以这么简单
    "",string.Empty和null三者的区别
    三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富
    C# await async Task
    C#异步编程 Task await的理解
    idea中更改下载源
  • 原文地址:https://www.cnblogs.com/ww3344/p/5427569.html
Copyright © 2011-2022 走看看