2013年12月9日 星期一

[Android]source code layout

bionic:
放一些lib, 讓你link到.so呼叫system call
原本是GNU library, 但是因為要open source code
所以google自己寫一個符合apache的, 這樣就不用open source code

bootable:
bootloader放這裡, u-boot...
Android稱它為USB bootloader,可與PC的fastboot溝通
\bootloader\legacy 是舊的
\bootable\bootloader\lk 是新的

\recovery 相當於Windows mobile的update loader

boot.img - 其實是kernel + 薄薄的一層user mode(RAM disk) 包含vmlinux, user process
userdata.img - NV ram非揮發性的記憶體,放一些device參數的設定,例如calibration...
system.img - (user mode)framework + 一點kernel

build:
所有make的環境, 裡面都是makefile
在這邊選用哪個toolchain

dalvik:
就是android runtime,
包含兩個folder
dalvik virtual machine: private, protect (jni_xxx)
vm: public (JNI_xxx)對外的public API
core library: JNINativeMethod 這邊的是system defined

development:
這裡會去build一些PC會用到的tool,例如
模擬器debugging,還有一些寫android AP的tool,
ddms, 相當於Windows mobile的platform builder,可以去看kernel debug, memory, register
apkbuilder, hierachyviewer, fastboot

framework:
是system server所在的地方,以及daemon的code
xxxService
system server process
有JAVA
有core library,這邊的是user defined
有C code: 1.HAL 2.HAL拿來當作daemon, 例如RIL 3.Multimedia
\cmds\ 儲存的是純C的process (daemon) 有servicemanager, surfaceflinger...

hardware:
就是HAL body
有type1, 2, 3, 有body, stub
type1(tranditional):
body - \libhardware
stub - \libhardware-legacy
type2(RIL):
body - rild
stub - reference ril(xx.so) 含AT-command,Qulcomm用的是自己寫的stub
shared memory方式,用RPC
type3(multimedia):
(body) alsa_sound .../libaudio/...
(stub) audioflinger, surfaceflinger .../msm7k/...

kernel:
vanilla香草kernel
device driver
7支spy
http://huenlil.pixnet.net/blog/post/25605797-%5B%E8%BD%89%5Dandroid-kernel-%E4%BB%8B%E7%B4%B9
http://loda.hala01.com/2011/01/android%E7%AD%86%E8%A8%98/
1.Ashmem(Android Shared Memory) 虛擬的
由Goolge 設計的一種記憶體分享、分配機制,主要用於 Google 設計給 Android 使用的 IPC Binder
http://huenlil.pixnet.net/blog/post/26662128-android-ashmem-%E7%9B%B8%E9%97%9C%E8%B3%87%E8%A8%8A
2.Binder
基於OpenBinder框架的一個驅動,用於提供Android平台的process間通訊(IPC,inter-process communication)
3.Logger

4.Low Memory Killer
相對於Linux標準OOM(Out Of Memory)機制更加靈活,它可以根據需要殺死process來釋放需要的記憶體
5.PMEM(Physical Memory) 實體的
有些device需要使用連續的memory,所以PMEM就是去做Physical Memory的管理
http://blog.csdn.net/sure00/article/details/6267208
6.Power Manager
針對嵌入式設備做了很多最佳化
7.Ram Console
他用一段Physical memory去模擬一個console,printk的時候會把message印到這塊RAM裡,最後透過/proc/輸出
http://blog.ednchina.com/bluehacker/1799392/message.aspx

external:
3-party release的AP和shared library
multimedia用的codec放這

package:
帶有UI的AP
google release有50個, 但只看到23個
其他是GMS, no source code
有一些要加入OHA協會才拿得到*.apk,例如google search, google talk, google map,

prebuild:
userimage
engimage
放toolchain G:\prebuilt\linux-x86\toolchain

system:
少量daemon放這邊, 其他在framework/base/core
/bluetooth/ 藍牙tool
/core/ minimal bootable環境 最小化可開機的環境
/extras/ low-level debugging, inspection tools
/wlan/ti TI 1251 WLAN driver and tools

在build ramdisk.img的地方

E:\system\core\rootdir\init.rc

vendor:
3-party放的
        HAL的stub

沒有留言:

張貼留言