第九章心得体会

通过第九章的学习,我学到了如下知识点:

第九章:硬件抽象层:HAL

9.1为什么要在Android中加入HAL

1.HAL并不是Linux内核的一部分,而是位于Android的系统运行库层

2.为Android加入HAL主要目的:统一硬件的调用借口,解决了GPL的版权问题,针对一些特殊的要求。

9.2Android HAL架构

9.3为LED驱动增加HAL

1.编写一款支持HAL的Linux驱动程序的步骤

第一步:编写Linux驱动

Linux驱动代码要尽量的简洁,尽可能将业务逻辑放到HAL Library

第二步:编写 HAL Library

HAL library就是普通的Linux library文件,但这类库文件有一个接口,通过HAL_MODULE_INFO_SYM变量实现,service library就是通过在这个接口中定义的ID定位HAL library的。

第三步:Service Library

这一步不是必须用到的。

2.颠覆Linux驱动的设计理念:精简LED驱动

编写LED驱动时需要注意:不和之前的LED冲突,需要修改部分代码避免冲突

3.测试读写寄存器操作

命令行语法格式:rwdev:命令行程序

<r|w>:读或写命令,r代表读取寄存器中的数据,w表示向寄存器写入数据。

<dev_file>:设备文件名

<byte_count>:写入或读取的字节数

[byte1],[byte2]:写入的字节

4.编写调用LED驱动的HAL模块

在这个HAL模块中包含了LED驱动的所有业务逻辑

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

第一步:定义结构体和宏

编写HAL模块需要使用3个非常重要的结构体(hw_module_t,hw_device_t,hw_module_methods_t)

第二步:编写HAL模块的open函数

Open函数是HAL模块的入口点

第三步:定义hw_module_methods_t结构体变量

HAL模块需要hw_module_methods_t结构体的open函数指针变量指定open入口函数。

第四步:定义HAL_MODULE_INFO_SYM变量

所有的HAL模块都必须有它

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

当HAL模块被卸载后会调用close函数

第六步:编写控制LED的函数

设备类型和功能的不同,这一步编写的函数也有所不同

5.编写调用HAL模块的service

6.HAL模块的存放路径和命名规则

HAL模块通常存放在/system/lib/hw目录下,文件名一般都有一个default

7.编写调用service的iava库

8.测试LED驱动

测试程序通过直接向LED驱动设备文件发送字符串来控制LED

时间: 2024-10-07 05:32:26

第九章心得体会的相关文章

第九章 心得体会

通过第九章的学习,知道了什么事HAL以及为什么要使用HAL和关于HAL的驱动实例. 学到的知识: 一.为什么要在Android中加入HAL 统一硬件的调用接口.解决了GPL版权问题.针对一些特殊的要求. 二.为LED驱动增加HAL 1.编写一款支持HAL的Linux驱动程序的步骤 第1步:编写Linux驱动 第2步:编写HAL Library 第3步:编写Service Library 2.精简LED驱动 基本原理是只从指定都存器读取或写入5个字节.第 l个字节用于指定读写的动作以及寄存器类型.

《Android深度探索》(卷1)HAL与驱动开发 第九章心得体会

本章主要学习了硬件抽象层:HAL. Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节.也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空间(Kernel Space),其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间.为什么要这样安排呢?把硬件抽象层和内核驱动整合在一起放在内核空间不可行吗?从技术实现的角度来看,是可以的,然而从商业的角度来看,把对硬件的支持逻辑都放在内核空间

android深度探索第九章心得体会

本章主要讲硬件抽象层:HAL,它是建立在Linux驱动之上的一套程序库.刚开始介绍了为什么要在Android中加入HAL,目的有三个,一,统一硬件的调用接口.二,解决了GPL版权问题.三,针对一些特殊的要求.可以利用位于用户空间的HAL代码来辅助Linux驱动完成一些工作. 编写HAL模块的步骤和原理如下. 第一步:定义结构体和宏编写HAL模块需要使用到3个非常重要的结构体,在第一步需要定义两个新的结构体. 第二步:编写HAL模块的open函数 open函数是HAL模块的入口点.本例中使用的是l

