第九章读书笔记

      Linux.系统中Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑有 码。对于访问硬件寄存器的代码,并没有什么秘密可言,因为这都是调用的 Linux 内核的标准函数〈如 io位ad32、 ·iowrite32等)进行的标准操作4 而Linux驱动的业务逻辑部分对击有些企业或个人并不想-~ 将源代码公开。尽管这些Lipux.驱动都是免费给用户’使用的, {g由于这些Linux 驱动的实现涉及一些 , 、 技术专利或商业秘窑,如果公开源代码会有很大麻烦。但作为Linux.驱动,h又不得不公开源代码。这 是由于Linux 内核采用了 GPL协议(详见6J.3.节的介绍),而GPL协议要求所有使用基于GPL协 ‘议的源代码的程序必须开源(由于 Linux 驱动属于 Linux 内核的一部分,因此Linux 驱动必须开源〉。

       编写一款支持 HAL 的 Linux 驱i.9J.程序要比编写普通的 Linux 驱动程序复杂一些,但这些付出 是值得的。 因为加入HAL 会使组成 Linux 驱动的一整套 Library 的各部分更独立,更容易维护。下 面看一下具体的实现步骤。在后面的内容会逐渐对每一步进行讨论。 第 1 步g 编写 Linux 驱动 “编写 Linux 驱动”,从表明上看是废话,但如果要为 Linux 驱动添加 HAL,而且想尽量保护敏 感数据。 Linux 驱动的代码就要尽量简洁,尽可能将业务逻辑放到 HALLibrary 中。 第 2 步:编写 HAL Library HAL Library 就是普通的 Linux Library 仆.so )文件。但这类库文件有一个接口。通过 HAL _MODULE_INFO _ SYM 变量实现。 Service Library 就是通过在这个接口中定义的 ID 定位 HAL Library 的。 第 3 步:编写 Service Library 尽管这步并不是必需的,但新的 HAL 架构要求我们这样做。 Service Library 也是 Linux Library。 这一步比较灵活。 Service Library 可以是一般的 Linux Library,也可以是别I Library。在本章的 LED 驱动例子中将 Service Libratγ和刑I Library 合到了一起。也就是说, Service Library就是JNI Library. 实际上这一步除了用 CIC件实现的*.so 库文件外,还应该包含一个用 Java 编写的服务管理类 ( ServiceManager)。 ServiceManager会调用 Service Library。而 APK 程序会调用 ServiceManager类米 访问 Service Library。

       http://www.cnblogs.com/sjjj/

posted @ 2016-06-25 22:17  从前以後。  阅读(154)  评论(0编辑  收藏  举报