2014年12月24日 星期三
2014年12月10日 星期三
[轉] 使用handler.obtainMessage() 時要注意的問題
handler.obtainMessage() 的作用是從當前的Handler中獲取指定的Message以供再次使用
尤其是在監測線程中 如果不斷的new Message() 可能出現錯誤 (錯誤信息已經忘了 沒有記錄 =.=)
有5個重載的方法
- public final Message obtainMessage ()
- public final Message obtainMessage (int what)
- public final Message obtainMessage (int what, Object obj)
- public final Message obtainMessage (int what, int arg1, int arg2)
- public final Message obtainMessage (int what, int arg1, int arg2, Object obj)
what arg1 arg2 obj分別對應Message中的相應成員變量
並且這樣獲得的Message不用再重新定義相應的值 十分好用
一般來講 what是用來switch不同的操作 而其他3個參數都是定義屬性
要注意的是 具有兩個參數的方法只有一個 且第二個參數是Object 而不是arg1
並且如果在2個參數的方法中 將第二個參數填寫為本應該設置為arg1的值(int)時候 也不會報錯 因為:
1. arg1有缺省值0
2. int型可以被自動轉化為Integer
但是arg1的值卻被賦給了msg,obj 所以在Handler中的arg1值就為0了
[轉] Android 的消息隊列模型
Android 的消息隊列模型
Android是參考Windows的消息循環機制來實現Android自身的消息循環的。
Android通過Looper、Handler來實現消息循環機制,Android消息循環是針對線程的(每個線程都可以有自己的消息隊列和消息循環)。
Android系統中,Looper負責管理線程的消息隊列和消息循環。我們可以通過Loop.myLooper()得到當前線程的Looper對象,通過Loop.getMainLooper()可以獲得當前進程的主線程的Looper對象。
一個線程可以存在(當然也可以不存在)一個消息隊列和一個消息循環(Looper)。
Activity是一個UI線程,運行於主線程中,Android系統在啟動的時候會為Activity創建一個消息隊列和消息循環(Looper)。
Handler的作用是把消息加入特定的(Looper)消息隊列中,並分發和處理該消息隊列中的消息。構造Handler的時候可以指定一個Looper對象,如果不指定則利用當前線程的Looper創建。
Activity、Looper、Handler,Thread的關係如下圖所示:
Android通過Looper、Handler來實現消息循環機制,Android消息循環是針對線程的(每個線程都可以有自己的消息隊列和消息循環)。
Android系統中,Looper負責管理線程的消息隊列和消息循環。我們可以通過Loop.myLooper()得到當前線程的Looper對象,通過Loop.getMainLooper()可以獲得當前進程的主線程的Looper對象。
一個線程可以存在(當然也可以不存在)一個消息隊列和一個消息循環(Looper)。
Activity是一個UI線程,運行於主線程中,Android系統在啟動的時候會為Activity創建一個消息隊列和消息循環(Looper)。
Handler的作用是把消息加入特定的(Looper)消息隊列中,並分發和處理該消息隊列中的消息。構造Handler的時候可以指定一個Looper對象,如果不指定則利用當前線程的Looper創建。
Activity、Looper、Handler,Thread的關係如下圖所示:
一個Activity中可以創建多個工作線程或者其他的組件,如果這些線程或者組件把他們的消息放入Activity的主線程消息隊列,那麼該消息就會在主線程中處理了。
因為主線程一般負責界面的更新操作,並且Android系統中的widget不是線程安全的,所以這種方式可以很好的實現Android界面更新。在Android系統中這種方式有著廣泛的運用。
那麼一個線程怎樣把消息放入主線程的消息隊列呢?答案是通過Handle對象,只要Handler對象以主線程的Looper創建,那麼調用Handler的sendMessage等接口,將會把消息放入隊列都將是放入主線程的消息隊列。並且將會在Handler主線程中調用該handler的handleMessage接口來處理消息。
更多Android消息隊列的信息請參看: http://my.unix-center.net/~Simon_fu/?p=652
下面這個圖從另外一個角度描述了他們的關係:
2014年12月2日 星期二
2014年11月25日 星期二
[轉] kernel build system探索
vmlinux是如何煉成的-- kernel makefile
引子
kern e l的ma kefi l e包含的 內容還真 是多,我 就是想看 看要是我 自己添加 一個目錄 編譯到內 核裡,要 怎麼做 。
就是這麼 個不起眼 的實驗, 引發了一 堆的故事 。
最簡單的例子
添加 一個目錄,叫test, 添加了test.c 和 Makefile。
文件內容很簡單,如下。
cat Makefile
#
# Makefile for the linux kernel makefile experiment.
#
# Makefile for the linux kernel makefile experiment.
#
obj-y := test.o
cat test.c
#include <linux/export.h>
int test_global = 0;
然後在主 Makefile中 添加
-core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
+core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ test/
+core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ test/
最後 make test
make[1]: Nothing to be done for `all'.
HOSTCC arch /x86 /too ls/r eloc s
CHK incl ude/ linu x/ve rsio n.h
CHK incl ude/ gene rate d/ut srel ease .h
CC kernel/bounds.s
GEN incl ude/ gene rate d/bo unds .h
CC arch /x86 /ker nel/ asm- offs ets. s
GEN incl ude/ gene rate d/as m-of fset s.h
CALL scri pts/ chec ksys call s.sh
CC test/test.o
LD test/built-in.o
HOSTCC arch
CHK incl
CHK incl
CC kernel/bounds.s
GEN incl
CC arch
GEN incl
CALL scri
CC test/test.o
LD test/built-in.o
恩,不錯,可以了。
vmlinux是如何煉成的-- kernel makefile
人總是不 知足的, 我又開始 好奇,這 個bui l d的過程 究竟是怎 麼個回事 。
好吧,我 們知 道mak e後,最 終的結果 叫vml inu x,那我 們就找找 這個神奇 的東西是 怎 麼
產生的吧。
vmlinux-deps := $(KBUILD_LDS) $(KB UILD _VML INUX _INI T) $(KB UILD _VML INUX _MAI N)
$(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
vmlinux: scri pts/ link -vml inux .sh $(vmlinux-deps) FORCE
ifdef CONF IG_H EADE RS_C HECK
$(Q)$(MAKE) -f $(srctree)/Makefile headers_check
endif
ifdef CONFIG_SAMPLES
$(Q)$(MAKE) $(build)=samples
endif
ifdef CONFIG_BUILD_DOCSRC
$(Q)$(MAKE) $(bu ild) =Doc umen tati on
endif
+$(call if_c hang ed,l ink- vmli nux)
vmlinx 基於上面三個目標, 而vmlinux-deps又基於 $(vmlinux-dirs)。 恩,好複雜。
$(Q)$(MAKE) -f $(srctree)/Makefile headers_check
endif
ifdef CONFIG_SAMPLES
$(Q)$(MAKE) $(build)=samples
endif
ifdef CONFIG_BUILD_DOCSRC
$(Q)$(MAKE) $(bu
endif
+$(call if_c
vmlinx 基於上面三個目標, 而vmlinux-deps又基於 $(vmlinux-dirs)。 恩,好複雜。
那來看 看vml inux -dir s都包含 什麼吧。
在主Makefile中看到下面的內容。
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ test/
vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
$(net-y) $(net-m) $(libs-y) $(libs-m)))
vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
$(net-y) $(net-m) $(libs-y) $(libs-m)))
$(vmlinux-dirs): prepare scripts
$(Q)$(MAKE) $(build)=$@
$(Q)$(MAKE) $(build)=$@
恩, 我們 把vml inux -dir s的東東 打印出來 看看。
vmlinux-dris: init usr arch/x86 kernel mm fs ipc security crypto block test drivers sound firmware arch/x86/pci arch/x86/power arch/x86/video arch/x86/oprofile net lib arch/x86/lib
這樣,你是不是明白點了呢。 這些都 是ker ne l源代碼 中子目錄 。也就 是ker ne l將要挨 個 的
進入每個子目錄,編譯~。
那最後這 個vml inu x是怎麼 生成的呢 ? 怎麼樣將 每個目錄 下生成的 模塊鏈接 成一 個vml inu x的文件 的呢 ?
看到上 面vml inu x目標中 ,最後一 個命令 :
+$(call if_c hang ed,l ink- vmli nux)
哦,原來 是調用 了cmd _lin k-vm linu x。這個 命令就定 義在 主Mak efil e中 。
cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux)
打出來看看,長這樣。
/bin/bash $< ld -m elf_i386 --emit-relocs --build-id
$< 表示第一 個以來目 標,那麼 在vml inu x目標中 ,第一個 目標是 scri pts/ link -vml inux .sh, 展開後就成為。
/bin/bash scri pts/ link -vml inux .sh ld -m elf_i386 --emit-relocs --build-id
額,原來是又調用了一個腳本。。。 好吧, 再進去看看。 發現這麼個東東
info LD vmlinux
vmlinux_link "${kallsymso}" vmlinux
vmlinux_link "${kallsymso}" vmlinux
vmlinux_link()
{
local lds= "${o bjtr ee}/ ${KB UILD _LDS }"
if [ "${SRCARCH}" != "um" ]; then
${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
-T ${lds} ${KB UILD _VML INUX _INI T} \
--start-group ${KB UILD _VML INUX _MAI N} --end-group ${1}
else
${CC} ${CFLAGS_vmlinux} -o ${2} \
-Wl,-T,${lds} ${KB UILD _VML INUX _INI T} \
-Wl ,--s tart -gro up \
${KB UILD _VML INUX _MAI N} \
-Wl ,--e nd-g roup \
-lutil ${1}
rm -f linux
fi
}
local lds=
if [ "${SRCARCH}" != "um" ]; then
${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2}
-T ${lds} ${KB
--start-group ${KB
else
${CC} ${CFLAGS_vmlinux} -o ${2}
-Wl,-T,${lds} ${KB
-Wl
${KB
-Wl
-lutil ${1}
rm -f linux
fi
}
好吧,原來是調用了這個函數。。。 打出來看看吧。
ld -m elf_i386 --emit-relocs --build-id -o vmlinux -T arch /x86 /ker nel/ head _32. o arch /x86 /ker nel/ head 32.o arch /x86 /ker nel/ head .o init/built-in.o --start-group usr/built-in.o arch/x86/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o test/built-in.o lib/lib.a arch/x86/lib/lib.a lib/built-in.o arch /x86 /lib /bui lt-i n.o drivers/built-in.o sound/built-in.o firmware/built-in.o arch /x86 /pci /bui lt-i n.o arch /x86 /pow er/b uilt -in. o arch /x86 /vid eo/b uilt -in. o net/built-in.o --end-group .tmp_kallsyms2.o
恩,原來真相是這樣的。 最後把這 麼多東西 鏈接起來 成 為vml inu x。 看到我們 添加 的tes t目錄了 麼,它也 生成了一 個bui lt-i n. o,最後 鏈接到 了vml inu x中 。
$ nm vmlinux | grep test_global
c198d284 B test_global
啊哦,還真有這個symbol!
啊哦,還真有這個symbol!
神秘的built-in.o
在最後的 鏈接過程 中,我們 可以看到 ,幾乎所 有的依賴 條件中, 都會生成 一 個bui lt-i n. o的文件 。 那這個文件,是怎麼生成的呢?
$(vmlinux-dirs): prepare scripts
$(Q)$(MAKE) $(build)=$@
$(Q)$(MAKE) $(build)=$@
從這個規 則中可以 看到 ,vml inux -di r目標是 通過下面 的mak e來生成 的。展開 一下看看 。 這 個bui l d在sc ript s/Kb uild .inc lud e中 。
make -f scri pts/ Make file .bui ld obj=$@
對應到test目錄 那就是
make -f scri pts/ Make file .bui ld obj=test
這麼看來 ,就要進 到scr ipts /Mak efil e.bu il d文件了 。
PHONY := __build
__build:
__build:
__build: $(if $(KB UILD _BUI LTIN ),$ (bui ltin -tar ge t) $(lib-target) $(extra-y)) \
$(if $(KB UILD _MOD ULES ),$( obj- m) $(modorder-target)) \
$(subdir-ym) $(always)
@:
$(subdir-ym) $(always)
@:
__bu il d是這 個mak efil e的第一 個目標, 也是默認 的目標。 這裡面藏 著一 個bui ltin -tar ge t,看著 很像,再 搜搜 。
ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(subdir-m) $(lib-target)),)
builtin-target := $(obj)/built-in.o
endif
endif
恩 原來這個 就是這麼 多 叫bui lt-i n. o的原因 。但是要 生 成bui t-in . o,必須 要以上的 這些變量 不能全部 為空 。
那再來看 看編譯這 個bui lt-i n. o的規則 是什 麼
quie t_cm d_li nk_o _tar get = LD $@
# If the list of objects to link is empty, just create an empty built-in.o
cmd_link_o_target = $(if $(strip $(obj-y)),\
$(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
$(cm d_se cana lysi s),\
rm -f $@; $(AR) rcs$ (KBU ILD_ ARFL AGS) $@)
$(builtin-target): $(obj-y) FORCE
$(call if_c hang ed,l ink_ o_ta rget )
targets += $(builtin-target)
# If the list of objects to link is empty, just create an empty built-in.o
cmd_link_o_target = $(if $(strip $(obj-y)),\
$(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
$(cm
rm -f $@; $(AR) rcs$
$(builtin-target): $(obj-y) FORCE
$(call if_c
targets += $(builtin-target)
恩,基本 明白了, 就是 當obj - y的內容 不為空, 那麼就 用l d來鏈接 成一 個bui lt-i n. o。
但是我試 了一下, 如果沒 有obj - y那麼, 也會生成 一 個bui lt-i n. o,但是 用的是別 的命令 。
如在i386下,用的是
rm -f test/built-in.o; ar rcsD test/built-in.o
不知道這個是什麼高級玩意。
好了,到 此為止, 基本上一 個最上層 的框架有 了一個概 念。 那就先休息一下~
一切盡在掌握 -- kconfig 配置系統
kcon fi g是個強 大的工具 ,如果 說mak efil e制定了 完美的編 譯依賴關 系,那 麼kco nfi g制定了 完美的模 塊的依賴 關係 。
源頭
在根目錄 下有 個Kco nfi g文件, 這就是一 切故事的 起源 。
整個文件就沒幾行,打出來看一眼。
#
# For a description of the syntax of this configuration file,
# see Docu ment atio n/kb uild /kco nfig -lan guag e.tx t.
#
mainmenu "Linux/$ARCH $KERNELVERSION Kernel Configuration"
config SRCARCH
string
option env="SRCARCH"
# see Docu
#
mainmenu "Linux/$ARCH $KERNELVERSION Kernel Configuration"
config SRCARCH
string
option env="SRCARCH"
source "arc h/$S RCAR CH/K conf ig"
第一行就是輸出個內核版本號。
第二行應該是配置一個環境變量? 不知道,以後再來看。
第三行很 重要,這 個是包含 了一 個arc h目錄下 的Kco nfi g文件 。
當你打開
我們運行make menuconfig, 你可以看到,這個文件就是make menuconfig中顯示的東西。
一切都變 得明朗起 來,你是 否有種太 極生兩儀 ,兩儀生 四象,四 象生八卦 的神奇感 覺
剪不斷,理還亂
kern e l中這麼 多的模塊 之間的依 賴關係, 簡直就是 剪不斷,理還亂。
幸好 在Kco nfi g文件中 ,我們可 以找到一 點蛛絲馬 跡 。
依賴 depends on
這個關鍵 字表示了 在某些配 置選中後 ,本配置 項才會顯 示 。
在 driv er/p ci/K conf i g文件中 有 ,
config PCI_MSI
bool "Message Signaled Interrupts (MSI and MSI-X)"
depends on PCI
depends on ARCH_SUPPORTS_MSI
可以發現 ,要配 置MS I必須要 先支 持PC I。 恩這個道理咱都懂, 連PCI都沒有,哪裡來的MSI啊。
bool "Message Signaled Interrupts (MSI and MSI-X)"
depends on PCI
depends on ARCH_SUPPORTS_MSI
可以發現
反向依賴 select
這個關鍵 字表示了 當本配置 項選中後 ,其他的 配置項也 需要選中 。
在 arch /x86 /Kco nfi g文件中 有 :
config HIGHMEM64G
bool "64GB"
depends on !M386 && !M486
select X86_PAE
---help---
Select this if you have a 32-bit processor and more than 4
gigabytes of physical RAM.
其實這個 我也不懂 ,看上去 就是說要 支持更多 的物理內 存,那麼 在x8 6的平台 上,就要 選 中X86 _PA E。
bool "64GB"
depends on !M386 && !M486
select X86_PAE
---help---
Select this if you have a 32-bit processor and more than 4
gigabytes of physical RAM.
其實這個
看上去是這麼回事兒。
革命尚未成功,同志仍需努力
好了,我 要記錄的 東西就到 這裡了。 突然這麼 嘎然而止 ,估計大 家一定意 猶未盡 。
但是事實 就是這樣 ,基本 的kco nfi g語法大 家可以在 Docu ment /kbu ild/ kcon fig- lang uage .tx t中找到 。
就不用我在這裡搬出來照抄了。
kern e l模塊之 間的關聯 又怎能是 我這樣的 初學者所 能理解, 不能理解 又豈能講 得清楚 。
這裡只是 給大家一 個入口, 讓大家能 夠進一步 的 在ker ne l的海洋 中探索。 話說,授 之以魚不 如授之以 漁嘛 。
要讓linux kern e l更好的 發揮作用 ,讓更多 的人參與 這個項目 ,幫助更 多的人, 還有很長 的路要走 。
革命尚未成功,同志仍需努力。
MTK代碼目錄結構
1、android
|-- a、bionic - bionic C庫
|-- b、bootable - 啟動引導相關代碼
|-- c、build - 存放系統編譯規則及generic等基礎開發包配置
|-- d、cts - Android兼容性測試套件標準
|-- e、dalvik - dalvik JAVA虛擬機
|-- f、development - 應用程序開發相關
|-- g、external - android使用的一些開源的模組
|-- h、frameworks - 核心框架——java及C++語言
|-- i、hardware - 主要保護硬解適配層HAL代碼
|-- j、out - 編譯完成後的代碼輸出於此目錄
|-- k、packages - 應用程序包
|-- l、prebuilt - x86和arm框架下預編譯的一些資源
|-- m、sdk - sdk及模擬器
|-- n、system - 文件系統庫,應用及組件——C語言
|-- o、vendor - 廠家定製代碼
2、bionic目錄
|-- (1)、libc - C庫
| |-- a、arch-arm - ARM框架,包含系統調用彙編實現
| |-- b、arch-sh -
| |-- c、arch-x86 - x86框架,包含系統調用彙編實現
| |-- d、bionic - 由C實現的功能,框架無關
| |-- e、docs - 文檔
| |-- f、include - 頭文件
| |-- g、inet -
| |-- h、kernel - Linux內核中的一些頭文件
| |-- i、netbsd -
| |-- j、private - 一些私有的頭文件
| |-- k、regex -
| |-- l、stdio - stdio實現
| |-- m、stdlib - stdlib實現
| |-- n、string - string函數實現
| |-- o、tools - 幾個工具
| |-- p、tzcode - 區時相關代碼
| |-- q、unistd - unistd 實現
| |-- r、wchar -
| |-- s、zoneinfo - 區時信息
|-- (2)、libdl - libdl實現,dl是動態鏈接,提供訪問動態鏈接庫的功能
| |-- a、arch-sh -
|-- (3)、libm - libm數學庫的實現
| |-- a、alpha - alpha框架
| |-- b、amd64 - amd64框架
| |-- c、arm - arm框架
| |-- d、bsdsrc - bsd的源碼
| |-- e、i386 - i386框架
| |-- f、i387 - i387框架
| |-- g、ia64 - ia64框架
| |-- h、include - 頭文件
| |-- i、man - 數學函數,後綴名為.3,一些為freeBSD的庫文件
| |-- j、powerpc - powerpc框架
| |-- k、sh -
| |-- l、sparc64 - spare64框架
| |-- m、src - 源代碼
|-- (4)、libstdc++ - libstdc++ C++實現庫
| |-- a、include - 頭文件
| |-- b、src - 源代碼
|-- (5)、libthread_db - 多線程程序的調試器庫
| |-- a、inckude - 頭文件
|-- (5)、linker- 動態連接器
| |-- a、arch - 支持arm和x86兩種框架
3、bootable目錄
|-- (1)、bootloader - 適合各種bootlader的通用代碼
| |-- a、legacy - 估計不能直接使用,可以參考
| |-- arch_armv6 - V6框架,幾個簡單的彙編文件
| |-- arch_msm7k - 高通7k處理器框架的幾個基本驅動
| |-- include - 通用頭文件和高通7k框架頭文件
| |-- libboot - 奇洞窟,都寫得很簡單
| |-- libc - 一些常用的C函數
| |-- nandwrite - nandwrite函數實現
| |-- usbloader - usbloader實現
| |-- b、uboot -
|-- (2)、diskinstaller - android鏡像打包器,x86可生產iso
| |-- a、deitdisklbl -
| |-- b、libdiskconfig -
|-- (3)、recovery - 系統恢複相關
| |-- a、applypatch -
| |-- b、edify - 升級腳本使用的edify腳本語言
| |-- c、etc - init.rc回覆腳本
| |-- d、minui - 一個簡單的UI
| |-- e、minzip - 一個簡單的壓縮工具
| |-- f、mtdutils - mtd工具
| |-- g、res - 資源
| |-- images - 一些圖片
| |-- h、sec -
| |-- i、testdata -
| |-- j、tools - 工具
| |-- ota - OTA Over The Air Updates升級工具
| |-- k、updater - 升級器
4、build目錄
|-- (1)、core - 核心編譯規則
|-- (2)、libs -
| |-- a、host - 主機端庫,有android「cp」功能替換
|-- (3)、target - 目標機編譯對象
| |-- a、board - 開發平台
| |-- generic_x86 - 通用
| |-- mt6516_evb[QVGA] -
| |-- sim -
| |-- b、product - 開發平台對應的編譯規則
| |-- security - 密鑰相關
|-- (4)、toools - 編譯中主機使用的工具及腳本
| |-- a、acp - Acdroid「acp」Command
| |-- b、apicheck - api檢查工具
| |-- c、apriori - 預鏈接工具
| |-- d、atree - tree工具
| |-- e、bin2asm - bin轉換為asm工具
| |-- f、check_prereq - 檢查編譯時間戳工具
| |-- g、droiddoc -
| |--h、fs_config -
| |-- i、fs_get_stats - 獲取文件系統狀態
| |-- j、iself - 判斷是否ELF格式
| |-- k、isprelinked - 判斷是否prelinked
| |-- l、kcm - 按鍵相關
| |-- m、lsd - List symbol dependencies
| |-- n、releasetools - 生成鏡像的工具及腳本
| |-- o、rgb2565 - rgb轉換為565
| |-- p、singapk - apk簽名工具
| |-- q、soslim - strip工具
| |-- r、zipalign - zip archibe alignment tool
5、dalvik目錄 dalvik虛擬機
|-- (1)、dalvikvm - main.c的目錄
|-- (2)、dexdump - dex反彙編
|-- (3)、dexlist - List all methods in all concrete classes in a DEX file
|-- (4)、dexopt - 預驗證與優化
|-- (5)、docs - 文檔
|-- (6)、dvz - 和zygote相關的一個命令
|-- (7)、dx - dx工具,將多個java轉換為dex
|-- (8)、hit - java語言寫成
|-- (9)、libdex - dex的庫
|-- (10)、libnativehelper -
|-- (11)、tests - 測試代碼
|-- (12)、tools - 工具
|-- (13)、vm -虛擬機實現
6、development目錄 (開發需要的一些例程及工具)
|-- (1)、apps - 一些核心應用程序
| |-- a、BluetoothDebug - 藍牙調試程序
| |-- b、BuildWidget -
| |-- c、CustomLocale - 自定義區域設置
| |-- d、Development - 開發
| |-- e、Fallback - 和語言相關的一個程序
| |-- f、FontLab - 字庫
| |-- g、GestureBuilder - 手勢運動
| |-- h、GraphicsLab -
| |-- i、launchperf -
| |-- j、NinePatchLab -
| |-- k、OBJViewer - OBJ查看器
| |-- l、SdkSetup - SDK安裝器
| |-- m、SpareParts - 高級設置
| |-- n、Term - 遠程登錄
|-- (2)、build - 編譯腳本模板
|-- (3)、cmds - 有個monkey工具
|-- (4)、data - 配置數據
|-- (5)、docs - 文檔
|-- (6)、host - 主機端SUB驅動等
|-- (7)、ide - 集成開發環境
|-- (8)、ndk - 本地開發套件 ——C語言開發套件
|-- (9)、pdk - Plug Development Kit
|-- (10)、samples - 例程
| |-- a、AccelermoeterPlay -
| |-- b、AccessibilityService -
| |-- c、Alarm -
| |-- d、AliasActivity -
| |-- e、ApiDemos - API掩飾程序
| |-- f、BackupRestore -
| |-- g、BasicGLSurfaceView -
| |-- h、BluetoothChat - 藍牙聊天
| |-- i、BrowserPlugin - 瀏覽器插件
| |-- j、BusinessCard - 商業卡
| |-- k、Compass - 指南針
| |-- l、ContactManager - 了聯繫人管理器
| |-- m、CrossCompatibility -
| |-- n、CubeLiveWallpaper - 動態壁紙的一個簡單例程
| |-- o、FixedGridLayout - 佈局
| |-- p、GlobalTime - 全球時間
| |-- q、HeavyWeight -
| |-- r、HelloActivity - hello
| |-- s、Home - Home
| |-- t、JetBoy - jetBoy遊戲
| |-- u、LunarLander -
| |-- v、MailSync - 右鍵同步
| |-- w、MultiResolution -多分辨路
| |-- x、MySampleRss - RSS
| |-- y、NFCDemo -
| |-- z、Obb -
| |-- aa、RSSReader - RSS閱讀器
| |-- bb、SampleSyncAdapter -
| |-- cc、SearchableDictionary - 目錄搜索
| |-- dd、SimpleJNI - JNI例程
| |-- ee、SipDemo -
| |-- ff、SkeletonApp - 空殼APP
| |-- gg、Snake - Snake程序
| |-- hh、SoftKeyboard - 軟鍵盤
| |-- ii、Spinner -
| |-- jj、SpinnerTest -
| |-- kk、TicTacToeLib -
| |-- ll、TicTacToeMain -
| |-- mm、VoiceRecognitionService -
| |-- nn、Wiktionary -
| |-- oo、WiktionarySimple -
|-- (11)、scripts - 腳本
|-- (12)、sdk - sdk配置
|-- (13)、sdk_overlay -
|-- (14)、simulator -
|-- (15)、testrunner -
|-- (16)、tools - 工具
|-- (17)、tutorials -
7、external目錄
|-- (1)、apache-http - 網頁服務器
|-- (1)、astl - a slimmed-down vesion of the regular C++ STL
|-- (1)、bison - 自動生成語法分析器
|-- (2)、blisrc -
|-- (3)、blktrace -
|-- (4)、bluetooth - 藍牙相關,協議棧
|-- (5)、bouncycastle -
|-- (6)、bsdiff - diff工具
|-- (7)、bzip2 - 壓縮工具
|-- (8)、chromium -
|-- (9)、clearsilver - html模板系統
|-- (10)、dbus - 低延時,低開銷,高可用性的IPC機制
|-- (11)、dhcpcd -DHCP服務
|-- (12)、dnsmasq -
|-- (13)、e2fsprogs - EXT2文件系統工具
|-- (14)、easymock -
|-- (15)、elfcopy - 複製ELF的工具
|-- (16)、elfutils - ELF工具
|-- (17)、embunit - Embedded Unit Project
|-- (18)、emma - java代碼覆蓋統計工具
|-- (19)、esd - Enlightended Sound Daemon,將多種音頻流混合在一個設備上播放
|-- (20)、expat -
|-- (21)、fdlibm - Freely Distributable LIBM
|-- (22)、freetype - 字體
|-- (23)、fsck_msdos - dos文件系統檢查工具
|-- (24)、genext2fs -
|-- (25)、giflib - gif庫
|-- (26)、grub - GNU GRUB,the GRand Unified Bootloader
|-- (27)、gtest - Google C++ Testing Framework
|-- (28)、guava -
|-- (29)、icu4c - ICU(International Component for )
|-- (30)、iproute2 -
|-- (31)、ipsec-tools - this package provides a way to use the native IPsec functionality
|-- (32)、iptables - 防火牆
|-- (33)、jdiff - generate a re[ort describing the difference between two public Java APIs
|-- (34)、jhead - jpeg頭部信息工具
|-- (35)、jpeg - jpeg庫
|-- (36)、jsr305 -
|-- (37)、junit - JUnit是一個java元以內的單元測試框架
|-- (38)、kernel-headers - 內核的一些頭文件
|-- (39)、libffi - a foreign function interface library
|-- (40)、libgsm -
|-- (41)、libnfc-nxp -
|-- (42)、libpcap - 網絡數據包獲取函數
|-- (43)、libpng - png庫
|-- (44)、libvpx -
|-- (45)、libxml2 - xml解析庫
|-- (46)、mtpd - 命令
|-- (47)、netcat - simple Unix utility which reads and writes dataacross network connections
|-- (48)、netperf - 網絡性能測試工具
|-- (49)、nenen - 看代碼和JNI相關
|-- (50)、nist-sip -
|-- (1)、oauth -
|-- (1)、opencore - 多媒體框架
|-- (51)、openssl - SSL加密相關
|-- (52)、oprofile - Linux內核支持的一種性能分析機制
|-- (53)、ping - ping命令
|-- (54)、ppp - ppps撥號命令
|-- (55)、proguard - Java class fileshrinker,optimizer,obfuscator,and preverfier
|-- (56)、protobuf - a flexible,efficient,automated mechanism for serializing structured data
|-- (57)、qemu - arm模擬器
|-- (58)、quake -
|-- (59)、safe-iop - functions for performing sage integer operations
|-- (60)、skia - skia圖形引擎
|-- (61)、skia_asm -
|-- (62)、sonivox - sole MIDI solution for Google Android Mobile Phone Platform
|-- (63)、speex - Speex編/解碼API的使用(libspeex)
|-- (64)、srec - Nuance公司提供的開源連續非特定人語音識別
|-- (65)、stlport -
|-- (66)、strace - trace工具
|-- (67)、svox - Embedded Text-to-Speech
|-- (68)、tagsoup - 一個Java開發符合SAX的HTML解析器
|-- (69)、tcpdump - 抓TCP包的軟件
|-- (70)、tinyxml - a simple,small,C++ XML parser
|-- (71)、v8 -
|-- (72)、webkit - 瀏覽器核心
|-- (73)、wpa_supplicant - 無限網卡管理
|-- (74)、wpa_supplicant_6 -
|-- (75)、xmlwriter - XML編輯工具
|-- (76)、yaffs2 - yaffs文件系統
|-- (77)、zlib - a general purpose data compression library
|-- a、bionic - bionic C庫
|-- b、bootable - 啟動引導相關代碼
|-- c、build - 存放系統編譯規則及generic等基礎開發包配置
|-- d、cts - Android兼容性測試套件標準
|-- e、dalvik - dalvik JAVA虛擬機
|-- f、development - 應用程序開發相關
|-- g、external - android使用的一些開源的模組
|-- h、frameworks - 核心框架——java及C++語言
|-- i、hardware - 主要保護硬解適配層HAL代碼
|-- j、out - 編譯完成後的代碼輸出於此目錄
|-- k、packages - 應用程序包
|-- l、prebuilt - x86和arm框架下預編譯的一些資源
|-- m、sdk - sdk及模擬器
|-- n、system - 文件系統庫,應用及組件——C語言
|-- o、vendor - 廠家定製代碼
2、bionic目錄
|-- (1)、libc - C庫
| |-- a、arch-arm - ARM框架,包含系統調用彙編實現
| |-- b、arch-sh -
| |-- c、arch-x86 - x86框架,包含系統調用彙編實現
| |-- d、bionic - 由C實現的功能,框架無關
| |-- e、docs - 文檔
| |-- f、include - 頭文件
| |-- g、inet -
| |-- h、kernel - Linux內核中的一些頭文件
| |-- i、netbsd -
| |-- j、private - 一些私有的頭文件
| |-- k、regex -
| |-- l、stdio - stdio實現
| |-- m、stdlib - stdlib實現
| |-- n、string - string函數實現
| |-- o、tools - 幾個工具
| |-- p、tzcode - 區時相關代碼
| |-- q、unistd - unistd 實現
| |-- r、wchar -
| |-- s、zoneinfo - 區時信息
|-- (2)、libdl - libdl實現,dl是動態鏈接,提供訪問動態鏈接庫的功能
| |-- a、arch-sh -
|-- (3)、libm - libm數學庫的實現
| |-- a、alpha - alpha框架
| |-- b、amd64 - amd64框架
| |-- c、arm - arm框架
| |-- d、bsdsrc - bsd的源碼
| |-- e、i386 - i386框架
| |-- f、i387 - i387框架
| |-- g、ia64 - ia64框架
| |-- h、include - 頭文件
| |-- i、man - 數學函數,後綴名為.3,一些為freeBSD的庫文件
| |-- j、powerpc - powerpc框架
| |-- k、sh -
| |-- l、sparc64 - spare64框架
| |-- m、src - 源代碼
|-- (4)、libstdc++ - libstdc++ C++實現庫
| |-- a、include - 頭文件
| |-- b、src - 源代碼
|-- (5)、libthread_db - 多線程程序的調試器庫
| |-- a、inckude - 頭文件
|-- (5)、linker- 動態連接器
| |-- a、arch - 支持arm和x86兩種框架
3、bootable目錄
|-- (1)、bootloader - 適合各種bootlader的通用代碼
| |-- a、legacy - 估計不能直接使用,可以參考
| |-- arch_armv6 - V6框架,幾個簡單的彙編文件
| |-- arch_msm7k - 高通7k處理器框架的幾個基本驅動
| |-- include - 通用頭文件和高通7k框架頭文件
| |-- libboot - 奇洞窟,都寫得很簡單
| |-- libc - 一些常用的C函數
| |-- nandwrite - nandwrite函數實現
| |-- usbloader - usbloader實現
| |-- b、uboot -
|-- (2)、diskinstaller - android鏡像打包器,x86可生產iso
| |-- a、deitdisklbl -
| |-- b、libdiskconfig -
|-- (3)、recovery - 系統恢複相關
| |-- a、applypatch -
| |-- b、edify - 升級腳本使用的edify腳本語言
| |-- c、etc - init.rc回覆腳本
| |-- d、minui - 一個簡單的UI
| |-- e、minzip - 一個簡單的壓縮工具
| |-- f、mtdutils - mtd工具
| |-- g、res - 資源
| |-- images - 一些圖片
| |-- h、sec -
| |-- i、testdata -
| |-- j、tools - 工具
| |-- ota - OTA Over The Air Updates升級工具
| |-- k、updater - 升級器
4、build目錄
|-- (1)、core - 核心編譯規則
|-- (2)、libs -
| |-- a、host - 主機端庫,有android「cp」功能替換
|-- (3)、target - 目標機編譯對象
| |-- a、board - 開發平台
| |-- generic_x86 - 通用
| |-- mt6516_evb[QVGA] -
| |-- sim -
| |-- b、product - 開發平台對應的編譯規則
| |-- security - 密鑰相關
|-- (4)、toools - 編譯中主機使用的工具及腳本
| |-- a、acp - Acdroid「acp」Command
| |-- b、apicheck - api檢查工具
| |-- c、apriori - 預鏈接工具
| |-- d、atree - tree工具
| |-- e、bin2asm - bin轉換為asm工具
| |-- f、check_prereq - 檢查編譯時間戳工具
| |-- g、droiddoc -
| |--h、fs_config -
| |-- i、fs_get_stats - 獲取文件系統狀態
| |-- j、iself - 判斷是否ELF格式
| |-- k、isprelinked - 判斷是否prelinked
| |-- l、kcm - 按鍵相關
| |-- m、lsd - List symbol dependencies
| |-- n、releasetools - 生成鏡像的工具及腳本
| |-- o、rgb2565 - rgb轉換為565
| |-- p、singapk - apk簽名工具
| |-- q、soslim - strip工具
| |-- r、zipalign - zip archibe alignment tool
5、dalvik目錄 dalvik虛擬機
|-- (1)、dalvikvm - main.c的目錄
|-- (2)、dexdump - dex反彙編
|-- (3)、dexlist - List all methods in all concrete classes in a DEX file
|-- (4)、dexopt - 預驗證與優化
|-- (5)、docs - 文檔
|-- (6)、dvz - 和zygote相關的一個命令
|-- (7)、dx - dx工具,將多個java轉換為dex
|-- (8)、hit - java語言寫成
|-- (9)、libdex - dex的庫
|-- (10)、libnativehelper -
|-- (11)、tests - 測試代碼
|-- (12)、tools - 工具
|-- (13)、vm -虛擬機實現
6、development目錄 (開發需要的一些例程及工具)
|-- (1)、apps - 一些核心應用程序
| |-- a、BluetoothDebug - 藍牙調試程序
| |-- b、BuildWidget -
| |-- c、CustomLocale - 自定義區域設置
| |-- d、Development - 開發
| |-- e、Fallback - 和語言相關的一個程序
| |-- f、FontLab - 字庫
| |-- g、GestureBuilder - 手勢運動
| |-- h、GraphicsLab -
| |-- i、launchperf -
| |-- j、NinePatchLab -
| |-- k、OBJViewer - OBJ查看器
| |-- l、SdkSetup - SDK安裝器
| |-- m、SpareParts - 高級設置
| |-- n、Term - 遠程登錄
|-- (2)、build - 編譯腳本模板
|-- (3)、cmds - 有個monkey工具
|-- (4)、data - 配置數據
|-- (5)、docs - 文檔
|-- (6)、host - 主機端SUB驅動等
|-- (7)、ide - 集成開發環境
|-- (8)、ndk - 本地開發套件 ——C語言開發套件
|-- (9)、pdk - Plug Development Kit
|-- (10)、samples - 例程
| |-- a、AccelermoeterPlay -
| |-- b、AccessibilityService -
| |-- c、Alarm -
| |-- d、AliasActivity -
| |-- e、ApiDemos - API掩飾程序
| |-- f、BackupRestore -
| |-- g、BasicGLSurfaceView -
| |-- h、BluetoothChat - 藍牙聊天
| |-- i、BrowserPlugin - 瀏覽器插件
| |-- j、BusinessCard - 商業卡
| |-- k、Compass - 指南針
| |-- l、ContactManager - 了聯繫人管理器
| |-- m、CrossCompatibility -
| |-- n、CubeLiveWallpaper - 動態壁紙的一個簡單例程
| |-- o、FixedGridLayout - 佈局
| |-- p、GlobalTime - 全球時間
| |-- q、HeavyWeight -
| |-- r、HelloActivity - hello
| |-- s、Home - Home
| |-- t、JetBoy - jetBoy遊戲
| |-- u、LunarLander -
| |-- v、MailSync - 右鍵同步
| |-- w、MultiResolution -多分辨路
| |-- x、MySampleRss - RSS
| |-- y、NFCDemo -
| |-- z、Obb -
| |-- aa、RSSReader - RSS閱讀器
| |-- bb、SampleSyncAdapter -
| |-- cc、SearchableDictionary - 目錄搜索
| |-- dd、SimpleJNI - JNI例程
| |-- ee、SipDemo -
| |-- ff、SkeletonApp - 空殼APP
| |-- gg、Snake - Snake程序
| |-- hh、SoftKeyboard - 軟鍵盤
| |-- ii、Spinner -
| |-- jj、SpinnerTest -
| |-- kk、TicTacToeLib -
| |-- ll、TicTacToeMain -
| |-- mm、VoiceRecognitionService -
| |-- nn、Wiktionary -
| |-- oo、WiktionarySimple -
|-- (11)、scripts - 腳本
|-- (12)、sdk - sdk配置
|-- (13)、sdk_overlay -
|-- (14)、simulator -
|-- (15)、testrunner -
|-- (16)、tools - 工具
|-- (17)、tutorials -
7、external目錄
|-- (1)、apache-http - 網頁服務器
|-- (1)、astl - a slimmed-down vesion of the regular C++ STL
|-- (1)、bison - 自動生成語法分析器
|-- (2)、blisrc -
|-- (3)、blktrace -
|-- (4)、bluetooth - 藍牙相關,協議棧
|-- (5)、bouncycastle -
|-- (6)、bsdiff - diff工具
|-- (7)、bzip2 - 壓縮工具
|-- (8)、chromium -
|-- (9)、clearsilver - html模板系統
|-- (10)、dbus - 低延時,低開銷,高可用性的IPC機制
|-- (11)、dhcpcd -DHCP服務
|-- (12)、dnsmasq -
|-- (13)、e2fsprogs - EXT2文件系統工具
|-- (14)、easymock -
|-- (15)、elfcopy - 複製ELF的工具
|-- (16)、elfutils - ELF工具
|-- (17)、embunit - Embedded Unit Project
|-- (18)、emma - java代碼覆蓋統計工具
|-- (19)、esd - Enlightended Sound Daemon,將多種音頻流混合在一個設備上播放
|-- (20)、expat -
|-- (21)、fdlibm - Freely Distributable LIBM
|-- (22)、freetype - 字體
|-- (23)、fsck_msdos - dos文件系統檢查工具
|-- (24)、genext2fs -
|-- (25)、giflib - gif庫
|-- (26)、grub - GNU GRUB,the GRand Unified Bootloader
|-- (27)、gtest - Google C++ Testing Framework
|-- (28)、guava -
|-- (29)、icu4c - ICU(International Component for )
|-- (30)、iproute2 -
|-- (31)、ipsec-tools - this package provides a way to use the native IPsec functionality
|-- (32)、iptables - 防火牆
|-- (33)、jdiff - generate a re[ort describing the difference between two public Java APIs
|-- (34)、jhead - jpeg頭部信息工具
|-- (35)、jpeg - jpeg庫
|-- (36)、jsr305 -
|-- (37)、junit - JUnit是一個java元以內的單元測試框架
|-- (38)、kernel-headers - 內核的一些頭文件
|-- (39)、libffi - a foreign function interface library
|-- (40)、libgsm -
|-- (41)、libnfc-nxp -
|-- (42)、libpcap - 網絡數據包獲取函數
|-- (43)、libpng - png庫
|-- (44)、libvpx -
|-- (45)、libxml2 - xml解析庫
|-- (46)、mtpd - 命令
|-- (47)、netcat - simple Unix utility which reads and writes dataacross network connections
|-- (48)、netperf - 網絡性能測試工具
|-- (49)、nenen - 看代碼和JNI相關
|-- (50)、nist-sip -
|-- (1)、oauth -
|-- (1)、opencore - 多媒體框架
|-- (51)、openssl - SSL加密相關
|-- (52)、oprofile - Linux內核支持的一種性能分析機制
|-- (53)、ping - ping命令
|-- (54)、ppp - ppps撥號命令
|-- (55)、proguard - Java class fileshrinker,optimizer,obfuscator,and preverfier
|-- (56)、protobuf - a flexible,efficient,automated mechanism for serializing structured data
|-- (57)、qemu - arm模擬器
|-- (58)、quake -
|-- (59)、safe-iop - functions for performing sage integer operations
|-- (60)、skia - skia圖形引擎
|-- (61)、skia_asm -
|-- (62)、sonivox - sole MIDI solution for Google Android Mobile Phone Platform
|-- (63)、speex - Speex編/解碼API的使用(libspeex)
|-- (64)、srec - Nuance公司提供的開源連續非特定人語音識別
|-- (65)、stlport -
|-- (66)、strace - trace工具
|-- (67)、svox - Embedded Text-to-Speech
|-- (68)、tagsoup - 一個Java開發符合SAX的HTML解析器
|-- (69)、tcpdump - 抓TCP包的軟件
|-- (70)、tinyxml - a simple,small,C++ XML parser
|-- (71)、v8 -
|-- (72)、webkit - 瀏覽器核心
|-- (73)、wpa_supplicant - 無限網卡管理
|-- (74)、wpa_supplicant_6 -
|-- (75)、xmlwriter - XML編輯工具
|-- (76)、yaffs2 - yaffs文件系統
|-- (77)、zlib - a general purpose data compression library
訂閱:
文章 (Atom)