Android深度探索-卷1第九章心得体会
在android系统中使用Linux 驱动有两种方式一种是通过传统的方式直接与Lmux 驱动交互,如,直接读写设备文件的数据。另外一种是Android特有的,就是通过HAL 模块。HAL 模块本质是通过Linux 共享库与Linux驱动交互,然后应用程序再访问Linux共享库。为每一个HAL共享库指定一个ID,再利用这个配合一定的规则找到linux共字库。
HAL (硬件抽象层)是建立在Linux 驱动之上的一套程序库属于Linux 内核层之上的应用层。
Android加入HAL层主要目的统一硬件的调用接口,解决GPL版权问题,针对一些特殊的要求。
编写一款支持HAL 的Linux 驱动程序的步骤:第1 步:编写Linux 驱动;第2 步:编写HAL Library;第3 步:编写Service Library
编写HAL 模块的步骤和原理如下。
第l. 步:定义结构体和宏编写HAL 模块需要使用到3 个非常重要的结构体 hw_module_t 、hw_device_t 和hw _ module_ methods_t, 需要定义两个新的结构体, 还需要为HAL模块定义一个ID
第2 步L 编写HAL 模块的open 函数, open 函数是HAL 模块的入口点。以led_device_open 函数为例,韧始化hw_device_t 的子结构体,打开设备文件,初始化寄存器.
第3 步:定义hw_module_methods_ t 结构体变量, HAL 模块需要hw_module_methods_t 纣构体的open 函数指针交量指定open 入口函数
第4 步:定义HAL_MODULE_INFO_SYM 变量,所有的HAL 模块都必须有一个HAL_MODULE_INFO_SYM 变量
第5 步:编写HAL 模块的close 函数,当HAL 模块被卸载后会调用close 函数。
第6 步:编写控制LED 的函数,根据设备类型和功能的不同,这一步编写的函数也有所不同
编写调用HAL 模缺的Serv i ce
调用HAL 模块涉及hw_get_ module 函数。该函数可以通过在leds_hal.h 中定义的LED_HARDWARE_MODULE_ID 宏查找LED HAL 模块,并获得led_modu le_t 结构体。然后调用led module_ t.hw _ module.methods.open 函数来初始化LED 驱动, 并通过open 函数返回led_control_device_t 结构体。led_control_ device_ t 结构体中包含了在HAL 模块中定义的控制LED驱动的函数指针set_on和set_off
HAL模块的存放路径和命名规则的结论
HAL 棋块库文件的存放路径有两个:/system/lib/hw 和/vendor/lib/hw.
HAL 模块库文件的命名规则是ID.suffix.so。
hw _get_module 会在Android 系统的属性文件中根据variant_keys 数组中定义的4 个key依次查找suffix
Android 系统的属性文件有4 个:
/default.prop ;
/system/build.prop;
/system/default.prop;
/data/local.prop .
Android 在启动时会自动装载这些属性文件
Android深度探索-卷1第九章心得体会的更多相关文章
- Android深度探索-卷1第二章心得体会
这章介绍了搭建Android开发环境的的搭建,主要是在Linux上搭建Android开发环境总体来说因为都是在Linux下开发的,so,只介绍了在Linux环境下的搭建在搭建过程中全是命令操作,和Wi ...
- Android深度探索-卷1第一章心得体会
本章介绍了安卓系统移植与驱动开发的概述,安卓的系统架构有四层:1 Linux内核,2 c/c++代码库, 3 Android SDK API, 4 应用程序 在读的过程中看到了专业名词,查了查,长点 ...
- Android深度探索-卷1第十章心得体会
本章介绍了传统的printk 函数调试技术和其他的调试技术,如gdb gdbserver kgdb 对于复杂的Linux 驱动及HAL 等程序库,需要使用各种方法对其进行调试,如,设置断点.逐步跟踪 ...
- Android深度探索-卷1第八章心得体会
本章介绍了如何将Linux驱动分成多个实现文件和Linux常用的代码重用方式还有些强行卸载Linux驱动的方法 开发一个Linux驱动,可能会在init.exit等函数中发生错误导致Linux驱动安装 ...
- Android深度探索(卷1)HAL与驱动开发 虚拟环境的安装
前言: 最近在看<Android深度探索(卷1)HAL与驱动开发>安装随书带的虚拟环境浪费了很多时间,说是虚拟环境的安装倒不如说是虚拟环境的导入,其实没什么技术含量,也没有什么复杂的,只是 ...
- Android深度探索-卷1第四章心得体会
这一章的和三章的git用法有联系,so,吧上一章的git基本用法搞好了再来,具体的方法就是看书上网查,这里就不做详细步骤介绍了.这章就有点意思了,是源码的下载和编译,有能看的,能自己鼓捣的,本章介绍的 ...
- Android深度探索-卷1第五章心得体会
S3C6410是由三星公司推出的一款低功耗.高性价比的RISC处理器,开发是,首先安装minicom串口调试工具: 第一步:检测当前系统是否支持USB转串口. Lsmod | grep usseria ...
- Android深度探索-卷1第六章心得体会
这章主要介绍了第一个linux驱动程序:统计单词个数.Linux系统将每一个驱动都映射成一个文件,这些文件称为设备文件或驱动文件,都保存在/dev目录中.大多数Linux驱动都有与其对应的设备文件,因 ...
- Android深度探索-卷1第三章心得体会
第三章整章介绍了git,git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.通过配置git后可以很方便的找到需要的资源,更多的是代码和包,可以在本地建立版本库,为了 ...
随机推荐
- 洛谷 - P4114 - Qtree1 - 重链剖分
https://www.luogu.org/problem/P4114 维护边权的话,用深度大的点表示这条边(可以遍历一边边询问两端深度,这样不需要修改dfs1,也可以在dfs1的时候向下走的同时把边 ...
- 问题 H: 小k的简单问题
问题 H: 小k的简单问题 时间限制: 1 Sec 内存限制: 128 MB提交: 107 解决: 57[提交] [状态] [命题人:jsu_admin] 题目描述 地图上有n个村庄,小k每个月需 ...
- ant-design如果按需加载组件
Ant Design React按需加载 Ant Design是阿里巴巴为React做出的组件库,有统一的样式及一致的用户体验 官网地址:https://ant.design 1.安装: npm in ...
- VMWare15 安装 Mac OS 系统
文章目录VMWare15 安装 Mac OS 系统安装环境工具准备准备工作MAC虚拟机设置启动MAC前准备工作安装系统安装VMware Tool注意事项参考链接安装环境WIN10VMware Work ...
- JSP2的自定义标签和方法
Jsp2的自定义标签 Jsp2 开发标签库的几个步骤: 开发自定义标签处理类. 建立一个*.tld文件,每个tld文件对应一个标签库,每个标签库可对应多个标签. 在jsp文件中使用自定义标签 空标签 ...
- iis8.5部署net项目
服务器上运行提示: iis版本: 使用命令行运行cmd(管理员模式) 输入: %windir%\system32\inetsrv\appcmd unlock config -section:syste ...
- 十大热门AI芯片
资料来源:头条<人工智能影响力报告>中的人工智能十大热门芯片 iPhone X内部搭载了一颗全新定制的处理器——A11 Boinic,用来承担人脸识别和移动支付的工作负荷.双核心A11芯片 ...
- 在centOS7.2上编译gcc4.4.7
1.前置 首先,可以参考我的上篇文章,在centOS7.2上编译gcc4.1.2,过程基本一致,这里只对可能遇到的错误情况进行说明. 2.安装texinfo4.8 我的centos7.2版本,自带的是 ...
- ASPOSE的示例下载地址
ftp://112.124.7.170/ASPOSE/Aspose.Words_16.3.0.zip http://blog.163.com/haolongqin@126/blog/static/10 ...
- 怎样group by一列 select多列
之前sql用的少 竟然不知道这个小技巧 1 将要查询的列 添加到group by后面(会影响查询结果) 2 使用聚合函数如 max select a.accounttitlecode, max(b.c ...