HAL(硬件抽象层)是建立在Linux驱动之上的一套主程序,这套主程序并不属于Linux内核,而是属于Linux内核层之上的应用层,Google为Android增加HAL测主要目的除了尽量避免应用程序直接访问Linux驱动外,还有一个重要原因,就是保护“私人财产”,对于那些既想发布基于Android的Linux驱动程序,又不想将核心业务逻辑公开的企业和个人。HAL简直就是福音。HAL并不是Linux内核的一部分,而是位于Android的系统运行库层,Android并没有要求源代码开源,HAL属于Android,所以也不需要开源。HAL架构基本原理就是在Android系统中使用程序库(。So文件)调用位于内核空间的Linux驱动(一般通过设备文件访问)。然后Android应用程序(APK文件)可以通过NDK程序访问HAL中的程序库,或直接在Android应用程序中访问HAL中的程序库(直接使用java代码访问)。编写一款支持HAL的Linux驱动程序的步骤:第一步:编写Linux驱动;第二步:编写HAL Library;第三部:编写service Library。高版本的Android系统为HAL增加了Stub,就是为每一个HAL共享库指定一个ID,再利用这个ID配合一定的规则找到Linux共享库,这样Linux共享库更换文件名,移动位置都很方便。