Android硬件具象层(HAL)概要介绍和学习计划
Android的硬件具象层,简单来说,就是对Linux内核驱动程序的封装,向下提供插口,屏蔽低层的实现细节。也就是说,把对硬件的支持分成了两层,一层置于用户空间(UserSpace),一层置于内核空间(KernelSpace),其中,硬件具象层运行在用户空间,而Linux内核驱动程序运行在内核空间。为何要这样安排呢?把硬件具象层和内核驱动整合在一起置于内核空间不可行吗?从技术实现的角度来看,是可以的,但是从商业的角度来看,把对硬件的支持逻辑都置于内核空间,可能会损害厂家的利益。我们晓得,Linux内核源代码版权遵守GNULicense,而Android源代码版权遵守ApacheLicense,后者在发布产品时,必须公布源代码,而前者无须发布源代码。假如把对硬件支持的所有代码都置于Linux驱动层,那就意味着发布时要公开驱动程序的源代码,而公开源代码就意味着把硬件的相关参数和实现都公开了,在手机市场竞争激烈的明天,这对厂家来说,损害是十分大的。为此android linux内核层,Android就会想到把对硬件的支持分成硬件具象层和内核驱动层linux游戏,内核驱动层只提供简单的访问硬件逻辑,比如读写硬件寄存器的通道,至于从硬件中读到了哪些值或则写了哪些值到硬件中的逻辑,都置于硬件具象层中去了,这样就可以把商业秘密隐藏上去了。也正是因为这个分层的缘由,Android被踢出了Linux内核主线代码树中。你们想想,Android置于内核空间的驱动程序对硬件的支持是不完整的,把Linux内核移植到别的机器起来时,因为缺少硬件具象层的支持,硬件就完全不能用了,这也是为何说Android是开放系统而不是开源系统的诱因。
《Android系统源代码情境剖析》一书正在进击的程序员网()中连载,点击步入!
抛开那些争辩,学习Android硬件具象层,对理解整个Android整个系统,都是非常有用的android linux内核层,由于它从下到上涉及到了Android系统的硬件驱动层、硬件具象层、运行时库和应用程序框架层等等,下边这个图阐明了硬件具象层在Android系统中的位置,以及它和其它层的关系:
在学习Android硬件具象层的过程中,我们将会学习怎样在内核空间编撰硬件驱动程序、如何在硬件具象层中添加插口支持访问硬件、如何在系统启动时提供硬件访问服务以及怎样编撰JNI促使可以通过Java插口来访问硬件,而作为中间的一个小插曲,我们还将学习一下怎样在Android系统中添加一个C可执行程序来访问硬件驱动程序。因为这是一个系统的学习过程,笔者将分成六篇文章来描述每一个学习过程,包括:
一.在Android内核源代码工程中编撰硬件驱动程序。
二.在Android系统中降低C可执行程序测试Linux内核驱动程序。
三.在Android硬件具象层降低插口模块访问硬件驱动程序。
四.在Android系统中编撰JNI方式在应用程序框架层提供Java插口访问硬件。
五.在Android系统的应用程序框架层降低硬件服务插口。
六.在Android系统中编撰APP通过应用程序框架层访问硬件服务。
学习完这六篇文章,相信你们对Android系统都会有一个更深刻的认识了linux下载,敬请关注。