Android和Linux作为目前主流的操作系统,无论是消费类产品还是工控领域都被广泛应用。都说Android系统脱胎于Linux系统,那么Android是不是Linux的一种呢?今天我们就来聊一聊Android和Linux系统的异同点。1、两者的共同点是Android是基于Linux内核的系统。Android和Linux系统的核心系统服务都依赖于Linux内核,如安全、内核管理、进程管理、网络栈、驱动模型等。Linux内核还作为两者硬件和软件之间的抽象层,隐藏了具体的硬件细节,为上层应用开发提供统一的服务。2、系统框架的区别Linux系统和Android从表面上看是两个不同的操作系统,但Android本质上还是一个Linux系统,只是Google对其进行了剪裁和定制。另外,相对于Linux系统,android在其Linux内核上运行了一个名为Dalvik(4.4版本后改为ART)的Java虚拟机(JVM),因此使用JAVA开发的android应用程序可以通过JAVA虚拟机运行在Android系统上.Linux应用程序是使用C/C++开发的,可以以机器码的形式运行在内核系统上。两者的系统框架不同,如图所示。3、Linux和Android底层驱动软件的区别除了Linux内核提供的通用核心驱动外,Android还增加了自己专有的内核驱动,如显示驱动、蓝牙驱动、摄像头驱动、内存卡驱动、BinderIPC驱动等,ETC。。另外,为了保护硬件厂商的知识产权,Android系统增加了一个HAL层,可以将驱动的具体实现部分提取出来,交给HAL实现,从而规避硬件开源的风险drivers,所以android驱动分为两部分。一部分,一部分写入内核,一部分写入HAL层。Android除了实现底层驱动的开发外,还需要将驱动程序按照JNI规则封装成JNI层接口,以便应用程序(JAVA程序)通过JNI调用内核驱动程序。以显示驱动Framebuffer为例,如图。Linux系统显示驱动模型Android系统显示驱动模型(1)Linux系统:Framebuffer驱动只需要编译进Linux内核,为上位机应用程序预留相应的read、write、ioctl等接口打电话。(2)Android系统:Framebuffer驱动首先将简单的硬件寄存器读写操作的驱动编译进内核,然后将具体硬件实现的驱动写入HAL层,根据JNI封装成JNI接口规格。由上位机应用程序调用。4、Linux与android应用层软件的区别但是Android应用程序是用java语言编写的,不能直接调用C语言实现的系统接口,而Linux系统可以使用C语言调用系统接口来实现与内核进行通信,所以Android系统中有一个概念叫做JNI,用来实现java和C/C++程序之间的信息交互。(一)Android应用程序如何访问Android内核驱动:1:APP—>JNI—>Android内核驱动2:APP—>硬件访问服务—>Android内核驱动(二)Linux应用程序访问linux驱动的方式1.APP—>Linux内核驱动2.APP—>C库—>Linux内核驱动
