安卓基礎知識總結(jié)_第1頁
安卓基礎知識總結(jié)_第2頁
安卓基礎知識總結(jié)_第3頁
安卓基礎知識總結(jié)_第4頁
安卓基礎知識總結(jié)_第5頁
已閱讀5頁,還剩165頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論