久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android

 嵌入式開發(fā)sun 2017-08-17

    最近公司要整內(nèi)部培訓(xùn),,分配給我寫個(gè)培訓(xùn)文檔,,這里記錄如下:


                                                                              撰寫不易,轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/jscese/article/details/40897277#t17


導(dǎo)讀:

關(guān)于的android目錄分析,網(wǎng)上有很多資料,,在此不做全面介紹.

本文只簡(jiǎn)單介紹Android中我常涉及的到的一些目錄與文件,文中都屬個(gè)人觀點(diǎn),,僅供參考~以google官方Android4.2.2源碼為例.

各個(gè)廠商平臺(tái)可能會(huì)有出入.

android源碼目錄為“/”根目錄.


                                                                                                  

                                                                                  ——jscese

                                                                                        2014/11/3



/bootable

這個(gè)目錄下存放android部分啟動(dòng)相關(guān)代碼,包括androidrecovery模式,,一般用于進(jìn)行OTA升級(jí),,由C++編寫,可以看到用于顯示的ui.cpp和安裝的install.cpp,模式入口為recovery.cppmain.





/build

這是android源碼中編譯核心所在地,,把這個(gè)目錄下的所有mk搞清楚,,android的編譯體系就基本了如指掌了.



./envsetup.sh

編譯初始化shell腳本,編譯配置命令lunch.m.mm.mmm等發(fā)源地,,所以android

編譯的初始階段需要source*,,其最終目的都會(huì)執(zhí)行到這個(gè)腳本,,把這個(gè)腳本中的變量以及函數(shù)設(shè)置到當(dāng)前終端的臨時(shí)變量中,供后續(xù)使用.

由此腳本中的lunch選取product_name引入到core中的mk等一系列的初始配置,,最后會(huì)打印出TARGET變量等.供源碼中編譯使用,!

這里詳情可參考Android——編譯系統(tǒng)初始化設(shè)置





./core/main.mk

Make-j*時(shí)的makefile入口文件,會(huì)對(duì)編譯體系中的變量進(jìn)行一些校對(duì),,編譯類型之類的,,并且加載整個(gè)源碼下的Android.mk文件,整體的編譯框架,,終極目標(biāo).PHONY:droid

./core/Makefile

由上面的main.mk引入,,算作android真正的主makefile,由它再依賴到各個(gè)子編譯體系.



./core/base_rules.mk

android整體編譯時(shí),,會(huì)加載根目錄下所有的Android.mk文件,,并且根據(jù)文件中的MODULE依次分析相關(guān)屬性,生成編譯規(guī)則,,其中不同的MODULE類型就需要在Android.mkinclude$(**)加載對(duì)應(yīng)mk,,分別對(duì)應(yīng)core目錄下的mk.

比如編譯apkAndroid.mk需要末尾include$(BUILD_PACKAGE),此時(shí)解析到這里的時(shí)候就會(huì)加載core下的package.mk,其中會(huì)加載進(jìn)Java.mk在這里會(huì)加載到base_rules.mk中計(jì)算一些變量值,,創(chuàng)建一些基本的依賴規(guī)則,,再又java.mk中調(diào)用函數(shù)$(transform-**)編譯,類似:

$(transform-java-to-classes.jar)java文件編譯成classes.jar

其它模塊類型類似.



./core/definitions.mk

這個(gè)文件下都是一些編譯的函數(shù)宏定義,,比如上面調(diào)用transform-java-to-classes.jar

以及常常出現(xiàn)在Android.mk中的all-java-files-under等等...都可在這里找到具體實(shí)現(xiàn),!





./target/product/security

