以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):
http://blog.csdn.net/luoshengyang/article/details/8923485
http://blog.csdn.net/luoshengyang/article/details/12957169

整理by Doing

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

Android硬件驱动程序开发:与传统的Linux硬件驱动程序开发是一样的
Android硬件驱动程序验证
Android硬件抽象层模块开发
Android硬件访问服务开发
Android硬件抽象层(HAL)概要介绍和学习计划

转载于:https://www.cnblogs.com/Doing-what-I-love/p/5530283.html

Android - 硬件抽象层(HAL)相关推荐

  1. Android硬件抽象层HAL之简介(一)

    1.HAL简介 Android的HAL(Hardware Abstraction Layer,硬件抽象层)是建立在Linux内核之上的一套程序.这套程序不属于Linux内核,而是运行在用户空间.HAL ...

  2. Android硬件抽象层(HAL)深入剖析(一)

    2019独角兽企业重金招聘Python工程师标准>>> 作为一个搞android驱动或者说搞底层的人,我觉得对于hal那是必须要掌握的,而且必须达到一定深度,于是我总结了一下,将整个 ...

  3. 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口 6...

    在上两篇文章中,我们介绍了如何为Android系统的硬件编写驱动程序,包括如何在Linux内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口.实现这两者的目的是为了向更上一层提供硬件访问接口,即为 ...

  4. s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录(二 硬件抽象层HAL 第二种 ioctl操作方法)

    欢迎转载,务必注明出处:http://blog.csdn.net/wang_shuai_ww/article/details/44407641 本篇与http://blog.csdn.net/wang ...

  5. Android架构分析之硬件抽象层(HAL)

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 一.硬件抽 ...

  6. 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口

    在上两篇文章中,我们介绍了如何为Android系统的硬件编写驱动程序,包括如何在Linux内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口.实现这两者的目的是为了向更上一层提供硬件访问接口,即为 ...

  7. Android硬件抽象层(HAL)概要介绍和学习计划

    http://blog.csdn.net/luoshengyang/article/details/6567257 Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接 ...

  8. Android硬件抽象层(HAL)概要介绍和学习计划 1转

    最近和另外一家开发公司涉及到合作,一直希望了解Android从Linux到App整个架构和流程,那家开发工程师也不断提供帮助,不过如果借助后面几篇博客,相对系统和完整的可以了解更加清晰, <博客 ...

  9. 关于Android的HAL的一些理解

    之前一直在学习基于Linux内核的一些字符型驱动的编程,对Linux内核驱动也算有了一些基本的了解吧,后来也做过一些基于Linux内核的驱动开发,像基于Android的CC1101高频模块的驱动开发, ...

  10. linux硬件抽象层框图,理解和使用Linux的硬件抽象层HAL.docx

    理解和使用Linux的硬件抽象层HAL 理解和使用Linux的硬件抽象层HAL作者:刘旭晖 Raymond转载请注明出处Email:colorant@163.comBLOG:/colorant/说来惭 ...

最新文章

  1. Java Web 项目配置 环境搭建 如何安装jdk jre
  2. 33个优秀的 jQuery 图片展示插件分享
  3. 25个好用到爆的一行Python代码,建议收藏
  4. 信捷步进指令的使用_步进电机驱动器的模式
  5. input file HTML控件控制
  6. 鸿蒙官网什么样,鸿蒙系统推广,结果会怎么样?
  7. Javascript第四章变量的提升和预解析方法流程第四课
  8. 高质量c/c++编程(3)
  9. java的dtd文件_Eclipse中在XML中如何关联.dtd文件
  10. 黑客都怎么制作外挂?C++黑客编程收集的源码集合
  11. Ubuntu16.04 ext4格式硬盘挂载普通用户权限控制
  12. eyoucms使用入门 三
  13. 标准MIDI文件格式
  14. K2 BPM平台应用价值(上篇):统一的流程管理平台对企业有多重要?|工作流平台
  15. 如何删除PDF文件中其中一页?
  16. gt,gte,lt,lte含义
  17. GC8418 数字光纤音频解码芯片 光纤解码芯片 MS8412替代
  18. 什么才算好的监控系统?
  19. DBlink 创建 删除 脚本
  20. 美国芯源系统(MPS)校招笔试经历

热门文章

  1. xuperchain 区块最大大小 区块容量 maxblocksize
  2. FISCO BCOS共识优化之路
  3. Java中的浅克隆和深克隆
  4. JavaSE基础——Scanner类和String类
  5. oracle 查询temporary table,【TEMPORARY TABLE】Oracle临时表使用注意事项
  6. 个人简历怎么写怎么做(还有怎么培养无私奉献的精神--模板)
  7. php 面向对象编程(class)之从入门到崩溃 基础篇
  8. ORM框架使用优缺点
  9. 二十五、JAVA多线程(五、线程生命周期)
  10. Servlet chapter 1