理解和使用Linux的硬件抽象层HAL

理解和使用Linux的硬件抽象层HAL作者:刘旭晖 Raymond转载请注明出处Email:colorant@163.comBLOG:/colorant/说来惭愧,基于ARM平台的驱动做了这么长时间了,以前一直在kernel里面忙活,很少了解上层应用相关的发展,也没有接触过HAL和 DBUS。因为最近做的项目上层是基于X86的软件框架来做,和以前的模式也有较大的变化,借此机会也想了解一下上层应用和底层驱动的配合和以前有什么不同,所以很自然的就需要了解Hal。记录一下自己的学习理解吧。本人的能力和测试时间有限,可能下文中有些理解、分析不一定准确,欢迎联系指正。1 相关说明1.1 网站资源HAL的官方网址:/wiki/Software/hal/os/project/tamarack/hal_re.html solaris系统上的同志写的一篇分析HAL框架原理的文章。很好,就是版本稍微有点旧/~d ... ndling-OLS-2006.pdf 2006年Linux研讨会上,Hal的作者David Zeuthen所提交的Paper。顺便提一下,研讨会的网址是:/有不少Paper看起来真的很不错啊,很有兴趣!今年的会议有好多Paper我都等不及想看看了。1.2 工作环境Hal本身对环境的要求是:Linux kernel 2.6.17 (or later)util-linux 2.12r (or later)udev 089 (or later)dbus 0.61 (or later)glib 2.6.0 (or later)我想,关键是内核了,低于这个版本的内核就不用玩了 8 )至于我的环境:硬件平台:基于ARM的嵌入式板子软件环境:Linux 2.6.21 ,自制文件系统 Dbus 1.0.2 Hal 0.5.102 理解HAL2.1 什么是HAL说实话,这部分很多人写过,不过为了文章的完备性,我还是从我理解的侧重点再写一下。首先HAL不是2001太空漫游系列里的那台超级电脑8 )HAL是Hardware Abstraction Layer即硬件抽象层的首字母缩写,以下来源于Hal Spec的框图很好的说明了它的组成部分:它是一个位于操作系统和驱动程序之上,运行在用户空间中的服务程序。它的目的是对上层应用提供一个统一的简单的查询硬件设备的接口。它所谓的抽象,基本上也就仅限于这一功能,它通常并不提供对硬件的实际操作,对硬件的操作,还是由应用程序来完成。细化来说,除了提供标准的硬件查询接口,它甚至并不考虑如何对硬件进行配置,这不是它要完成的工作,但它确实提供了存储硬件配置相关信息的空间。下面我们会说到,那被称为属性。所以,简单的说,你可以把HAL理解为:一堆的硬件列表以及他们的相关属性的集合。那么,这一堆硬件列表能有什么用呢?应该说,它简化了应用的查询逻辑,把这一部分的复杂性转移到了应用程序之外,由HAL统一处理,其次,按作者的期望,当一些库函数也开始使用HAL的时候,应用程序甚至可以把对不同硬件的实际操作的复杂性也交给库函数来自动处理。2.2 HAL的组成框架按照上面的框图,首先是HAL daemon,HAL的服务进程。其次是硬件信息文件,后缀fdi,再有是Callout和Addons,这些是HAL针对不同硬件进行额外的处理工作所需的一些可执行文件或脚本。在Hal内部,每个硬件(具体的或抽象的)都是由一个Device Object设备对象来表示。每个设备对象会包括以下几个概念的组成部分:UDI: Unique Device Identifer 每个设备对象的唯一标识符,它是根据BUS信息得到的,它的目标是保证设备的唯一性,同时在一个可移除设备多次插入拔出过程中保持相同的值。Property :属性,是一个key/value pair。每个属性由一个键和一个键值组成,用来存储设备对象相关的各种信息。Method :方法是用来读取设置属性,或提供某些特定操作。Interface :这个更多的是DBUS的概念。属性和方法被分类到不同的Interface中。2.3 HAL硬件信息的来源HAL中设备对象的相关信息来源主要有以下几种:通过Sysfs得到,有相当一部分的属性是通过这种方式得到的,比如UDI,设备的厂商,设备的父节点,设备的总线类型,硬盘的UUID啊等等。通过Probe探测得到,有些设备,例如一个Camera设备,它支持哪些数据格式啊之类的信息,对应用层程序也是有意义的,但是只是通过Sysfs接口并不能得到,而通过Linux V4L2子系统所定义的的一些标准接口函数,通过IOCTL可以得到这些信息。通常这是由HAL服务进程调用相应的callout去probe得到。类似还有很多子系统都定义了自己标准的接口函数,这为HAL获取进一步的设备