這個(gè)文件下面存放的就是當(dāng)前編譯系統(tǒng)使用的簽名密鑰對(duì),用于系統(tǒng)不同組件在編譯的時(shí)候進(jìn)行數(shù)字簽名,,android原生默認(rèn)使用testkey,,這目錄下有README以及密鑰對(duì)制作腳本make_key,可以用來制作屬于自己的簽名密鑰,,使整個(gè)系統(tǒng)簽名獨(dú)一無二,,更具安全性!關(guān)于android的簽名機(jī)制,,詳情可參考Android——編譯release版簽名系統(tǒng)





./tools/releasetools

Buildtools目錄,,全是一些用于編譯的工具腳本和可執(zhí)行工具,其中releasetools下是用于編譯制作androidOTA刷機(jī)包時(shí)的Python腳本集合,,由上面說到的主Makefile中調(diào)用進(jìn)ota_from_target_files中的defmain(argv):








/cts

google提供的CompatibilityTest Suite (CTS) 兼容性測(cè)試組,,用于測(cè)試android系統(tǒng)的兼容性以及穩(wěn)定性,發(fā)測(cè)試reportgoogle過了這個(gè)認(rèn)證,,算是得到google的認(rèn)可的.一般的android源碼都是有這個(gè)組件源碼的,,但是不在主編譯流程中,需要使用makects編譯出android-cts目錄供使用,,也可去http://source./compatibility/downloads.html下載對(duì)應(yīng)版本最新的組件.作為一個(gè)android產(chǎn)品,,這個(gè)測(cè)試還是很有意義的,,據(jù)傳不懂CTS就不算一個(gè)合格的android開發(fā)人員~



./tests/tests

存放CTS測(cè)試用例的地方,全是androidapk,,添加自己的測(cè)試用例也在此.





./CtsTestCaseList.mk

這是cts模塊組件的編譯選項(xiàng)配置mk,,由上面說到的build中的cts.mk調(diào)用,對(duì)于自己添加的測(cè)試用例需要添加進(jìn)這里面的cts_test_packages變量中.





./tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java

可以這里看CTS_BUILD_VERSION確定你當(dāng)前源碼中的cts版本.



./tools/tradefed-host/README

google提供的readme,,有介紹如何配置cts環(huán)境以及使用的常用命令


關(guān)于CTS 可參考我之前的博客:Android—— ubuntu下【CTS】測(cè)試TV真機(jī)








/device

這個(gè)作為android源碼中對(duì)產(chǎn)品的描述文件夾,,各個(gè)平臺(tái)的差異還是比較大的,但是怎么改動(dòng),,本意是不變的,,只是作為要編譯的產(chǎn)品的配置文件夾,這里簡(jiǎn)單以google源碼中存放的samsung為例.



./samsung/tuna/AndroidProducts.mk

一般的存放規(guī)則是/device/廠商目錄/產(chǎn)品目錄,,這個(gè)mk里面一般是定義當(dāng)前產(chǎn)品的主配子mk,對(duì)于這個(gè)AndroidProducts.mk什么時(shí)候被加載,具體可去看android編譯初始化階段,,lunch選取產(chǎn)品之后的一系列mk初始化操作.



./samsung/tuna/BoardConfig.mk

這個(gè)配置文件,,看名字就知道了,定義的都是跟硬件配置相關(guān)的.這個(gè)mk依賴級(jí)別在產(chǎn)品角度算是最高的了,,如果想添加一些控制宏,,可以考慮加在這里.



./samsung/tuna/device.mk

這里配置最多的就是產(chǎn)品編譯需要的組件了,一般配置最多的PRODUCT_COPY_FILES以及PRODUCT_PACKAGES,,這兩個(gè)變量在編譯體系中的作用不多做介紹~

可參考:Android——編譯安裝Module的控制因素      

Android——編譯體系中的【PRODUCT_COPY_FILES】【ALL_PREBUILT】【BUILD_PREBUILT】

./samsung/tuna/recovery.fstab

熟悉Linux的對(duì)這個(gè)fstab應(yīng)該比較熟悉了,,這里配置的就是recovery模式下的分區(qū),會(huì)用于制作OTA刷機(jī)包時(shí)對(duì)分區(qū)的配置參數(shù).



