版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第第頁安卓基礎知識總結(jié)1.Android編譯系統(tǒng)分析
2.文件系統(tǒng)分析
3.制作交叉工具鏈
4.軟件編譯常識
5.設置模塊流程分析
6.linux系統(tǒng)啟動流程分析
7.linux下svn使用指南
8.LFS相關
9.linux內(nèi)核的初步理解
====================================================
================
android系統(tǒng)開發(fā)指南(常用環(huán)境的搭建和使用)
說明:
有的步驟會用到腳本簡化操作,腳本通過svn服務器獵?。?/p>
svncosvn://48/smartphone/td0901/release/images/scripts
用戶名為各位的姓名拼音,密碼與用戶名相同
一編譯android源碼,制作文件系統(tǒng)
二ubuntu下燒錄內(nèi)核和文件系統(tǒng)
一編譯android源碼,制作文件系統(tǒng)
1.開發(fā)主線源碼位置:
svn://48/smartphone/td0901/trunk/cupcake-jianping//cupcake源代碼
svn://48/smartphone/td0901/trunk/linux-2.6.28-a1//內(nèi)核源代碼
2.打標的源代碼位置
svnlistsvn://48/smartphone/td0901/tag
我們可以通過svnlistsvn://48/smartphone查看svn版本庫內(nèi)核
更多信息請參卡以下文檔:
48/svn/smartphone/
48/svn/smartphone/智能平臺開發(fā)部資料管理手冊V1.0.doc
48/svn/smartphone/linux下svn操作指南及規(guī)范.doc
用戶名為各位的姓名拼音,密碼與用戶名相同
3.編譯源碼
進入cupcake工作拷貝的頂層名目,執(zhí)行:
../make_image15.sh
部分執(zhí)行結(jié)果:
out/target/product/littleton/root/內(nèi)核需要使用的initramfs
out/target/product/littleton/system文件系統(tǒng)的系統(tǒng)分區(qū)
out/target/product/littleton/data/文件系統(tǒng)數(shù)據(jù)分區(qū)
4.編譯內(nèi)核
此處內(nèi)核編譯主要針對驅(qū)動組之外的同事
1設置工具鏈
內(nèi)核的linux-2.6.28-a1/Makefile中設定了:
CROSS_COMPILE?=arm-linux-
所以設置PATH環(huán)境變量,保證能找到正確的工具鏈
假設工具鏈位于:/usr/local/marvell-arm-linux-4.1.1/設置為:
exportPATH:=/usr/local/marvell-arm-linux-4.1.1/bin/:$PATH
2更改編譯選項(網(wǎng)絡啟動或者本機啟動)
內(nèi)核頂層名目執(zhí)行:
makemenuconfig
Generalsetup
#InitialRAMfilesystemandRAMdisk(initramfs/initrd)support
()Initramfssourcefile(s)(NEW)
假如需要支持網(wǎng)絡啟動反選[]InitialRAMfilesystemandRAMdisk(initramfs/initrd)support
假如需要支持本地啟動選中
#InitialRAMfilesystemandRAMdisk(initramfs/initrd)support
設置()Initramfssourcefile(s)(NEW)為root
拷貝cupcake編譯結(jié)果out/target/product/littleton/root/到內(nèi)核頂層名目
3編譯
內(nèi)核頂層名目執(zhí)行makezImage
編譯好的內(nèi)核:
arch/arm/boot/zImage
5.搭建網(wǎng)絡開發(fā)環(huán)境
1安裝nfs服務器
sudoapt-getinstallnfs-kernel-servernfs-common
2修改nfs服務器配置文件/etc/exports,確保有以下配置項
/nfsroot/rootfs*(rw,no_root_squash,sync)
我們在內(nèi)核中已經(jīng)固定,手機通過網(wǎng)絡方式啟動,默認從/nfsroot/rootfs
讀取文件系統(tǒng),修改配置項后需要重啟nfs服務器:
sudo/etc/init.d/nfs-kernel-serverrestart
3配置網(wǎng)絡根文件系統(tǒng)
拷貝out/target/product/littleton/root/內(nèi)容到/nfsroot/rootfs名目
拷貝out/target/product/littleton/system內(nèi)容到/nfsroot/rootfs/system
修改/nfsroot/rootfs/init.rc去掉幾個mount指令
為了使大家的過程,結(jié)果統(tǒng)一,可以使用腳本mkfs.cupcake完成
在執(zhí)行mkfs.cupcake.nfs腳本前先到cupcake-jianping名目下執(zhí)行:../make_env15.sh設置環(huán)境變量,
獵取通過手動輸入android源碼的位置,讓腳原來設置環(huán)境變量。
二ubuntu下燒錄內(nèi)核和文件系統(tǒng)
1.硬件:
手機一臺
usb轉(zhuǎn)串口線一根
usb轉(zhuǎn)網(wǎng)卡線一根
2.軟件環(huán)境
1tftp服務器
執(zhí)行腳本:setup_tftpd.sh安裝和配置tftp服務器,我們默認以/tftpboot
為tftp服務器的根名目,需要下載的文件都放在該名目下。
2獵取待燒錄的鏡像文件
svnlistsvn://48/smartphone/td0901/release/images查看服務器上的
版本狀況,通常我們下載最新的,例如,下載9月18號發(fā)布的版本:
svncosvn://48/smartphone/td0901/release/images/images20230918
3燒錄鏡像文件
用以下文件為例,示范通過tftp燒寫內(nèi)核和文件系統(tǒng)
內(nèi)核zImage0917
系統(tǒng)分區(qū):system0918.img
數(shù)據(jù)分區(qū)data0918.img
待燒寫的以上文件必需存在于tftp服務器根名目/tftpboot下。
詳細步驟:
首先連接好硬件設備進入blob下載模式
1blob起來后按任意鍵
Processingobmparameters...
Cantdetectmicco.SetPMICasnormalI2Cmode.
NANDflash(Manu=0x98Device=0xba)detected!
Slot0Found
getrelocationtable
FoundMainBadblocktableataddress0x0f000000,version0x01
FoundMirrorBadblocktableataddress0x0efc0000,version0x01
ConsideryourselfBLOBed!
blobversion2.0.5-pre3forMarvellLittleton
Copyright(C)19992000202320232023Jan-DerkBakkerandErikMouw
blobcomeswithABSOLUTELYNOWARRANTY;readtheGNUGPLfordetails.
Thisisfreesoftware,andyouarewelcometoredistributeit
undercertainconditions;readtheGNUGPLfordetails.
lengthnotalignwithpagesize,changeto0x0
Readflashfrom0x60000,length0x0
Done
Autoboot(2seconds)inprogress,pressanykeytostop..
Autobootaborted
Typehelptogetalistofcommands
blob
2通過tftp下載內(nèi)核到pc內(nèi)存0x80800000地址處
blobtftpzImage0917
Begininitetherusbnet!!!
*****Plug-inUSBcableconfigusbdnetnow******
exitcheck_usb_connection:1
TFTPingzImage0917*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^OK.
received6144blocks(3145156bytes)
tftp_cmd:filezImage0917loadedviatftptoaddress0x80800000.
3擦除原來的內(nèi)核分區(qū),0x100000為分區(qū)起始地址,0x300000為分區(qū)長度
blobnanderase-z0x1000000x400000
thecurrentNANDchipdoesnotsupportBlockUnlocking.
Erase0x300000lengthdatafromflash:0x100000
Eraseflashfrom0x100000,length0x300000
Done
4燒寫內(nèi)存0x80800000開頭實際長度為3145156的內(nèi)核數(shù)據(jù)到起始地址為0x100000的內(nèi)核分區(qū)
blobnandwrite-z0x808000000x1000003145156
thecurrentNANDchipdoesnotsupportBlockUnlocking.
Write0x2ffdc4lengthdatafromRAM:0x80800000toflash:0x100000
Writeflashfrom0x100000,length0x2ffdc4
Eraseflashfrom0x100000,length0x300000
Done
Done
5下載系統(tǒng)分區(qū)鏡像文件到pc內(nèi)存0x80800000地址處
blobtftpsystem0918.img
TFTPingsystem0918.img*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^OK.
received113138blocks(57925824bytes)
tftp_cmd:filesystem0918.imgloadedviatftptoaddress0x80800000.
6擦除原來的flash系統(tǒng)分區(qū)
blobnanderase-z0x5000000x4000000
thecurrentNANDchipdoesnotsupportBlockUnlocking.
Erase0x3e0f800lengthdatafromflash:0x400000
Eraseflashfrom0x400000,length0x3e0f800
Done
7燒寫數(shù)據(jù)到flash系統(tǒng)分區(qū)
blobnandwrite-y0x808000000x50000057925824
thecurrentNANDchipdoesnotsupportBlockUnlocking.
Write0x373e0c0lengthdatafromRAM:0x80800000toflash:0x400000
Writeflashfrom0x400000,length0x3591800
Eraseflashfrom0x400000,length0x3591800
Done
Done
8下載數(shù)據(jù)分區(qū)鏡像文件到pc內(nèi)存0x80800000地址處
blobtftpdata0918.img
TFTPingdata0918.img*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^OK.
received33992blocks(17402880bytes)
tftp_cmd:filedata0918.imgloadedviatftptoaddress0x80800000.
blob
9擦除原來的flash數(shù)據(jù)分區(qū)
blobnanderase-z0x45000000xBB00000
thecurrentNANDchipdoesnotsupportBlockUnlocking.
Erase0xa81f000lengthdatafromflash:0x4400000
Eraseflashfrom0x4400000,length0xa81f000
Done
10燒寫數(shù)據(jù)鏡像到flash數(shù)據(jù)分區(qū)
blobnandwrite-y0x808000000x450000017402880
thecurrentNANDchipdoesnotsupportBlockUnlocking.
Write0x1098c00lengthdatafromRAM:0x80800000toflash:0x4400000
Writeflashfrom0x4400000,length0x1018000
Eraseflashfrom0x4400000,length0x1018000
Done
Done
blob
flash分區(qū)圖:
*******************************************
*****
*blob*kernel*system*data*
*****
*******************************************
nanderase-z0x1000000x400000
tftpzImage
nandwrite-z0x808000000x100000
燒寫system.img:
nanderase-z0x5000000x4000000
tftpsystem.img
nandwrite-y0x808000000x500000
燒寫userdata.img:
nanderase-z0x45000000xBB00000
tftpuserdata.img
nandwrite-y0x808000000x4500000
============================
涉及的內(nèi)容:
svn服務器的使用
android的編譯系統(tǒng),原理,工具鏈,幫助工具,參數(shù)等,環(huán)境變量,怎樣單獨添加編譯一個單獨的模塊等。
android的編譯結(jié)果:文件系統(tǒng)分析
文件系統(tǒng)的使用,啟動流程
設置模塊流程分析
============================
====================================================
1.Android編譯系統(tǒng)分析
編譯腳本及系統(tǒng)變量
build/envsetup.sh腳本分析
在編譯源代碼之前通常需要在android源代碼頂層名目執(zhí)行../build/envsetup.sh目的是為了使用
腳本envsetup.sh里面定義了一些函數(shù):
functionhelp()
functionget_abs_build_var()
functionget_build_var()
functioncheck_product()
functioncheck_variant()
functionsetpaths()
functionprintconfig()
functionset_stuff_for_environment()
functionset_sequence_number()
functionsettitle()
functionchoosetype()
functionchooseproduct()
functionchoosevariant()
functiontapas()
functionchoosecombo()
functionprint_lunch_menu()
functionlunch()
functiongettop
functionm()
functionfindmakefile()
functionmm()
functionmmm()
functioncroot()
functionpid()
functiongdbclient()
functionjgrep()
functioncgrep()
functionresgrep()
functiongetprebuilt
functiontracedmdump()
functionrunhat()
functiongetbugreports()
functionstartviewserver()
functionstopviewserver()
functionisviewserverstarted()
functionsmoketest()
functionruntest()
functionruntest_py()
functiongodir()
choosecombo指令分析:
functionchoosecombo()
{
choosesim$1
echo
echo
choosetype$2
echo
echo
chooseproduct$3
echo
echo
choosevariant$4
echo
set_stuff_for_environment
printconfig
}
會依次進行如下選擇:
Buildforthesimulatororthedevice?
1.Device
2.Simulator
Whichwouldyoulike?[1]
Buildtypechoicesare:
1.release
2.debug
Whichwouldyoulike?[1]
Productchoicesare:
1.emulator
2.generic
3.sim
4.littleton
Youcanalsotypethenameofaproductifyouknowit.
Whichwouldyoulike?[littleton]
Variantchoicesare:
1.user
2.userdebug
3.eng
Whichwouldyoulike?[eng]user
默認選擇以后會消失:
TARGET_PRODUCT=littleton
TARGET_BUILD_VARIANT=user
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=
==========
functionchooseproduct()函數(shù)分析:
choices=(`/bin/lsbuild/target/board/*/BoardConfig.mkvendor/*/*/BoardConfig.mk2/dev/null`)
讀取build/target/board/*名目下的板配置文件:BoardConfig.mk
讀取vendor/*/*/名目下的板配置文件:BoardConfig.mk
choices的值為:
build/target/board/emulator/BoardConfig.mk
build/target/board/generic/BoardConfig.mk
build/target/board/sim/BoardConfig.mk
vendor/marvell/littleton/BoardConfig.mk
經(jīng)過:
forchoicein${choices[@]}
do
#Theproductnameisthenameofthedirectorycontaining
#themakefilewefound,above.
prodlist=(${prodlist[@]}`dirname${choice}|xargsbasename`)
done
的處理,prodlist的值為:
emulatorgenericsimlittleton
所以選擇菜單為:
Productchoicesare:
1.emulator
2.generic
3.sim
4.littleton
假如選擇4,那么TARGET_PRODUCT被賦值為:littleton。
board_config_mk:=/
$(strip$(wildcard/
$(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk/
vendor/*/$(TARGET_DEVICE)/BoardConfig.mk/
))
怎樣添加一個模塊
LOCAL_PATH:=$(callmy-dir)
#編譯靜態(tài)庫
include$(CLEAR_VARS)
LOCAL_MODULE=libhellos
LOCAL_CFLAGS=$(L_CFLAGS)
LOCAL_SRC_FILES=hellos.c
LOCAL_C_INCLUDES=$(INCLUDES)
LOCAL_SHARED_LIBRARIES:=libcutils
LOCAL_COPY_HEADERS_TO:=libhellos
LOCAL_COPY_HEADERS:=hellos.h
include$(BUILD_STATIC_LIBRARY)
#編譯動態(tài)庫
include$(CLEAR_VARS)
LOCAL_MODULE=libhellod
LOCAL_CFLAGS=$(L_CFLAGS)
LOCAL_SRC_FILES=hellod.c
LOCAL_C_INCLUDES=$(INCLUDES)
LOCAL_SHARED_LIBRARIES:=libcutils
LOCAL_COPY_HEADERS_TO:=libhellod
LOCAL_COPY_HEADERS:=hellod.h
include$(BUILD_SHARED_LIBRARY)
BUILD_TEST=true
ifeq($(BUILD_TEST),true)
#使用靜態(tài)庫
include$(CLEAR_VARS)
LOCAL_MODULE:=hellos
LOCAL_STATIC_LIBRARIES:=libhellos
LOCAL_SHARED_LIBRARIES:=
LOCAL_LDLIBS+=-ldl
LOCAL_CFLAGS:=$(L_CFLAGS)
LOCAL_SRC_FILES:=mains.c
LOCAL_C_INCLUDES:=$(INCLUDES)
include$(BUILD_EXECUTABLE)
#使用動態(tài)庫
include$(CLEAR_VARS)
LOCAL_MODULE:=hellod
LOCAL_MODULE_TAGS:=debug
LOCAL_SHARED_LIBRARIES:=libclibcutilslibhellod
LOCAL_LDLIBS+=-ldl
LOCAL_CFLAGS:=$(L_CFLAGS)
LOCAL_SRC_FILES:=maind.c
LOCAL_C_INCLUDES:=$(INCLUDES)
include$(BUILD_EXECUTABLE)
endif#ifeq($(WPA_BUILD_SUPPLICANT),true)
########################
#local_target_dir:=$(TARGET_OUT)/etc/wifi
#include$(CLEAR_VARS)
#LOCAL_MODULE:=wpa_supplicant.conf
#LOCAL_MODULE_TAGS:=user
#LOCAL_MODULE_CLASS:=ETC
#LOCAL_MODULE_PATH:=$(local_target_dir)
#LOCAL_SRC_FILES:=$(LOCAL_MODULE)
#include$(BUILD_PREBUILT)
########################
系統(tǒng)變量解析
LOCAL_MODULE-編譯的目標對象
LOCAL_SRC_FILES-編譯的源文件
LOCAL_C_INCLUDES-需要包含的頭文件名目
LOCAL_SHARED_LIBRARIES-鏈接時需要的外部庫
LOCAL_PRELINK_MODULE-是否需要prelink處理
BUILD_SHARED_LIBRARY-指明要編譯成動態(tài)庫
LOCAL_PATH-編譯時的名目
$(call名目,名目)名目引入操作符
如該名目下有個文件夾名稱src,則可以這樣寫$(callsrc),那么就會得到src名目的完好路徑
include$(CLEAR_VARS)-去除之前的一些系統(tǒng)變量
CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk
在build/core/config.mk定義CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk
通過include包含自定義的.mk文件(即是自定義編譯規(guī)章)或是引用系統(tǒng)其他的.mk文件(系統(tǒng)定義的編譯規(guī)章)。
LOCAL_SRC_FILES-編譯的源文件
可以是.c,.cpp,.Java,.S(匯編文件)或是.aidl等格式
不同的文件用空格隔開。假如編譯名目子名目,采納相對路徑,如子名目/文件名。也可以通過$(call名目),指明編譯某名目
下全部.c/.cpp/.java/.S/.aidl文件.追加文件LOCAL_SRC_FILES+=文件
LOCAL_C_INCLUDES-需要包含的頭文件名目
可以是系統(tǒng)定義路徑,也可以是相對路徑.如該編譯名目下有個include名目,寫法是include/*.h
LOCAL_SHARED_LIBRARIES-鏈接時需要的外部共享庫
LOCAL_STATIC_LIBRARIES-鏈接時需要的外部外部靜態(tài)
LOCAL_JAVA_LIBRARIES加入jar包
LOCAL_MODULE-編譯的目標對象
module是指系統(tǒng)的nativecode,通常針對c,c++代碼
./system/core/sh/Android.mk:32:LOCAL_MODULE:=sh
./system/core/libcutils/Android.mk:71:LOCAL_MODULE:=libcutils
./system/core/cpio/Android.mk:9:LOCAL_MODULE:=mkbootfs
./system/core/mkbootimg/Android.mk:8:LOCAL_MODULE:=mkbootimg
./system/core/toolbox/Android.mk:61:LOCAL_MODULE:=toolbox
./system/core/logcat/Android.mk:10:LOCAL_MODULE:=logcat
./system/core/adb/Android.mk:65:LOCAL_MODULE:=adb
./system/core/adb/Android.mk:125:LOCAL_MODULE:=adbd
./system/core/init/Android.mk:20:LOCAL_MODULE:=init
./system/core/vold/Android.mk:24:LOCAL_MODULE:=vold
./system/core/mountd/Android.mk:13:LOCAL_MODULE:=mountd
LOCAL_PACKAGE_NAME
Java應用程序的名字用該變量定義
./packages/apps/Music/Android.mk:9:LOCAL_PACKAGE_NAME:=Music
./packages/apps/Browser/Android.mk:14:LOCAL_PACKAGE_NAME:=Browser
./packages/apps/Settings/Android.mk:8:LOCAL_PACKAGE_NAME:=Settings
./packages/apps/Stk/Android.mk:10:LOCAL_PACKAGE_NAME:=Stk
./packages/apps/Contacts/Android.mk:10:LOCAL_PACKAGE_NAME:=Contacts
./packages/apps/Mms/Android.mk:8:LOCAL_PACKAGE_NAME:=Mms
./packages/apps/Camera/Android.mk:8:LOCAL_PACKAGE_NAME:=Camera
./packages/apps/Phone/Android.mk:11:LOCAL_PACKAGE_NAME:=Phone
./packages/apps/VoiceDialer/Android.mk:8:LOCAL_PACKAGE_NAME:=VoiceDialer
BUILD_SHARED_LIBRARY-指明要編譯成動態(tài)庫。
編譯的目標,用include操作符
UILD_STATIC_LIBRARY來指明要編譯成靜態(tài)庫。
假如是java文件的話,會用到系統(tǒng)的編譯腳本host_java_library.mk,用BUILD_PACKAGE來指明。三個編譯
include$(BUILD_STATIC_LIBRARY)
BUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk
include$(BUILD_SHARED_LIBRARY)
./build/core/config.mk:50:BUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mk
include$(BUILD_HOST_SHARED_LIBRARY)
BUILD_HOST_SHARED_LIBRARY:=$(BUILD_SYSTEM)/host_shared_library.mk
include$(BUILD_EXECUTABLE)
build/core/config.mk:51:BUILD_EXECUTABLE:=$(BUILD_SYSTEM)/executable.mk
include$(BUILD_HOST_EXECUTABLE)
./build/core/config.mk:53:BUILD_HOST_EXECUTABLE:=$(BUILD_SYSTEM)/host_executable.mk
BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk
BUILD_JAVA_LIBRARY
./build/core/config.mk:58:BUILD_JAVA_LIBRARY:=$(BUILD_SYSTEM)/java_library.mk
BUILD_STATIC_JAVA_LIBRARY編譯靜態(tài)JAVA庫
./build/core/config.mk:59:BUILD_STATIC_JAVA_LIBRARY:=$(BUILD_SYSTEM)/static_java_library.mk
BUILD_HOST_JAVA_LIBRARY編譯本機用的JAVA庫
./build/core/config.mk:60:BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk
BUILD_HOST_STATIC_LIBRARY:=$(BUILD_SYSTEM)/host_static_library.mk
BUILD_HOST_SHARED_LIBRARY:=$(BUILD_SYSTEM)/host_shared_library.mk
BUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk
BUILD_RAW_STATIC_LIBRARY:=$(BUILD_SYSTEM)/raw_static_library.mk
BUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mk
BUILD_EXECUTABLE:=$(BUILD_SYSTEM)/executable.mk
BUILD_RAW_EXECUTABLE:=$(BUILD_SYSTEM)/raw_executable.mk
BUILD_HOST_EXECUTABLE:=$(BUILD_SYSTEM)/host_executable.mk
BUILD_PACKAGE:=$(BUILD_SYSTEM)/package.mk
BUILD_HOST_PREBUILT:=$(BUILD_SYSTEM)/host_prebuilt.mk
BUILD_PREBUILT:=$(BUILD_SYSTEM)/prebuilt.mk
BUILD_MULTI_PREBUILT:=$(BUILD_SYSTEM)/multi_prebuilt.mk
BUILD_JAVA_LIBRARY:=$(BUILD_SYSTEM)/java_library.mk
BUILD_STATIC_JAVA_LIBRARY:=$(BUILD_SYSTEM)/static_java_library.mk
BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk
BUILD_DROIDDOC:=$(BUILD_SYSTEM)/droiddoc.mk
BUILD_COPY_HEADERS:=$(BUILD_SYSTEM)/copy_headers.mk
BUILD_KEY_CHAR_MAP:=$(BUILD_SYSTEM)/key_char_map.mk
============
LOCAL_PRELINK_MODULE
Prelink利用事先鏈接代替運行時鏈接的方法來加速共享庫的加載,它不僅可以加快起動速度,還可以削減部分內(nèi)存開銷,
是各種Linux架構(gòu)上用于削減程序加載時間、縮短系統(tǒng)啟動時間和加快應用程序啟動的很受歡迎的一個工具。程序運行時的
動態(tài)鏈接尤其是重定位(relocation)的開銷對于大型系統(tǒng)來說是很大的。
動態(tài)鏈接和加載的過程開銷很大,并且在大多數(shù)的系統(tǒng)上,函數(shù)庫并不會經(jīng)常被更動,每次程序被執(zhí)行時所進行的鏈接
動作都是完全相同的,對于嵌入式系統(tǒng)來說尤其如此。因此,這一過程可以改在運行時之前就可以預先處理好,即花一些時間
利用Prelink工具對動態(tài)共享庫和可執(zhí)行文件進行處理,修改這些二進制文件并加入相應的重定位等信息,節(jié)省了原來在程序
啟動時的比較耗時的查詢函數(shù)地址等工作,這樣可以削減程序啟動的時間,同時也削減了內(nèi)存的耗用。
Prelink的這種做法當然也有代價:每次更新動態(tài)共享庫時,相關的可執(zhí)行文件都需要重新執(zhí)行一遍Prelink才能保
證有效,由于新的共享庫中的符號信息、地址等很可能與原來的已經(jīng)不同了,這就是為什么androidframework代碼一改動,
這時候就會導致相關的應用程序重新被編譯。
這種代價對于嵌入式系統(tǒng)的開發(fā)者來說可能略微帶來一些冗雜度,不過好在對用戶來說幾乎是可以忽視的。
變量設置為false那么將不做prelink操作
LOCAL_PRELINK_MODULE:=false
默認是需要prlink的,同時需要在build/core/prelink-linux-arm.map中加入
libhellod.so0x96000000
這個map文件似乎是制定動態(tài)庫的地址的,在前面解釋上面有一些地址范圍的信息,留意庫與庫之間的間隔數(shù),
假如指定不好的話編譯的時候會提示說地址空間沖突的問題。另外,留意排序,這里要把數(shù)大的放到前面去,
根據(jù)大小降序排序。
解析LOCAL_PRELINK_MODULE變量
build/core/dynamic_binary.mk:94:ifeq($(LOCAL_PRELINK_MODULE),true)
ifeq($(LOCAL_PRELINK_MODULE),true)
$(prelink_output):$(prelink_input)$(TARGET_PRELINKER_MAP)$(APRIORI)
$(transform-to-prelinked)
transform-to-prelinked定義:
./build/core/definitions.mk:1002:definetransform-to-prelinked
definetransform-to-prelinked
@mkdir-p$(dir$@)
@echotargetPrelink:$(PRIVATE_MODULE)($@)
$(hide)$(APRIORI)/
--prelinkmap$(TARGET_PRELINKER_MAP)/
--locals-only/
--quiet/
$/build/tools/apriori
參考文檔:
動態(tài)庫優(yōu)化--Prelink(預連接)技術
http://./article/09-04/71629s.html
===============
LOCAL_ARM_MODE:=arm
目前Android大部分都是基于Arm處理器的,Arm指令用兩種模式Thumb(每條指令兩個字節(jié))和arm指令(每條指令四個字節(jié))
LOCAL_CFLAGS+=-O3-fstrict-aliasing-fprefetch-loop-arrays
通過設定編譯器操作,優(yōu)化級別,-O0表示沒有優(yōu)化,-O1為缺省值,-O3優(yōu)化級別最高
LOCAL_CFLAGS+=-W-Wall
LOCAL_CFLAGS+=-fPIC-DPIC
LOCAL_CFLAGS+=-O2-g-DADB_HOST=1-Wall-Wno-unused-parameter
LOCAL_CFLAGS+=-D_XOPEN_SOURCE-D_GNU_SOURCE-DSH_HISTORY
LOCAL_CFLAGS+=-DUSEOVERLAY2
依據(jù)條件選擇相應的編譯參數(shù)
ifeq($(TARGET_ARCH),arm)
LOCAL_CFLAGS+=-DANDROID_GADGET=1
LOCAL_CFLAGS:=$(PV_CFLAGS)
endif
ifeq($(TARGET_BUILD_TYPE),release)
LOCAL_CFLAGS+=-O2
endif
LOCAL_LDLIBS:=-lpthread
LOCAL_LDLIBS+=-ldl
ifdefUSE_MARVELL_MVED
LOCAL_WHOLE_STATIC_LIBRARIES+=lib_il_mpeg4aspdecmved_wmmx2lnxlib_il_h264decmved_wmmx2lnx
LOCAL_SHARED_LIBRARIES+=libMrvlMVED
else
LOCAL_WHOLE_STATIC_LIBRARIES+=lib_il_h264dec_wmmx2lnxlib_il_mpeg4aspdec_wmmx2lnx
endif
====================
其他一些變量和腳本:
HOST_JNILIB_SUFFIX
LOCAL_MODULE_SUFFIX
LOCAL_MODULE_SUFFIX:=$(HOST_JNILIB_SUFFIX)
HOST_GLOBAL_LDFLAGS
TARGET_GLOBAL_LDFLAGS
PRIVATE_LDFLAGS
LOCAL_LDLIBS
LOCAL_C_INCLUDES
LOCAL_STATIC_LIBRARIES
LOCAL_STATIC_LIBRARIES+=codecJPDec_WMMX2LNXmiscGen_WMMX2LNX
LOCAL_SHARED_LIBRARIES
LOCAL_SHARED_LIBRARIES+=libMrvlIPP
LOCAL_SHARED_LIBRARIES+=$(common_SHARED_LIBRARIES)
LOCAL_SHARED_LIBRARIES+=libMrvlIPP
LOCAL_SHARED_LIBRARIES+=libdl
ifeq($(TARGET_PRODUCT),littleton)
LOCAL_C_INCLUDES+=vendor/marvell/littleton/m2d/
LOCAL_SHARED_LIBRARIES+=libOmxCore
endif
vendor/marvell/littleton/littleton.mk:27:PRODUCT_NAME:=littleton
vendor/marvell/littleton/littleton.mk:28:PRODUCT_DEVICE:=littleton
vendor/marvell/littleton/AndroidProducts.mk:13:$(LOCAL_DIR)/littleton.mk
vendor/sample/products/sample_addon.mk:40:PRODUCT_NAME:=sample_addon
vendor/htc/dream-open/htc_dream.mk:6:PRODUCT_NAME:=htc_dream
./vendor/htc/dream-open/htc_dream.mk:7:PRODUCT_DEVICE:=dream-open
./vendor/htc/dream-open/AndroidProducts.mk:3:$(LOCAL_DIR)/htc_dream.mk
build/target/product/generic.mk:26:PRODUCT_NAME:=generic
build/target/product/generic_with_google.mk:20:PRODUCT_NAME:=generic_with_google
build/target/product/min_dev.mk:6:PRODUCT_NAME:=min_dev
build/target/product/core.mk:2:PRODUCT_NAME:=
build/target/product/sim.mk:7:PRODUCT_NAME:=sim
build/target/product/sdk.mk:37:PRODUCT_NAME:=sdk
build/tools/buildinfo.sh:20:echo=$PRODUCT_NAME
lunchsample_addon-eng
lunchhtc_dream-eng
lunchgeneric-eng
lunch1
lunchsim-eng
TARGET_BUILD_TYPE=release
lunch2
TARGET_BUILD_TYPE=debug
lunchgeneric-user
.PHONY:systemtarball-nodeps
systemtarball-nodeps:$(FS_GET_STATS)/
$(filter-outsystemtarball-nodepsstnod,$(MAKECMDGOALS))
$(build-systemtarball-target)
.PHONY:stnod
stnod:systemtarball-nodeps
systemimage-nodepssnod
./core/main.mk:BUILD_SYSTEM:=$(TOPDIR)build/core
./core/main.mk:include$(BUILD_SYSTEM)/config.mk
./core/main.mk:include$(BUILD_SYSTEM)/cleanbuild.mk
./core/main.mk:include$(BUILD_SYSTEM)/version_defaults.mk
./core/main.mk:include$(BUILD_SYSTEM)/definitions.mk
./core/main.mk:include$(BUILD_SYSTEM)/Makefile
./core/static_java_library.mk:include$(BUILD_SYSTEM)/java_library.mk
./core/host_java_library.mk:include$(BUILD_SYSTEM)/base_rules.mk
./core/executable.mk:include$(BUILD_SYSTEM)/dynamic_binary.mk
./core/java_library.mk:include$(BUILD_SYSTEM)/java.mk
./core/binary.mk:include$(BUILD_SYSTEM)/base_rules.mk
./core/raw_executable.mk:include$(BUILD_SYSTEM)/binary.mk
./core/prebuilt.mk:include$(BUILD_SYSTEM)/base_rules.mk
./core/host_executable.mk:include$(BUILD_SYSTEM)/binary.mk
./core/combo/select.mk:$(combo_target)PRELINKER_MAP:=$(BUILD_SYSTEM)/prelink-$(combo_os_arch).map
./core/shared_library.mk:include$(BUILD_SYSTEM)/dynamic_binary.mk
./core/config.mk:include$(BUILD_SYSTEM)/pathmap.mk
./core/config.mk:BUILD_COMBOS:=$(BUILD_SYSTEM)/combo
./core/config.mk:CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk
./core/config.mk:BUILD_HOST_STATIC_LIBRARY:=$(BUILD_SYSTEM)/host_static_library.mk
./core/config.mk:BUILD_HOST_SHARED_LIBRARY:=$(BUILD_SYSTEM)/host_shared_library.mk
./core/config.mk:BUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk
./core/config.mk:BUILD_RAW_STATIC_LIBRARY:=$(BUILD_SYSTEM)/raw_static_library.mk
./core/config.mk:BUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mk
./core/config.mk:BUILD_EXECUTABLE:=$(BUILD_SYSTEM)/executable.mk
./core/config.mk:BUILD_RAW_EXECUTABLE:=$(BUILD_SYSTEM)/raw_executable.mk
./core/config.mk:BUILD_HOST_EXECUTABLE:=$(BUILD_SYSTEM)/host_executable.mk
./core/config.mk:BUILD_PACKAGE:=$(BUILD_SYSTEM)/package.mk
./core/config.mk:BUILD_HOST_PREBUILT:=$(BUILD_SYSTEM)/host_prebuilt.mk
./core/config.mk:BUILD_PREBUILT:=$(BUILD_SYSTEM)/prebuilt.mk
./core/config.mk:BUILD_MULTI_PREBUILT:=$(BUILD_SYSTEM)/multi_prebuilt.mk
./core/config.mk:BUILD_JAVA_LIBRARY:=$(BUILD_SYSTEM)/java_library.mk
./core/config.mk:BUILD_STATIC_JAVA_LIBRARY:=$(BUILD_SYSTEM)/static_java_library.mk
./core/config.mk:BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk
./core/config.mk:BUILD_DROIDDOC:=$(BUILD_SYSTEM)/droiddoc.mk
./core/config.mk:BUILD_COPY_HEADERS:=$(BUILD_SYSTEM)/copy_headers.mk
./core/config.mk:BUILD_KEY_CHAR_MAP:=$(BUILD_SYSTEM)/key_char_map.mk
./co
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GAT 753.7-2008報警統(tǒng)計信息管理代碼 第7部分:公安行政執(zhí)法分類與代碼》專題研究報告
- 2026年深圳中考語文素養(yǎng)培優(yōu)強化試卷(附答案可下載)
- 2026年深圳中考英語經(jīng)典例題變式試卷(附答案可下載)
- 廣東省深圳市龍崗區(qū)2026年上學期期末九年級適應性試題物理試卷附答案
- 2026年大學大二(交通安全技術)道路交通安全設施設置綜合測試題及答案
- 2026年深圳中考數(shù)學圖形的軸對稱試卷(附答案可下載)
- 2026年深圳中考生物綠色植物與生物圈的碳氧平衡試卷(附答案可下載)
- 2026年深圳中考歷史文藝復興與宗教改革專項試卷(附答案可下載)
- 復試電氣知識題庫及答案
- 2026年人教版語文高一上冊期末質(zhì)量檢測卷(附答案解析)
- hsk標準教程教學課件
- 醫(yī)保年度工作匯報
- 井下充填安全知識培訓課件
- 構(gòu)網(wǎng)型電化學儲能系統(tǒng)接入配電網(wǎng)技術規(guī)定(征求意見稿)
- 2025反無人機系統(tǒng)行業(yè)市場空間、產(chǎn)業(yè)鏈及競爭格局分析報告
- 數(shù)字技術賦能紅色文化傳承:機理、困境與路徑
- 水電站安全管理體系構(gòu)建
- 2025財務經(jīng)理年終總結(jié)
- TCACM 1463-2023 糖尿病前期治未病干預指南
- 江蘇省淮安市2024-2025學年七年級上學期1月期末道德與法治
- 癌癥患者生活質(zhì)量量表EORTC-QLQ-C30
評論
0/150
提交評論