驱动操作硬件,程序操作驱动。。驱动就是抽象出的统一接口,每种硬件实现自己的驱动。
最开计算机没有驱动,程序直接串口,io,底层操作硬件。 ,但是要,a打印机,换成b打印机呢,由于硬件设备参数不一致,难道要重新修改,编译系统代码?就抽象出驱动接口,每种硬件实现自己的访问代码。。。驱动就是一个软件,访问硬件的软件。驱动就是统一的一个接口,,,这样,更换设备时候,程序只要安装相应驱动,因为驱动的访问接口是一致的,所以,不用重新编写代码,更换实现的驱动代码
驱动只是用于外部设备,是需要更换和不固定的,所以要不同的操作程序。 固定的直接写死了就行了。直接操作就可以的。不用分层,分层是为了,同样代码可以调用不同的硬件。
简言之,,驱动就是针对某种型号硬件,实现了统一抽象接口的函数代码。 驱动实现了分层的概念。。底层向上层提供统一接口,自己实现这个接口(针对特定型号硬件,返回接口定义的要求)
jni其实就是c函数库,也是一个开发环境。。就是指可以被java调用的c库, 应用操作驱动就可以操作硬件,驱动也就是函数,驱动如何与硬件交互呢?硬件在主机内存中有个映射内存,驱动程序直接操作这个内存既可以操作硬件。
只有安装了驱动,才能在系统dev文件夹中发现设备。
理论上讲,Android框架中的c库是linux应用层,这个层次是操作驱动函数的。
遍历dev的设备,找到gps设备,分析jni层既可以了,每一层就是实现一些函数。
硬件插入主机,会被系统检测到,会在内存中建立io映射,会提示安装驱动。只有驱动才能操作映射到主机内存的硬件内存,可以被应用程序使用,