vendorsetup.sh

一般會(huì)將產(chǎn)品的編譯信息存在這個(gè)文件中,,類似add_lunch_combofull_maguro-userdebug

在編譯初始階段由lunch加載供編譯者選擇,,這其中full代表整體編譯,maguro代表產(chǎn)品名,,userdebug代表編譯類型,,android的產(chǎn)品編譯類型可另行參考,不多做介紹~

可參考上面的Android——編譯安裝Module的控制因素      









/external

這是android存放外部工具組件的地方,,以文件夾為單一模塊,,最終編譯出來的有可執(zhí)行文件,jar包,,動(dòng)靜態(tài)庫,,東西比較混雜,google已經(jīng)移植了很多工具在這里面,,如果自己想移植一些模塊進(jìn)android系統(tǒng),,可以加在這里,寫好Android.mk,,在上面提到的device.mk中加入PRODUCT_PACKAGES變量中.

像這種移植可參考:Android——4.2 - 3G移植之路之usb-modeswitch (二)





/frameworks

android的運(yùn)行框架集合,,包含系統(tǒng)運(yùn)行的各種服務(wù)框架,,向app層提供api,根據(jù)JNI機(jī)制或者socket往下層調(diào)用,,也可使用hw_get_module調(diào)用到hardware層的module.



./base/core

字面意思,,核心所在,包含java以及jni,,核心組件的java類以及native方法的jni映射,,其中內(nèi)容太多,比如javaapp相關(guān)的ActivityManager.java,啟動(dòng)相關(guān)的ZygoteInit.java,,其中的jni目錄會(huì)被編譯成libandroid_runtime.so作為android運(yùn)行時(shí)的動(dòng)態(tài)庫供相關(guān)的java加載.





./base/services

框架層中的系統(tǒng)服務(wù)存放目錄,,包含系統(tǒng)時(shí)間服務(wù)以及輸入子系統(tǒng)服務(wù),同上java目錄下就是服務(wù)的java類了,,可以看到各種子服務(wù)模塊,,比如pmnet,,display,,如果想具體了解當(dāng)前系統(tǒng)啟動(dòng)了多少服務(wù),可以參考SystemServer.java



./opt/telephony

android電話子系統(tǒng)存放目錄,,向上提供api接口,,向下通過RIL.javasocket通信.











/hardware

硬件抽象層,描述對(duì)linuxkernel中的相關(guān)驅(qū)動(dòng)模塊的具體操作,,而在kernel中的驅(qū)動(dòng)模塊只擁有通用操作接口,,比如設(shè)置寄存器值,IO拉高拉低,,但是具體設(shè)置什么值,,拉高拉低的時(shí)序都寫在hardware層相對(duì)應(yīng)的module中,這就是google對(duì)于硬件驅(qū)動(dòng)的商業(yè)保護(hù).

./libhardware/hardware.c

hardware機(jī)制核心所在,,定義了相關(guān)規(guī)則,,比如load打開modules編譯生成的.so,抽象成一個(gè)module,,向上層提供hw_get_module接口以及module配置宏.



./libhardware/modules

這里就是與kernel相對(duì)應(yīng)的module存放的地方,,頭文件存在同級(jí)目錄的include中,在其中定義module結(jié)構(gòu),,接口方法以及唯一的moduleID.

其中像gralloc就是控制kernel中顯示屏驅(qū)動(dòng)的module,,用于管理控制fb緩沖區(qū),將來自上層displaySurfaceFlinger服務(wù)傳下來的圖像推送到lcd/led顯示屏上.其它類似.



./ril

android電話系統(tǒng)的ril驅(qū)動(dòng)文件目錄,,其中包含:

rild— ril主體控制機(jī)制,,

libril— ril與上層socket通信,

reference-ril— rilserial設(shè)備AT指令通信

