9到10章心得

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9到10章心得相关的知识,希望对你有一定的参考价值。

第九章

HAL是属于Linux内核层上的应用层,增加HAL的主要目的是除了尽量避免应用程序直接访问Linux驱动外,还有一个重要的原因,就是保护“私人财产” 。 编写一个支持HAL的Linux驱动程序的步骤:第一步编写Linux驱动:linux源代码尽量简洁,尽可能将业务的逻辑放到HAL Library;第二步编写Hal library:Hal Linrary 是普通的Linux Library(*。so)文件。但是在类库文件由一个接口。通过HAL_MODULE_INFO_SYM 变量实现。Service Library 就是通过这个接口定义的ID定位Hal Library的;第三步编写Service Library :但是这一步并不是必须的,service Library也是Linux library。

 HAL硬件抽象层是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层上的应用层。在传统的 Linux系统中Linux驱动一般有两种类型的代码。Google为Android加入HAL主要有以下目的:统一硬件的调用接口。由于HAL有标准的 调用接口,所以可以利用HAL屏蔽了Linux驱动复杂、不统一的接口;解决了GPL协议;针对一些特殊的要求。对于一些硬件,可能需要访问一些用户空间 的资源,或在内核空间不方便完成的工作以及特殊需求。在这种情况下,可以利用位于空间的HAL代码来辅助Linux完成一些工作。在Android系统中使用Linux驱动有两种方式,一种是通过传统的方式直接与Linux驱动交互。例如,直接读写设备文件的数据。另一种是Android特有的,就是通过HAL模块。HAL模块本质上就是通过Linux共享库与Linux驱动交互,然后应用程序再访问linux共享库,早期的HAL模块由应用程序直接访问linux共享库的方式调用。而高版本的Android系统为HAL增加了Stub,换句话说,就是为了每一个HAL共享库指定一个ID,再利用这个ID配合一定的规则找到Linux共享库,这样Linux共享库更换文件名,移动位置都很方便,Google也建议使用stub的方式编写HAL模块。Android_.H现二的源代码存储的位置并不固定, 一般会存储在<Android源代码目录>/hardware 目录中。其中<Android 源代码目录>/hardware/libhardware legacy 目录用来存HAL 架构的源代码文件。新HAL 架构的源代码在<Android 源代码目录>/hardware/libhardware目录中,当然,这些源代码文件也可以放在<Android 源代码目录>/hardware 或其他的目录。最终编译生成的.so 文件主要放在Android 系统的/system/lib/hw 目录。

 

 

第十章

    我们在进行开发时需要不断的对程序进行调试,嵌入式Linux在调试方面没有房产的可视化工具,但是学习调试技术有利于我们开发强大而稳定的Linux内 核模块。 打印内核调试信息:printk printk函数和printf函数类似,不过前者运行在内核空间,而后者运行在用户空间。printk函数至少有一个参数,但是里面的参数有八种不同的 代表,代表他们要输出信息的级别。同时printk函数是一个简单的有四个数字组成的文本文件,不管消息级别是多少,所有通过printk函数发出的消息 都会输出到日志文件。在使用printk函数的时候我们要注意他会降低linux驱动性能。 gdb调试用户空间程序,gdb可以跟踪调试用户空间的程序,他是用调试命令来就行调试的,但是一般不会在手机,开发版上使用。但是他的命令可以用于 gdbserve远程调试。 用gdbserver远程调试用户空间程序。他是一种可以运行在ARM架构上的服务端程序,通过串口,有线或者无线网络可以在PC上进行调试。 kgdb远程调试内核程序 他除了提供类似printk函数的日志输出功能,还允许开发人员直接在PC上通过GDB链接目标设备。Kgdb包含了两部分,kgdb内核和一套连接接 口。虽然使用printk函数可以很方便的将消息写入日志文件或控制台。但大量使用printk函数频繁操作日志文件或控制台设备文件(/dev /console)会严重影响Linux驱动性能(因此写磁盘的速度远没有读写内存的速度快),因此,这就要求Linux驱动只在开发阶段使用 printk函数输出信息,在正式发布Linux驱动时将可能影响性能的printk函数去掉。

以上是关于9到10章心得的主要内容,如果未能解决你的问题,请参考以下文章

构建之法 第五次心得

第10章 嵌入式Linux的调试技术 学习心得

第八章心得体会

第六章心得体会

《Android深度探索》第六章心得体会

Android深度探索——第六章读书笔记及心得