embedded linux ,android

2010年10月27日 星期三

Android Overview

本篇文章重點在透過 Android Source Code 資料夾架構說明一些 Android 細節,包含四層架構與並以 Jollen Mokoid 為例大致介紹如何擴充 Android framework,讓大家對 Android 有系統層面的了解。

嵌入式 Linux 系統主要分成三個部份,包含 BootLoader ( 一般為 UbootKernelRootFileSystemAndoird 第一層即是修改過的 Linux Kernel,第二層以上就是一般所謂的 RootFileSystem

圖1:Android階層圖

Andoird 實驗版 SDKAndroid Source 資料夾如下
圖2. android source











  • bionicGoogle 自己開發的Libc.
  • build:Android Building System.
  • development:應用程式開發的模組及工具.
  • hardware:建立HAL的函式庫.
  • out:編譯android source得到的image產生在這裡.
  • vendor:避免與原始的source code混雜廠商開發的應用程式及framwwork擴充放這邊.
  • dalvik:Google自己開發基於register的JVM據說針對手持裝置優化過.
  • external:opensource project.
  • frameworks:android階層圖第二層與第三層code放這裡.
  • packages:android標準的應用程式.


接下來利Jollen Mokoid 專案 Overview 一下如何由底層打通到上層









Mokoid 專案是控制 dma6410l 實驗版上的 Led,資料夾裡配置了 Android.mk ( 給 compiler吃的資訊檔 ),apps ( 放自行開發的應用程式 ),dma6410xp ( 配置新的產品分支 ),frameworks ( 擴充框架透過 JNI 讓上下層溝通 ),hardware ( 硬體抽象層實作 ),driverLed Linux DriverAndroid 架構裡是不需要的。


















撰寫 Linux Driver 主要分成兩個部分,一部分是實際與硬體溝通的程式碼,另一部份是與 Linux Kernel 溝通的程式碼 ,編譯成 led.ko,所以第四層driver 就搞定了。



與硬體溝通的部份



























































與kernel溝通的部份








































































接著往上走一層第三層HAL 與 Library 的部份,透過 struct HAL_MODULE_INFO_SYMhw_module_t hw_device_t 建構 HAL,根據 Android.mk 知道這部分被編譯成 led.goldfish.so 放在 system/lib/hw 下面 。
























再往上走一層,來到第二層 framework ,這一層分層兩部份,其一為 JNI ( base/service/jni ) 的部份,被編譯成 libmokoid_runtime.so (此部份為第三層library層),另一為 Service ( base/service/java) Manager ( base/core/java ) 的部份,被編譯成 mokoid.jarService 呼叫 JNI function,而 Manager 透過 ILedService.aidl呼叫 Service function,這部份會在之後解釋,在這裡先有個概念即可 

























最後,就是最上層第四層應用程式,利用 ServiceManager.addServiceLedService 加進Android System,應用程式透過 ServiceManager.getService 抓出來使用,這部分檔案編譯成 LedTest.apk,這部份會在之後講解。




沒有留言:

張貼留言