myigame 发表于 2017-5-23 12:56

爱黑武,爱上搞机生活!

monktear 发表于 2017-5-23 17:34

现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来,使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的内核。

Android系统并不是从零开始设计的,而是搭建在Linux内核之上。狭义的Android系统,主要指的是Linux内核以上的各层。
Linux对于Android最大的价值,便是其强大的可移植性。Linux可以运行在各式各样的芯片架构和硬件环境下,而依托于它的Android系统,也便有了强大的可移植性。
Linux内核本身使用GPL协议,讲其对软件的主要影响,就是基于该软件开发的任何软件,都必须以GPL协议发布。简单的讲就是你使用了这个开源软件,那么你在此基础上开发的东西也得是开源的。(现实社会中,这一协议对中国的开发商约束效力不大,很多厂商根本不开源或是推迟到产品生命周期终结后才开源。)

什么是HAL?
HAL的全称是Hardware Abstraction Layer,即硬件抽象层。
Linux系统本身之所以在设备驱动方面支持很烂事实上也是因为GPL协议的因素,而Android的HAL为了保护一些硬件提供商的知识产权并避开Linux GPL的约束。便把控制硬件的动作都放到了Android HAL中,而Linux驱动仅仅完成一些简单的数据交互动作。

总体来说,Android HAL存在的原因主要有:
1.并不是所有硬件设备都会有Linux kernel的标准接口。
2.由于GPL协议的关系,某些设备制造商并不愿意公开硬件驱动,所以Google用HAL的方式去绕过GPL。
3.针对某些硬件,Android有一些特殊的需求。

这一现状在Android上的表现:
以一个Google的Nexus 系列设备为例,当你需要编译它的Android Open Source Project(以下简称AOSP)ROM时。
首先,你需要下载AOSP源码:https://android.googlesource.com (这部分是开源的)
其次,你需要下载供应商的驱动、HAL库:https://developers.google.com/android/nexus/drivers (这部分是是闭源的)

适配的过程中如何利用它们?
硬件厂商的HAL核心代码基本都是以共享库形式出现的,也就是闭源、只开放编译好的二进制文件。
在制作ROM的时候,这一部分通常被我们照单全收,拿来使用。
而当Android版本更新时,因为厂商提供的旧了,我们可能在其它地方加以修改使其能够继续沿用

单词十月 发表于 2017-5-26 00:33

感谢分享!

cykchen 发表于 2017-5-30 20:38

不错不错!谢谢分享!!

qq591409016 发表于 2017-5-30 23:15

厉害了!我的哥。

yuhui8700 发表于 2017-5-31 11:42

666666666666666

borong2 发表于 2017-6-5 19:08

来必须要定义法

mosesmlb 发表于 2017-6-5 22:57

正需要这方面的东西,谢谢楼主。

yaming2180. 发表于 2017-6-8 15:49

66666666666666

蕾幽 发表于 2017-6-9 00:31

看看能不能用
页: 18 19 20 21 22 23 24 25 26 27 [28] 29 30 31 32 33 34 35 36 37
查看完整版本: 一个专门做GMS(Google服务包)下载的网站