linux硬件抽象层框图,理解和使用Linux的硬件抽象层HAL.docx相关推荐

  1. 【Linux】深入理解Shell用法,从入门到精通

    Shell 从入门到精通 相关文章 一.Shell背景 1.1 GNU计划 1.2 Shell 1.3 Bash 二. Shell脚本基本语法 2.1 Getting Start 1. Introdu ...

  2. 深入理解DPDK程序设计|Linux网络2.0

    hi,大家好,由于移动互联网不断发展,导致网络流量徒增,推动着网络技术不断地发展,而CPU的运行频率基本停留在10年前的水平,为了迎接超高速网络技术的挑战,软件也需要大幅度创新,结合硬件技术的发展,D ...

  3. Linux内核深入理解定时器和时间管理(7):相关的系统调用

    Linux内核深入理解定时器和时间管理 相关的系统调用 rtoax 2021年3月 在原文基础上,增加5.10.13内核源码相关内容. 结构体 ---------------------------- ...

  4. Linux内核深入理解定时器和时间管理(5):clockevents 框架

    Linux内核深入理解定时器和时间管理 clockevents 框架 rtoax 2021年3月 在原文基础上,增加5.10.13内核源码相关内容. 1. Introduction to the cl ...

  5. Linux内核深入理解定时器和时间管理(4):定时器 timer

    Linux内核深入理解定时器和时间管理 定时器 timer rtoax 2021年3月 在原文基础上,增加5.10.13内核源码相关内容. 1. Timers This is fourth part ...

  6. Linux内核深入理解定时器和时间管理(3):tick 广播 框架 和 dyntick

    Linux内核深入理解定时器和时间管理 tick 广播 框架 和 dyntick rtoax 2021年3月 在原文基础上,增加5.10.13内核源码相关内容. 结构体 --------------- ...

  7. Linux内核深入理解定时器和时间管理(2):clocksource 框架

    Linux内核深入理解定时器和时间管理 clocksource 框架 rtoax 2021年3月 在原文基础上,增加5.10.13内核源码相关内容. 全局部变量 ------------------- ...

  8. Linux内核深入理解定时器和时间管理(1):硬件时钟和jiffies

    Linux内核深入理解定时器和时间管理 硬件时钟和jiffies rtoax 2021年3月 在原文基础上,增加5.10.13内核源码相关内容. 全局部变量 --------------------- ...

  9. Linux内核深入理解系统调用(3):open 系统调用实现以及资源限制(setrlimit/getrlimit/prlimit)

    Linux内核深入理解系统调用(3) open 系统调用实现以及资源限制(setrlimit/getrlimit/prlimit) rtoax 2021年3月 对原文进行了5.10.13的代码分析. ...

最新文章

  1. IT项目管理需要注意的细节
  2. Java GregorianCalendar setTimeZone()方法与示例
  3. java一个类可以同时被访问吗,Java中两个线程是否可以同时访问同一个对象的两个不同的synchronized方法?...
  4. 自由软件基金会官宣Zoë Kooyman担任新执行董事
  5. JNDI:对java:comp/env的研究
  6. linux环境(centos7.3)下安装Xilinx FPGA以及烧录算法教程
  7. crnn pytorch 训练、测试
  8. python 爬取 js渲染_scrapy 爬取 javascript 动态渲染页面
  9. 华芯微特SWM320TFT屏人机交互方案手册
  10. 初始Ext.net(二)
  11. 标准体重和身高的对应关系
  12. 希捷推出数条战略有意对抗充氦硬盘
  13. 数据结构——超全的数据结构思维导图
  14. Dolphinscheduler发邮件
  15. Windows10企业版 VS2017编译 MongoDB C++ Driver3.1.1 全过程
  16. Pycharm——取消自动保存
  17. 寻找孪生素数 (20 分)
  18. Python——SMTP发送邮件(发送不同格式、附件)
  19. 抓取淘宝购物车数据以及足迹数据
  20. 计算机网络(自顶向下方法)学习记录---3.4 可靠数据传输原理

热门文章

  1. 工厂方法模式_工厂方法模式
  2. 【解析】1057 数零壹 (20分)(进制转换)
  3. (*长期更新)软考网络工程师学习笔记——Linux操作系统中的vi/vim 编辑器详解
  4. android 4.0 电话录音,ANDROID音频系统散记之四:4.0音频系统HAL初探
  5. python opencv图片放大 缩小_Python OpenCV之图片缩放的实现(cv2.resize)
  6. html5 制作神器,HTML5/Canvas 简单的泡沫生成器
  7. 计算机网络基础题解综合练习实验,计算机网络基础题解•综合练习•实验
  8. css画带边框三角形,纯CSS画三角形(带边框)
  9. linux性能并发 带机量,性能测试笔记(一):吞吐量与并发数
  10. mysql读取整张表_mysql 一个表里的信息是读取另一张表来的