安卓驱动程序架构

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

















安卓驱动程序

  • 2014年03月14日 19:41
  • 2.01MB
  • 下载

华为安卓手机驱动程序

  • 2012年11月30日 21:32
  • 3.41MB
  • 下载

Linux设备驱动程序架构分析之MMC/SD(一)

作者:刘昊昱  博客:http://blog.csdn.net/liuhaoyutz 内核版本:3.10.1   MMC MMC全称MultiMedia Card,由西门子公司和SanDisk公司19...

关于linux mmc/sd驱动程序架构

关于linux mmc/sd驱动程序架构 今天花了时间简单看了mmc/sd部门内容和代码,我觉得形式上,这个部分和i2c非常相似 系统也是分成core层,host层(对应i2c的adapter),...
  • zangcf
  • zangcf
  • 2013年04月16日 15:03
  • 6683

Linux设备驱动程序架构分析之platform(基于3.10.1内核)

作者:刘昊昱  博客:http://blog.csdn.net/liuhaoyutz 内核版本:3.10.1   一、platform bus的注册 platform bus注册是通过platform...

V4L2驱动程序架构

1 V4L2简介 video4linux2(V4L2)是Linux内核中关于视频设备的内核驱动,它为Linux中视频设备访问提供了通用接口,在Linux系统中,V4L2驱动的Video设备节...

Linux设备驱动程序架构分析之I2C Spec摘要

作者:刘昊昱  博客:http://blog.csdn.net/liuhaoyutz   1、I2C总线介绍 I2C(Inter-Integrated Circuit,内置集成电路)总线是由PHILI...

Linux设备驱动程序架构分析之SD Spec摘要

作者:刘昊昱  博客:http://blog.csdn.net/liuhaoyutz   本文是对SDSpecifications Part 1 Physical Layer Simplified S...

Android架构分析之Android驱动程序开发

作者:刘昊昱  博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 ...

关于linux mmc/sd驱动程序架构

origin:  http://blog.csdn.net/zangcf/article/details/8809028 关于linux mmc/sd驱动程序架构 今天花了时间简单看了mm...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安卓驱动程序架构
举报原因:
原因补充:

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