Android驱动使用JNI调用
学习Android驱动是一个漫长的过程,当然你也可以说有了Linux设备驱动开发经验学习Android驱动是很简单的,呵呵,的却如此,毕竟Android内核是跑在linux内核上,Android的应用调用的其实是linux驱动。Android Application调用Linux驱动可以这么说有两种方法,也就是两种处理的流程。
Android应用层调用Linux驱动的方式:
第一,通过在Android内核源码(不是linux内核源码)中添加HAL层、JNI层、开启系统服务,这是一个比较复杂的过程,很多标准的设备都采用这种方式设计,比如说wifi、gps、sensor等,这种调用过程看起来比较标准,但是如果作为第三方开发就会很麻烦,HAL层、JNI层,系统服务层,每层都需要编译Android内核源码,这样就会延长了产品的开发周期;第二,通过配置NDK环境,在NDK环境中直接编写JNI层,然后在Android应用层中添加类,加载JNI库即可调用设备的驱动。
现在我们以Tiny210上的LED驱动作为例子讲解如何使用NDK环境编写JNI库来调用设备的驱动程序。
一、首先是编写linux驱动程序,:
1、源码:linux-2.6.36-android\drivers\char\tiny210_leds.c
2、修改当前目录(linux-2.6.36-android\drivers\char)的kconfig,添加如下内容:
config TINY210_LEDS
tristate "LED Support for Tiny210 GPIO LEDs"
depends on CPU S5PV210
default y
help
This option enables support for LEDs connected to GPIO lines
on Tiny210 boards.
3、修改当前目录(linux-2.6.36-android\drivers\char)下的makefile文件,添加如下内容:
obj-$(CONFIG_TINY210_LEDS) += tiny210_leds.o
4、到源码目录执行make menuconfig 配置LED驱动编译进内核,系统起来就加载驱动
5、执行 make 生成zImage镜像文件