Android 框架理解层次,和Linux,以及关系。。。。理解中

硬件设备  ,直接操纵硬件就是驱动,  驱动实现函数,一般都是应用直接调用驱动,就是实现了对硬件的控制。     也就是说,应该调用驱动函数,就可以工作了。

移植系统,就是把一个软件,放到一个新的硬件平台上,Android系统从一种手机,到另一种手机。


请参考大牛文章。http://blog.csdn.net/luoshengyang/article/details/6567257

就是在Linux系统上 装了一个虚拟机 java写的应用框架层。服务于更上层的java应用层。

下层是jni层,就是一些c,c++写的类库,可以被java直接调用的。本质上也就是Linux系统本来的应用层。

下层是hal,已经抽象层。再下层是内核层,就是设备驱动层,最底层就是。设备了。任何系统的最底层都是没有生命和没有通电的设备。


当前理解

6:java应用;利用下层java框架层提供的接口开发

5:java框架层,上层:提供java接口,下层:c库,也就是jni,java框架层调用的c库

4:c库:c编写,被java框架层调用,也就是jni。

3:hal,hardware抽象接口,应该定义了,某个设备的操作接口,驱动实现这个接口

(在Android系统中,google不公开代码实现。hal层的出现是因为gps协议,保护厂家的隐私,不公开厂家驱动的源码。将驱动从内核移动到hal层,hal层对驱动进行封装,向上提供接口,hal层是编译好的二进制驱动程序,将驱动放入hal是为了不公开驱动源码,现在 基本驱动都是在hal层)。。Google的Android系统不简单等同于一般的linux。hal层对驱动进行封装,驱动已经不在内核层了。而是在外层,hal位置。

------------------------------下层应该linux内核层

2:硬件设备驱动,实现hal接口,对下层操作硬件。(参考红字)

1:设备硬件。



hal层是硬件厂商设备层,主要是为了不共享代码,保护驱动源码,只提供二进制代码。  

将设备的驱动不放在linux内核中。


ndroid的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空间(Kernel Space),其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。为什么要这样安排呢?把硬件抽象层和内核驱动整合在一起放在内核空间不可行吗?从技术实现的角度来看,是可以的,然而从商业的角度来看,把对硬件的支持逻辑都放在内核空间,可能会损害厂家的利益。我们知道,Linux内核源代码版权遵循GNU License,而Android源代码版权遵循Apache License,前者在发布产品时,必须公布源代码,而后者无须发布源代码。如果把对硬件支持的所有代码都放在Linux驱动层,那就意味着发布时要公开驱动程序的源代码,而公开源代码就意味着把硬件的相关参数和实现都公开了,在手机市场竞争激烈的今天,这对厂家来说,损害是非常大的。因此,Android才会想到把对硬件的支持分成硬件抽象层和内核驱动层,内核驱动层只提供简单的访问硬件逻辑,例如读写硬件寄存器的通道,至于从硬件中读到了什么值或者写了什么值到硬件中的逻辑,都放在硬件抽象层中去了,这样就可以把商业秘密隐藏起来了。也正是由于这个分层的原因,Android被踢出了Linux内核主线代码树中。大家想想,Android放在内核空间的驱动程序对硬件的支持是不完整的,把Linux内核移植到别的机器上去时,由于缺乏硬件抽象层的支持,硬件就完全不能用了,这也是为什么说Android是开放系统而不是开源系统的原因。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值