阅读《软件工程—理论方法与实践》第九章心得体会

软件实现主要是对软件代码部分所用语言,编码规范.代码审查等方面进行规划.Java程序要有版权与版本的文件头注释,packcge和import语句,类和接口说明语句.代码要有适当空行,代码行及行内空格,分行.对齐与缩进,命名要有规则(例知望文知义),要有声明,有注释.要注意变量名问题,要方便大家读懂.主要的内存异常问题主要有内存泄漏问题.指针参数问题.”野指针问题,良好的编程习惯对防止内存异常问题十分重要.同时,要避免创建重复对象,优化语句提高性能.

安卓移植和驱动开发第九章心得体会

HAL ( Hardware Abstraction Layer,硬件抽象腔,〉是建立在Linux驱动之上的一套翻字库.这套程序 j率并不属于 Linux 内核, 而是属于 Linux 内核层之上的应用层. Google 为 Android 增加 HAL 的主要目 的除了尽量避免应用程序直接访问 Linux 驱动外,还有一仓重要原因,那就是保护 “私人财产”.-对于 那些既想发布茬子·Android,的Linux驱动程序,又不想将核心业务逻辑公开的企业或个人,这时候HAL显得非常重要了. 在传统

阅读《软件工程—理论方法与实践》第四章心得体会

阅读第四章所得体会.软件需求是决定软件开发是否成功的一个关键因素.开发人员应当学会正确地理解软件需求,实行开非完善但是高质量的需求开发和管理,最大限度地降低软件需求风险.软件需求可以划分为业务需求(定义了项目的远景和范围).用户需求(使用该系统需要完成的任务).系统需求.功能需求(说明了需要开发实现的功能)和非功能需求(功能需求的补充)等型.需求工程是应用已证实有效的原理和方法,并通过合适的工具和符号,系统地描述出待开发系统及其行为特征和相关约束,其过程包括需求获取.需求分析.需求规格说明.需求

大道至简第一章心得体会

大道至简——编程的精义  心得体会      谨以此用于苦恼编程序不得入门的人,不对之处敬请指出 “虽我之死,有子存焉:子又生孙,孙又生子:子又有子,子又有孙.子子孙孙,无穷匮也.而山不加增,何苦而不平?” ——<愚公移山>,<列子-汤问篇> 编程究其本身对大数人而言是一件很苦恼而又无法避免的事情,但是有点可笑的是编程本身实在是一件简单的事,因为“程序=算法+结构”,所谓的编程就是把一件事情交给计算机去做,然后把你的想法“告诉”计算机就行了.但是编程又是一件很“无语”的事情——因为

大道至简-第二章 心得体会

大道至简——是懒人造就了方法    心得体会 “ 僰道有蜀王兵蘭,亦有神作大潭江中.其崖崭峻不可破,(冰)乃积薪烧之.” ——<华阳国志> 从这段历史文献中我们可以看到,李冰同样是凿山但是他懂得方法,懂得怎样快速的破山凿山.这大概就是愚公和李冰的区别了(李冰是‘积薪烧之’而愚公是‘碎石击壤’)这两种方法的结果差距是很大的. 很明显李冰的方法更高级一点,那么问题来了,李冰为什么会找到这种方法而愚公没有找到呢?如果李冰也和愚公一样每天都忙东忙西“受命以来,夙夜忧叹”每天连吃饭的时间都没有,那他可以

android驱动开发第九章心得笔记

---恢复内容开始--- 第九章主要讲硬件抽象层:HAL,它是建立在Linux驱动之上的一套程序库.刚开始介绍了为什么要在Android中加入HAL,目的有三个,一,统一硬件的调用接口.二,解决了GPL版权问题.三,针对一些特殊的要求.可以利用位于用户空间的HAL代码来辅助Linux驱动完成一些工作. 下一个小节讲了Android HAL 架构.接下来讲了为led驱动增加HAL,主要是将所有的业务逻辑从LED驱动移到HAL模块,而LED驱动只保留读写寄存器的功能. 涉及的HAL步骤:1.编写Li