這三個(gè)文件夾,,其中reference-ril是第三方驅(qū)動(dòng),,根據(jù)不同的設(shè)備選擇不同.

關(guān)于androidRIL機(jī)制不多做介紹~

可參考:Android——RIL 機(jī)制源碼分析







/system

android系統(tǒng)底層的文件系統(tǒng),,應(yīng)用組件,包含一些系統(tǒng)庫,,以及啟動(dòng)的配置文件.



./core/init/init.c

作為系統(tǒng)啟動(dòng)到android層的第一個(gè)進(jìn)程,,也將一直作為守護(hù)進(jìn)程,解析init.rc配置文件,,

啟動(dòng)相關(guān)服務(wù),其中就有比較常用的屬性服務(wù),,之后一直運(yùn)行于init進(jìn)程中,具體可參考property_service.c,,android層系統(tǒng)啟動(dòng)從這里開始,詳情另行參考~

可參考:Android——啟動(dòng)過程詳解



./core/rootdir

存放配置文件,,其中init.rc作為啟動(dòng)配置,ueventd.rc作為linux文件系統(tǒng)中文件事件配置,,還包含磁盤掛載所需要的vold.fstab配置文件等...



./core/include/private/android_filesystem_config.h

這個(gè)頭文件定義了,,android文件系統(tǒng)中文件的權(quán)限配置.





./vold

android舍棄了linuxudev機(jī)制,自己弄了一套磁盤掛載管理機(jī)制,,就是vold,,作為系統(tǒng)服務(wù)在init.rc配置啟動(dòng),用于磁盤的掛載等相關(guān)操作,,通過netlinksocket接收來自kerneluevent,,與上層MountService通過一個(gè)名為voldsocket通信,,入口為main.cpp中的main函數(shù),,vold機(jī)制詳情另行參考~

關(guān)于Vold機(jī)制可參考我之前的專欄:Android— 4.2 Vold













/out

作為android源碼編譯結(jié)果存放目錄,其中包含各種中間文件以及目標(biāo)文件.obj中存放的中間件以及hostlinux-x86存放的本地編譯項(xiàng).



./target/product/product_name/system.img

android系統(tǒng)編譯出來的鏡像文件,,也是整個(gè)源碼的最終目標(biāo)文件.



./target/product/product_name/system

編譯之后的系統(tǒng)文件夾,,也是system.img的主要構(gòu)成,其中app目錄下都是apk文件,,android中規(guī)定此目錄下的apk作為系統(tǒng)內(nèi)置應(yīng)用,,在文件系統(tǒng)中擁有系統(tǒng)權(quán)限,普通用戶沒有權(quán)限刪除更改,,詳情可參考PackageManager.其中的bin代表可執(zhí)行文件,,etc下存放的都是系統(tǒng)配置文件,lib中都是些動(dòng)態(tài)庫,,分別對(duì)應(yīng)到文件系統(tǒng)中.



./target/product/product_name/system/build.prop

這個(gè)文件中收集了編譯中的所有屬性,,包括編譯的主機(jī)環(huán)境,編譯目標(biāo)的各種配置信息等等...生成過程可參考主Makefile,在初始化階段會(huì)被property_service服務(wù)加載,,作為系統(tǒng)屬性.

可參考:Android——build.prop 解析



./target/product/product_name/data/

此目錄作為userdata存儲(chǔ)目錄,,對(duì)應(yīng)文件系統(tǒng)中的/data目錄,平時(shí)用戶安裝的apk就會(huì)被copy到這個(gè)該目錄的app目錄下,,android系統(tǒng)中apk所產(chǎn)生的數(shù)據(jù),,比如數(shù)據(jù)庫等都會(huì)存放在/data/data中,,以包名區(qū)分.



其中一般還有recovery,root等目錄,存放相對(duì)應(yīng)的產(chǎn)物,,不同平臺(tái)編譯出來的out目錄會(huì)有所出入.




    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多