安卓驱动程序架构

原创 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.硬件服务也需要我们去开发,开发完了之后还需要注册到系统当中去。

















Android系统篇之----编写简单的驱动程序并且将其编译到内核源码中

通过之前的一篇文章,我们了解了 Android中的Binder机制和远程服务调用 在这篇文章中主要介绍了Android中的应用在调用一些系统服务的时候的原理,那么本文就继续来介绍一下如何通过编译And...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2016年10月09日 19:00
  • 9790

Android 驱动程序Demo及流程

很久前就想了解驱动程序的想法,这里现做一个简单的开始,从demo做起,看到Android驱动程序的基本运行流程,这对漏洞分析、检测和挖掘都是必要的。同样,本篇基本也是自己学习过程的记录,无干货。本篇大...
  • u010651541
  • u010651541
  • 2017年07月28日 00:10
  • 425

Android专用驱动

  • 2013年10月23日 01:20
  • 1.29MB
  • 下载

Android系统篇之----编写简单的驱动程序并且将其编译到内核源码中

http://blog.csdn.net/jiangwei0910410003/article/details/52691199 通过之前的一篇文章,我们了解了 Android中的Bin...
  • zdy0_2004
  • zdy0_2004
  • 2016年10月10日 00:24
  • 1394

Android编写驱动程序案例

  • 2016年09月28日 17:40
  • 12KB
  • 下载

Android通过JNI调用驱动程序(完全解析实例)

要达到的目的:android系统中,用JAVA写界面程序,调用jni中间库提供的接口,去操作某个驱动节点,实现read,writer ioctl等操作!这对底层驱动开发人员是很重要的一个调试通道,也是...
  • brandon2015
  • brandon2015
  • 2016年08月31日 14:43
  • 1523

android app调用内核驱动的方法

该文不得作为商业用途,仅为学习积累所用,转载请注明出处:http://blog.csdn.net/callon_h/article/details/51909169 一、了解android驱...
  • u012175418
  • u012175418
  • 2016年09月23日 15:38
  • 3529

android驱动下载

  • 2010年12月17日 09:06
  • 6.1MB
  • 下载

Android 6.0中添加硬件驱动程序

1. Android Kernel代码下载 下载kernel内核 git clone https://android.googlesource.com/kernel/goldfish.git 参考:...
  • wuxiaoer717
  • wuxiaoer717
  • 2016年07月24日 16:23
  • 4882

从内核驱动到android app

了解android驱动开发。
  • Callon_H
  • Callon_H
  • 2016年07月14日 14:37
  • 2427
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安卓驱动程序架构
举报原因:
原因补充:

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