淺談Android與Linux系統的差異

最近忙於查找Linux和android平臺的資料,今天將其整理整理,根據本人拙見分享給大家。

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底層驅動軟件的差異
Android除了Linux內核具備的常用核心驅動外,還增加了自己專有的內核驅動程序,如顯示驅動、藍牙驅動、相機驅動、內存卡驅動、Binder IPC驅動等。
另外,Android系統爲了保護硬件廠商的知識產權,增加了HAL層,可將驅動具體的實現部分抽取發到HAL中去實現,從而規避了硬件驅動開源的風險,所以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++程序之間的信息交互。

(1)Android應用程序訪問Android內核驅動程序的方式:

APP—>JNI—>Android內核驅動程序
APP—>硬件訪問服務—>Android內核驅動程序
(2)Linux應用程序訪問linux驅動程序的方式

APP—> Linux內核驅動程序
APP—>C庫—>Linux內核驅動程序
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章