安卓驱动程序架构

原创 2017年08月01日 20:48:12

我们回忆上一篇文章的两种驱动模型

第一种驱动模型当中是内核级别的驱动程序,还会有个APP

我们驱动程序提供出来的接口是ioctl接口,我们APP采用的是JAVA语言编写的,但是我们JAVA语言是没有IOCTL这个函数的

既然没有,怎么链接到我们底层的ioctl呢,所以这里要引入第三方,用JAVA语言写的APP调用到我们C和C++编写的程序,用JNI就可以调用

JNI是JAVA NATIVE INTERFACE:即JAVA本地接口,它提供了JAVA程序调用C/C++程序的机制,为什么JAVA语言已经成熟了还要去调用C/C++的库呢

1.处于对代码的保护。由于JAVA代码很容易被反编译,而C/C++库反汇编难度较大

2.可以方便的使用现存的开源库。大部分开源库都是用C/C++代码编写的

3.提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率

4.JAVA代码在某些文件操作方面,找不到相应的API

这里又有一个疑问,我们在用第一种驱动模型的时候直接弄的一个APP,没有看到第三方的程序啊。因为我们在这个技术当中用到了另外一个技术叫做NDK技术

在安卓首次发布的时候,Google就宣布其支持JNI编程,但是使用C/C++开发so库文件如何和一个应用程序一起打包成APK并发布?这里就还存在技术障碍

NDK(Native Development Kit)提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和JAVA应用一起打包成APK(安卓特有技术)

APK是AndroidPackage即Android安装包(apk) 通过将APK文件直接传到Android模拟器或Android手机中执行即可安装

这就是我们第一种模型,但是为什么还要讲第二种模型,第一种模型肯定有不好的地方,它最大的问题在驱动这一块,我们驱动是遵循GPL协议的,GPL需要开源,比如说我是一个厂商,我的驱动程序里有很多我的商业的秘密,我不想开源。那么就出问题了,你这个驱动程序在内核当中就一定要开源,那么我就把你这驱动程序一份为2,有一部分是开源的,遵循我GPL协议的,有一部分就不开源,不开源的部分就不能放到内核里面了,那么你肯定要把它放到安卓里面去。这个基本思路就是这样,我们看一看是怎么做的

我们模型二就出来了,我们模型二首先还是还是我们内核的驱动,往上是我们把不想开源的代码放到了我们安卓系统当中去了,而且我们给了它一个新的名字叫做HAL,硬件抽象层。我们HAL里面就是放了不想开源的代码。然后在HAL之上就是硬件服务层,我们把我们的硬件抽象层就行一个相应的封装,封装出一个硬件服务,注意每一个驱动会对应一个硬件服务,我们会把硬件服务注册到安卓系统当作去,然后我的APP要去调用我们驱动程序怎么做的呢???我们APP首先是用过在安卓系统中很重要的一个部分叫做service  manage 我们APP首先通过service manage找到硬件服务,然后通过硬件服务一层一层的调用下去。这才是比较规范的。

那么这个过程中,驱动工程师要做的是1.最底层的驱动开发 2.硬件抽象层也要我们开发 3.硬件服务也需要我们去开发,开发完了之后还需要注册到系统当中去。

















版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MIT《计算机科学与编程导论》第七讲

Section 1 mutable L1 = [1, 2, 3] L2 = L1 L1[0] = 4 print L2 -> [4, 2, 3]  immutable a...
  • dc_726
  • dc_726
  • 2011-12-30 23:04
  • 3740

Android Studio - 基本配置

正所谓“磨刀不误砍柴工”,Android开发中最重要的利器就是Android Studio。上一章介绍了如何安装Android Studio和如何配置Android模拟器。本章主要讲解Android ...

RecyclerView实现悬浮吸顶

使用RecyclerView实现悬浮吸顶效果

Apache 使用ssl模块配置HTTPS

Web服务器在默认情况下使用HTTP,这是一个纯文本的协议。正如其名称所暗示的,纯文本协议不会对传输中的数据进行任何形式的加密。而基于HTTP的Web服务器是非常容易配置,它在安全方面有重大缺陷。任何...

编程路上,对于迷失者的一些小小建议

前几天,在半梦半醒中写了一篇《编程路上,送给处于迷茫中的你和自己》,没想到还挺受欢迎,同时收到了一些朋友的留言和感谢,意外之余也挺开心。大多人都会经历的迷茫其实这也都难免的,现在计算机技术更新那么快,...

XAMPP各个版本配置

XAMPP这集成环境也很不错 如果你的PHP代码有加密部分,而Zend Guard 5.2加密的代码不能用5.3解密, 只有下载最后一个PHP5.2版本的xampp 1.7.1,并改动...

关注CSDN程序人生公众号,轻松获得下载积分

关注公众号 在公众号里回复“”秘密“”两个字 返回 http://task.csdn.net/m/task/home?task_id=398 领取奖励 提示:根据公众号里的自动回复,完成...

Android设计模式学习之观察者模式

观察者模式在实际项目中使用的也是非常频繁的,它最常用的地方是GUI系统、订阅——发布系统等。因为这个模式的一个重要作用就是解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说,应用的UI...

xamarin android异步更新UI线程

UI线程简单了解 一些从事web开发的同学,可能对UI线程没有这个概念,没办法,毕竟“UI线程”这个概念只存在一些客户端(window客户端软件、app等)。其实android在子线程中更新UI线程,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)