Android驱动开发———两种模型简记

        1、NDK模型:由内核级别的驱动程序和APP组成,内核级别的驱动程序对外的接口是ioctl,而APP是由JAVA语言写的,JAVA语言并没有(或者并不支持)ioctl接口,所以内核级别的驱动程序和APP是不能直接连接(数据交换),那么就在中间增加了一层C/C++,这层C/C++支持ioctl接口,可以和内核级别的驱动程序连接,而APP的JAVA程序又可以调用C/C++,这样就连接起来了,JAVA通过JNI条用C/C++(JNI:java native interface是专门给java程序调用c/c++提供一种程序调用方法)。通过NDK这个工具将APP和第三方的一些库(C/C++)打包成apk安装包。存在问题:内核级别的驱动程序需要遵循GPL协议,而GPL协议需要开源,但是有些厂家的内核由于包含商业信息,故不完全开源,即一部分开源,一部分不开源,这样就有了另一种模型:

        2、框架模型:开源的一部分是需要遵循GPL协议的,放在内核里面,不开源的一部分就不能放在内核里面,故放在Android系统里面,即HAL,硬件抽象层,与硬件相关的代码,是不想开源的。 在硬件抽象层上面又加了一层硬件服务层,把封装好的硬件服务注册到Android系统中,那么APP通过service manager找到硬件服务层,硬件服务层找到硬件抽象层,硬件抽象层找到驱动程序。

你可能感兴趣的:(Android)