第九章随笔

 

第九章

一、Google为android加入HAL主要有如下目的:

    1、统一硬件的调用接口,HAL有标准的调用接口,屏蔽Linux繁杂接口;

    2、解决GPL版本问题;

    3、对于有些硬件,可能需要访问一些用户空间的资源,或在内核空间不方便完成的工作以及特殊需求,可利用HAL辅助完成;

二、编写一款支持HAL的linux驱动程序步骤:

1、编写linux驱动(尽量简洁,尽量将业务逻辑放倒HAL library);

2、编写HAL Library;

3、编写service library 可以使一般的linux library 也可以是TNI library。

三、编写HAL 模块的步骤和原理:

1步:描述HAL 模块的hw_module_t结构体。

   typedef struct hw_modu l e_t {/ *模块的Tag ,值必须是HARDWARE_MODULE_TAG */

   uint32_t tag;/* 模块主版本号*/

   uintl6_t version_major;/* 模块从版本号*/

   uintl6_t version_minor;/*模块的ID ,通过该ID 可以找到当前模块*/

   const char *id;/*模块名称*/

   const char *name;/*模块作者*/

   const char *author/*与模块相关的函数指针,都包含在hw_module methods_t 结构体中*/

   struct hw_module_methods_t* methods;/*模块的dso*/

   void * dso;/*保留的空间*/

  uint32_t reserved[32- 7];

  }hw_module_t

2步:编写HAL模块的open函数

    open 函数是HAL 模块的入口点。该函数主要做如下3 项工作

  1初始化hw_device_t 的子结构体。除了设置一些必妥的变量外,还需要设置操作硬件的配

  数指针〈本例是close 、set_on 和set_off)close 函数由系统自动调用。在这一步由close 、set_on 和set_off 指定的函数还没有定义, 可以先把函数名写上,或在定义了相关函数后再设置这些函数指针。

  2打开设备文件

  3初始化寄存器

第3 步:定义hw_module_methods_ t 结构体变量

第4 步: 定义HAL_MODULE_INFO_SYM 变量

第5 步:编写HAL 模块的close 函数

第6 步 编写控制LED 的函数

 

 

时间: 2024-07-30 10:17:39

第九章随笔的相关文章

Android深度探索与HAL驱动开发(卷1)-- 第九章随笔

第9章 硬件抽象层:HAL Hal(Hardware Abstract Layer,硬件抽象层)是建立在Linux驱动之上的一套程序库.这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层. 编写支持HAL的Linux驱动程序的步骤: 第一步:编写Linux驱动 第二步:编写HAL Library 第三步:编写 Service Library 编写HAL 模块的步骤和原理如下: 第一步:定义结构体和宏 第二步:编写HAL模块的open函数 第三步:定义hw_module_met

《软件工程》第九章随笔

软件实现是软件产品由概念到实体的一个关键过程.代码设计—>设计审查—>代码编写—>代码走查—>代码编译—>单元测试. 之后主要讲解了程序设计语言的发展经历和高级程序语言的优越性.程序语言的选择可由一下几个标准来判断:应用领域,用户要求,系统兼容,可移植性,开发环境.又介绍了一些软件编码的规范,分别列举了一些可能出现的问题,如异常处理问题,性能问题,内存异常问题.

javascript高级程序设计 第九章-- 客户端检测

javascript高级程序设计 第九章-- 客户端检测 客户端检测是javascript开发中最具争议的一个话题,由于浏览器间存在差别,通常需要根据不同浏览器的能力分别编写不同的代码.有下列常使用的客户端检测方法:能力检测:在编写代码之前先检测特定浏览器的能力.例如,脚本在调用某个函数之前,可能要先检测该函数是否存在.这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上.能力检测无法精确地检测特定的浏览器和版本.怪癖检测:怪癖实际上是浏览器中存

zabbix专题:第九章 自定义key(案例:监控内存,监控nginx状态)

第九章 自定义key 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 为什么要自定义KEY 有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法.我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter. 语法如下: UserParameter=key,command 用户自定义参数包含一个key和一个命令,ke

读书笔记第九章

第九章HAL是建立在linux驱动之上的一套程序库.这套程序库并不属于linux内核,而是属于linux内核层之上的应用层.可以用来保护不想公开源代码的作者.HAL架构比较简单,其基本原理就是在安卓系统中使用程序库调用位于内核空间的linux驱动,然后安卓应用程序可以通过NDK程序访问HAL中的程序库,或直接在安卓应用程序中访问HAL中的程序库.编写一款支持HAL的linux驱动程序的步骤:1.编写linux驱动,linux驱动的代码要尽量简介,尽可能将业务逻辑放到HAL library中.2.

第九章 两种模式的比较

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include

第九章 用多线程来读取epoll模型下的客户端数据

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include

第九章 TCP和UDP同时用复用一个端口实现一个回射服务器

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include

C++ PRIMER 第九章

顺序容器:vector list deque 顺序容器适配器: stack queue priority_quequ(没见过,第一轮不管) C<T> c; C c(c2); C c(b,e) ///b e 都是迭代器; c(n,t)///只用于顺序容器; C c(n) ///只用于顺序容器 const list<int>::size_type list_size = 64; list<string> slist(size_type,"eh?"); 支