版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 華清遠(yuǎn)見培訓(xùn)中心所有;華清遠(yuǎn)見明確此文檔的,不能為任何目的以;更改,恕不另行通知;或 本文檔包含的信息 保留所利。1華清遠(yuǎn)見Android底層架構(gòu)介紹與分析Android 移植流程Android 環(huán)境搭建Ubuntu Linux :Git 1.5.4 or newer and the GNU Privacy Guard.JDK 5.0, update 12 or higher.Java 6 is not supported, because of incompatibilities with Override.flex, bison, gperf, libsdl-dev, libesd0-d
2、ev, libwxgtk2.6-dev (optional), build-essential, zip, curl.sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-devsudo apt-get install valgrindandroid official website: GIT的介紹git是一個版本系統(tǒng)。(Revision co
3、ntrol)是一種的解釋是:版本軟件工程技巧,籍以在開發(fā)的過程中,確保由不同人所編輯的同一都得到更新。它不同于Subversion、CVS這樣的集中式版本系統(tǒng)。在集中式版本系統(tǒng)中只有一個倉 庫(repository),許多個工作目錄(working copy),而像Git這樣的分布式版本作目錄都包含一個完整倉庫系統(tǒng)中,每一個工GIT一個簡單的代碼倉庫的例子git clone git:/從git:/倉庫中克隆一份代碼獲得 Android 源代碼The source is approximately 2.1GB in size. You will need 6GB free to complete
4、 the build.$ mkdir /bin $ PATH=/bin:$PATHInstalling Repo$ curlrepo/repo > /bin/repo$ chmod a+x /bin/repo$ mkdir working-directory-name$ cd working-directory-nameRun repo init to bring down the latest version of Repo with all its most recent bug fixes$ repo init -uTo check out a branch other than
5、"master", specify it with -b:$ repo init -u git://platform/manifest.git -b android-4.0.1_r1Get Android Source Code (cont.)To pull down files to your working directory from the repositories as specified in the default manifest, runSynchronizing your client To synchroni
6、ze the files for all available projects: $ repo syncTo synchronize the files for selected projects: $ repo sync project1 project2 .Android Linux kernel 特性從Linux 2.6.33版本開始,代碼將被刪除。操作系統(tǒng)Android智能Android 2.2 froyo使用的Linux kernel版本為2.6.32在Linux 2.6.32版本上Android添加了如下幾個模塊在kernel/drivers/misc目錄 binder.c bin
7、der.hlogger.c logger.h lowmemorykiller.c ram_console.ctimed_gpio.c timed_gpio.h timed_output.c timed_output.hKernel_debugger.c includelinuxKernel_debugger.h Uid_stat.c includelinuxUid_stat.h Pmem.c linux/android_pmem.hAndroid Linux kernel 特性(cont.)drivers/rtc/alarm.ckernel/power 目錄wakelock.c include
8、linuxWakelock.huserwakelock.cincludelinuxWakelock.h earlysuspend.cconsoleearlysuspend.c fbearlysuspend.cmm/ashmem.c linux/ashmem.hdrivers/input/misc 目錄Gpio_axis.c Gpio_event.c Gpio_event.hGpio_input.c Gpio_matrix.cGpio_output.cKeychord.c Keychord.hAndroid Linux kernel 特性(cont.) drivers/input/keyrese
9、t.c keyreset.h drivers/switch 目錄switch_class.c switch_gpio.c switch.h drivers/usb/gadge 目錄Android.c include/linux/usb/android.h Android_aid.hf_adb.c f_adb.h f_mass_storage.cf_mass_storage.h driversnet 目錄Pppolac.c Pppopns.cPpp_mppe.cAndroid 特有驅(qū)動Ashmem共享內(nèi)存驅(qū)動Logger輕量級的log驅(qū)動Binder驅(qū)動(Binder driber)基于Open
10、Binder驅(qū)動,為Android平臺提供IPC的支持電源管理(Android Power Management)輕量級的的電源管理,為驅(qū)動Low Memory Killer系統(tǒng)做了優(yōu)化,包括earlysuspend等在缺少內(nèi)存的情況下,殺死進(jìn)程Android PMEM物理內(nèi)存驅(qū)動Android 軟件架構(gòu)android 源碼結(jié)構(gòu)packages: android中默認(rèn)的應(yīng)用程序源碼,比如鬧鐘,音樂撥號等等器,網(wǎng)頁瀏覽器,輸入法,framework:應(yīng)用層的框架層,屬于應(yīng)用層的基石,android的部分dalvik:java虛擬機(jī),了硬件平臺的差異external:第開源軟件工具,直接拿來,比如
11、3G上網(wǎng)使用的pppd,wifi上網(wǎng)使用的wpa_supplicant,壓縮文件工具,輕量級別數(shù)據(jù)庫bionic:c/c+函數(shù)庫,比如標(biāo)準(zhǔn)輸入輸出API,文件io API,動態(tài)庫文件加載的API,線程調(diào)試庫(libthread_db)hardware:硬件相關(guān)的代碼,也是我們常說的硬件抽象層,比如wifi,camera,sensor,3G,gpssystem:底層文件系統(tǒng)庫,包括系統(tǒng)的第一個進(jìn)程init的源碼,android自帶令集toolboxbuild: android中的編譯和開發(fā)板配置系統(tǒng),所有的編譯環(huán)境的配置都是由這里面的和工具管理prebuilt:預(yù)編譯文件夾,我們的交叉工具鏈就放
12、在這里vendor:配置具體開發(fā)板的文件夾 development:開發(fā)者需要的一些例程及調(diào)試工具,主要是用來生成SDK的out: 目標(biāo)文件的最終歸宿,android文件系統(tǒng)制作就是使用這里面的文件Ccode frameworkJNIAndroidRuntimeUser SpaceKernel SpaceHardwaresystem SpaceHardware systemAndroid devices DriversAndroid core DriversLinux kernel driversAndroid porting worksHardware layersAndroid libra
13、riesApplication FrameworkSystem APIAndroid Applicationandroid編譯的步驟1,source ./build/envsetup.sh2,choosecombo 3,make步驟很簡單過程很復(fù)雜第一步,source ./build/envsetup.sh,這就涉及到linux中shell編程的相關(guān)執(zhí)行了只是,其實(shí)shell就是一系列的linux 命令的集合,其語法有一定要求,但是類似于c語言的風(fēng)格envsetup.sh定義了很多function,當(dāng)我們定義一個function,將它的名字和定義存放在內(nèi)存,我們可以象調(diào)用shell 命令的方式
14、來調(diào)用它比如可以使用mmm , mm,choosecombo等等命令最終的結(jié)果:export PLATFORM_VERSION_CODENAME=RELexport PLATFORM_VERSION=2.1-update1 export TARGET_PRODUCT=fs100export TARGET_BUILD_VARIANT=eng export TARGET_SIMULATOR=false export TARGET_BUILD_TYPE=release export TARGET_ARCH=armexport HOST_ARCH=x86 export HOST_OS=linuxexp
15、ort HOST_BUILD_TYPE=release export BUILD_ID=ERE27PLATFORM_VERSION_CODENAME:SDK的版本為releaseTARGET_PRODUCT=fs100:每個公司都有,從多個中選擇一個目標(biāo)TARGET_BUILD_VARIANT=eng:Android 預(yù)設(shè)可以編譯成三種模式: eng, userdebug,user。user: 為版本,給用戶使用eng 或 userdebug :給工程師使用,用于調(diào)試Android.mk的介紹在linux下,可以通過GNU Makefile來對源碼工程進(jìn)行源碼管理和管理,Android.mk文
16、件是GNU Makefile的一小部分,它用來對Android程序進(jìn)行編譯。Android.mk文件中描述了哪些C文件將被編譯且指明了如何編譯。掌握Android.mk文件的編寫主要是掌握其里頭將要使用的一些關(guān)鍵字Android.mk在開發(fā)中一般會有以下用法:1,編譯可執(zhí)行程序2,編譯動態(tài)或靜態(tài)庫3,預(yù)編譯文件4,編譯apk包以這個四個功能來介紹Android.mk的用法編譯中最基本的三要素1,源碼文件2,目標(biāo)文件3,編譯方式所以Android.mk是以這個三個要素來編寫的1,指定源碼文件名以及文件所在路徑2,指定目標(biāo)文件名以及文件所在路徑3,編譯成可執(zhí)行程序還是動態(tài)庫,或者是其他的一個最簡單
17、的Android.mkLOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= hello_exe LOCAL_SRC_FILES := main.c include $(BUILD_EXECUTABLE) 注釋:LOCAL_PATH變量用于在開發(fā)樹中查找源文件,宏函數(shù)譯系統(tǒng)提供,用于返回當(dāng)前源碼路徑my-dir, 由編CLEAR_VARS :由編譯系統(tǒng)提供,表示清除許多 LOCAL_變量LOCAL_MODULE:變量必須定義,以標(biāo)識你在 Android.mk文件中描述的每個模塊,也可以理解為編譯后的目標(biāo)文件的名字,即
18、main.c會編譯成可執(zhí)行程序hello_exeLOCAL_SRC_FILES:變量指定需要編譯的源文件BUILD_EXECUTABLE:指明要編譯成可執(zhí)行文件編譯庫LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE = libhello LOCAL_SRC_FILES = main.cTARGET_PRELINK_MODULES := false LOCAL_C_INCLUDES = $(INCLUDES) include $(BUILD_SHARED_LIBRARY)如果想編譯成靜態(tài)庫,只需要把BUILD_SHARE
19、D_LIBRARY 替換成BUILD_STATIC_LIBRARY預(yù)編譯LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE := GfanMobile.apk LOCAL_MODULE_TAGS := user LOCAL_MODULE_CLASS := APPSLOCAL_SRC_FILES := $(LOCAL_MODULE)include $(BUILD_PREBUILT)將GfanMobile.apk預(yù)編譯至out/target/product/*/system/app/編譯apkLOCAL_PATH:= $(c
20、all my-dir)include $(CLEAR_VARS) LOCAL_MODULE_TAGS := APPS LOCAL_SRC_FILES := $(call all-java-files-under, src)LOCAL_PACKAGE_NAME := FarsightHello LOCAL_SDK_VERSION := currentinclude $(BUILD_PACKAGE)編譯產(chǎn)生的中間文件可執(zhí)行程序、動態(tài)庫和靜態(tài)庫生成的文件在分別在:out/target/product/*/obj/EXECUTABLE out/target/product/*/obj/STATIC_L
21、IBRARYout/target/product/*/obj/SHARED_LIBRARY其目標(biāo)的文件夾分別為:_intermediates_shared_intermediates_static_intermediates為每個模塊中LOCAL_MODULE所定義的名字。以上使用了大量的宏,實(shí)際android系統(tǒng)中還有很多類似的宏Ø LOCAL_MODULEØ LOCAL_SRC_FILES 編譯的目標(biāo)對象 編譯的源文件Ø LOCAL_C_INCLUDES 需要包含的頭文件目錄Ø LOCAL_SHARED_LIBRARIES 時(shí)需要的外部庫Ø
22、 LOCAL_PRELINK_MODULEØ LOCAL_JAVA_LIBRARIES 是否需要prelink處理 加入jar包Ø LOCAL_PACKAGE_NAME該變量定義 Java 應(yīng)用程序的名字用Ø LOCAL_PATH 編譯時(shí)的目錄Ø include $(CLEAR_VARS) 清除之前的一些系統(tǒng)變量Ø BUILD_SHARED_LIBRARY指明要編譯成動態(tài)庫Ø BUILD_HOST_STATIC_LIBRARY 指明要編譯成主機(jī)端靜態(tài)庫Ø BUILD_STATIC_LIBRARY 指明要編譯成靜態(tài)庫Ø
23、; BUILD_HOST_SHARED_LIBRARY 指明要編譯成主機(jī)端動態(tài)庫Ø BUILD_EXECUTABLE 指明要編譯成可執(zhí)行文件Ø BUILD_HOST_EXECUTABLE 指明要編譯成主機(jī)端可執(zhí)行文件Ø BUILD_PACKAGE 指明要編譯成apkØ BUILD_HOST_PREBUILT 指明要編譯成主機(jī)端預(yù)編譯文件Ø BUILD_PREBUILT 指明要編譯成預(yù)編譯文件Ø BUILD_JAVA_LIBRARY 指明要編譯成動態(tài)jar包Ø BUILD_STATIC_JAVA_LIBRARY 指明要編譯成靜
24、態(tài)jar包Ø BUILD_HOST_JAVA_LIBRARY 指明要編譯成主機(jī)端jar包文件系統(tǒng)介紹Ø ramdiskØ system data cachesdcardramdisk來自何方:Android源碼編譯后,產(chǎn)生root目錄(out/target/product/ ramdisk.img名/root),經(jīng)過壓縮后生成我是什么:Android的根文件系統(tǒng),包含了兩個最重要的文件init, init.rc;將去何方:ramdisk.img一般會作為一個分,的部download至內(nèi)存,執(zhí)行init程序介質(zhì)中,系統(tǒng)啟動時(shí)download 到systemØ
25、; 來自何方:Android源碼編譯后,產(chǎn)生system目錄(out/target/product/system),經(jīng)過壓縮后生成system.imgØ 我是什么:Android系統(tǒng)文件夾,主要包含以下幾個內(nèi)容:Ø app 應(yīng)用程序apk名Ø bin可執(zhí)行文件Ø lib 系統(tǒng)的庫文件Ø framework Android框架jar包Ø etc系統(tǒng)配置文件Ø 將去:system.img一般會作為一個在根文件系統(tǒng)(ramdisk)起來后,通過的部分,download至介質(zhì)中init.rc將system.img掛載到/system
26、dataØ 來自何方: Android源碼編譯后,產(chǎn)生data目錄(out/target/product/ 產(chǎn)品名/system),經(jīng)過壓縮后生成userdata.imgØ 我是什么: data是Android系統(tǒng)運(yùn)行時(shí)的系統(tǒng)文件夾,一般為空。Ø 將去何方: userdata.img一般會作為一個儲介質(zhì)中,在根文件系統(tǒng)( ramdisk)起來后,通過的部分, download至存init.rc將userdata.img掛載到/data目錄下。如果系統(tǒng)是第一次啟動,需要將system/app目錄下的apk安裝到/data目錄下,此外, dalvik虛擬機(jī)的一些cac
27、he,程序中需要使用的目錄也都在此創(chuàng)建,如 WIFI需要使用到/data/misc/wifi/data/system/wpa_supplicantcache Android源碼編譯后,并產(chǎn)生cache相關(guān)的東西, cache一般會作為一個 ramdisk)起來后,通過的部分,在根文件系統(tǒng)(init.rc將目標(biāo)設(shè)備中定義 為cache的介質(zhì)掛載到/cache目錄下,用于存放程 序中間使用到的臨時(shí)文件。 /cache目錄下的文件 ,系統(tǒng)啟動時(shí),一般會將其內(nèi)容sdcard 現(xiàn)在一般的手持設(shè)備,都會支持大容量數(shù)據(jù)存 儲,即U盤功能,可能是SD卡也可能是INAND, Android也如此 /sdcard
28、(或者/mnt/sdcard)目錄就是提供給大容量數(shù)據(jù) 儲掛載的,當(dāng)然,一般還需要系統(tǒng)支持?jǐn)U展micro SD 卡 /sdcard一般是用來存放用戶多數(shù)據(jù)或者一些私人 數(shù)據(jù)的空間,也可以用來存放用戶安裝的應(yīng)用程序結(jié)束內(nèi)容提綱jni的介紹和作用jni在android系統(tǒng)中的應(yīng)用jni的編寫和編譯技術(shù)Android調(diào)試方法Android 日志系統(tǒng)介紹logcat使用介紹ADB使用方法JNI的介紹體:java應(yīng)用程序如何與linux底層交互?android實(shí)現(xiàn)了很好的分層機(jī)制,從而使得開發(fā)者開發(fā)更加專注,但是android的應(yīng)用層和框架層使用的開發(fā)語言為java,Java是一種平臺無關(guān)性的語言,平臺
29、對于上層的java代碼來說是透明的,而android是基于linux的一個操作系統(tǒng),linux只提供了c/c+或者是匯編的接口給開發(fā),因此,為了使得android系統(tǒng)運(yùn)行正常,必須想辦法把java語言與c/c+連接起來,這個連接器螺絲就是jni技術(shù)jni的概念Java 本機(jī)接口(Java Native Interface (JNI) )是一個本機(jī)編程接口,JNIJava代碼使用以其它語言(譬如 C 和 C+)編寫的代碼和代碼庫jni在android系統(tǒng)中的應(yīng)用 jni在android系統(tǒng)中得到了大量的運(yùn)用,比如wifi, 3G,camera,g-sensor等等,只要是涉及到平臺硬件,都需要用
30、到j(luò)niwifi框架WirelessSettings.javaWifiManager.javaWifiService.javaWifiNative.javaandroid_net_wifi_wifi.cppwifi.cexternal/wpa_supplicant/rt3070sta.kojni的編寫Java調(diào)用c/c+的框架:Java代碼-> jni代碼 -> c/c+代碼寫一個簡單的Java app 來調(diào)用 C/C+代碼打印“HelloWorld!”的過程。這個過程由下面這幾個步驟組成:1.編寫java代碼,創(chuàng)建一個類(HelloWorld.java)聲明native meth
31、od。2,編寫jni文件3,將jni實(shí)現(xiàn)文件編譯成一個native lib第一步:編寫java代碼,創(chuàng)建一個類(HelloWorld.java),并且使用本地方法。package com.farsight;public class HelloActivity extends Activity public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); this.fsSayHello();static System.loadLi
32、brary("hello_jni"); /noticeprivate static native int fsSayHello(); /notice declareHelloActivity類一個本地 fsSayHello()方法。還有個static初始化函數(shù)native方法的: 和一般java程序語言的中有不同之處,如fsSayHello()。一個native方法必須包含native修飾符第二步:構(gòu)建jni函數(shù),并且編譯成本地庫jint JNI_OnLoad(JavaVM* vm, void*jint result = -1;JNIEnv* env = NULL; LOG
33、I("JNI_OnLoad");)if (vm->GetEnv(void *)&env, JNI_VERSION_1_4) != JNI_OK) LOGE("ERROR: GetEnv failed");goto bail;if (registerNatives(env) != JNI_TRUE) LOGE("ERROR: registerNatives failed"); goto bail;result = JNI_VERSION_1_4; bail:return result;接下來就要實(shí)現(xiàn)registerNati
34、ves(env)static JNINativeMethod gMethods = "fsSayHello", "()I" , (void*)hello_printf ,;static const char *classPathName = "com/farsight/HelloActivity static int registerNatives(JNIEnv* env)jclass clazz;clazz = env->FindClass(classPathName); if (clazz = NULL) return JNI_FAL
35、SE;"if (env->RegisterNatives(clazz, gMethods, sizeof(gMethods) / sizeof(gMethods0) < 0) return JNI_FALSE;return JNI_TRUE;typedef struct const char* name;const char* signature;void*fnPtr; JNINativeMethod;第三步:編寫c/c+代碼實(shí)現(xiàn)c語言的hello_printf(),這個就是linux工程師的強(qiáng)項(xiàng)了,學(xué)習(xí)c語言第一天干的就是這個事static jint hello_pri
36、ntf(JNIEnv *env, jobject thiz) LOGI(">>>>jni test : hello world<<<<<n");return 0;LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= com.farsight.hello.cpp LOCAL_SHARED_LIBRARIES := libutils LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)LOCAL_MODULE:= libhell
37、o_jni LOCAL_PRELINK_MODULE := falseinclude $(BUILD_SHARED_LIBRARY)p編源碼都已經(jīng)寫好了,需要一個編譯規(guī)則,把譯一個so,可以用Android.mk,可以參考development/samples/SimpleJNI/jni/Android.mkAndroid啟動流程Android 啟動過程Android從Linux系統(tǒng)啟動有4個步驟;init進(jìn)程啟動Native服務(wù)啟動 System Server,Android服務(wù)啟動 Home啟動總體啟動框架圖initial進(jìn)程(systemcoreinit)Android啟動后,系統(tǒng)執(zhí)行的
38、第一個進(jìn)程是一個名稱為init的可執(zhí)行程序。提供了以下的功能: 設(shè)備管理啟動 執(zhí)行基本的功能 啟動各種服務(wù)代碼的路徑:system/core/init編譯的結(jié)果是一個可執(zhí)行文件:init啟動的路徑:system/core/rootdir/init.rcinitial進(jìn)程(systemcoreinit) init進(jìn)程,由內(nèi)核啟動的用戶級進(jìn)程。內(nèi)核自行啟動(已經(jīng)被載入內(nèi)存,開始運(yùn)行,并已初始化所有的設(shè)備驅(qū)動程序和數(shù)據(jù)結(jié)構(gòu)等)之后,就通過啟動一個用戶級程序init的方式,完成引導(dǎo)進(jìn)程。init始終是第一個進(jìn)程.Init.rc Init.*.rc Init進(jìn)程一起來就根據(jù)init.rc和init.個基
39、本的服務(wù):.rc文件建立了幾servicemanamgerzygote 。 最后Init并不,而是擔(dān)當(dāng)起property service的功能。initial進(jìn)程(systemcoreinit)Init.rcInit.c: parse_config_file(Init.rc)parse_config_file(Init.marvel.rc)文件:Init.rc和Init.x.rc(硬件平臺相關(guān))Init.rc是Android(用法參考規(guī)定的初始化System/Core/Init/readme.txt) ,在init啟動后被執(zhí)行,語法主要包含以下內(nèi)容:Commands:命令A(yù)ction:動作Tr
40、iggers:觸發(fā)Services:服務(wù)Option;選項(xiàng)Properties:屬性Android Init Language簡介Commands(命令)為一些基本的操作:export PATH /sbin:/system/sbin:/system/bin:/system/xbinexport LD_LIBRARY_PATH /system/lib mkdir /mnt 0775 root systemmkdir /mnt/sdcard 0000 system systemmount cgroup none /acct ccct這些命令在init可執(zhí)行程序中被關(guān)的函數(shù)來實(shí)現(xiàn)。,然后調(diào)用相And
41、roid Init Language簡介(cont.) Actions(動作)表示一系列令,通常在Triggers(觸發(fā))中調(diào)用,動作和觸發(fā)的形式為on<trigger><comannd><comannd> <comannd> Actions使用示例如下:on boot# basic network init ifup lohostname localhost domainname localdomain Boot表示一個觸發(fā)條件,在boot發(fā)生后進(jìn)行init network的動作Android Init Language簡介(cont.)Ser
42、vices(服務(wù))一般表示啟動一個可執(zhí)行程序,Options(選項(xiàng))為服務(wù)的附加內(nèi)容,用于配合服務(wù)使用。 Services和Options示例如下:service vold /system/bin/voldsocket vold stream 0660 root mount Vold是兩個服務(wù)的名稱, /system/bin/vold為可執(zhí)行程序, socket 就是配合服務(wù)使用的選項(xiàng)Android Init Language簡介(cont.)Properties(屬性)是系統(tǒng)中使用的一些值,可以進(jìn)行設(shè)置和。在啟動腳步中屬性的使用如下所示:setprop ro.FOREGROUND_APP_A
43、DJ 0setprop ro.VISIBLE_APP_ADJ 1setprop ro.SECONDARY_SERVER_ADJ 2 on property:persist.service.adb.enable=1start adbdSetprop用來設(shè)置屬性,on property 用來屬性。這里的屬性在整個Android系統(tǒng)運(yùn)行中都是一致的。Android Init Language簡介(cont.)Init關(guān)鍵字可以參考init進(jìn)程的system/core/init/keyword.h文件int do_mkdir(int nargs, char *args)mode_t mode = 07
44、55;/* mkdir <path> mode owner group if (nargs >= 3) mode = strtoul(args2, 0, 8);if (mkdir(args1, mode) return -errno;if (nargs >= 4) uid_t uid = decode_uid(args3); gid_t gid = -1;if (nargs = 5) gid = decode_uid(args4);if (chown(args1, uid, gid) return -errno;如創(chuàng)建文件令keyword*/KEYWORD(mkdir,
45、 COMMAND, 1, do_mkdir)使用mkdir來創(chuàng)建文件,調(diào)用了do_mkdir()函數(shù),這個函數(shù)在system/core/init/builtins.c 文件里面。這些功能一般都是調(diào)用Linux的標(biāo)準(zhǔn)庫實(shí)現(xiàn)的。屬性系統(tǒng)屬性系統(tǒng)的API命令: /system/bin/getprop/system/bin/setprop代碼:int property_get(const char *key, char *value, const char *default_value);int property_set(const char *key, const char *value);屬性文件
46、服務(wù)啟制我們來看看Init是這樣.rc文件開啟服務(wù)的。1. 打開.rc文件,文件內(nèi)容 systemcoreinitinit.c將service信息放置到service_list中。 systemcoreinit parser.c2. restart_service() systemcoreinitinit.c service_startexecve().建立service進(jìn)程。/system/bin/logd/sbin/adbd/system/bin/usbd/system/bin/debuggerd/system/bin/rild/system/bin/app_process/system/
47、bin/runtime/system/bin/dbus-daemon system_serverNative服務(wù)啟動Servicemanager和zygote進(jìn)程就奠定了Android的基礎(chǔ)。Zygote這個進(jìn)程起來才會建立起真正的Android運(yùn)行空間,初始化建立的Service都是Navtive service.在.rc文件中zygote的描述:service zygote /system/bin/app_process -Xzygote /system/bin -zygote -start- system-serverZygote從main()frameworksbasecmdsapp_main.cpp開始。1.mai
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025完整施工隊(duì)合同
- 兼職中醫(yī)師聘用合同
- 活動承辦合同模板
- 合同示范文本庫
- 變壓器承包合同
- 企業(yè)員工勞動合同范本
- 連帶責(zé)任擔(dān)保借款合同范本
- 2025關(guān)于土地轉(zhuǎn)讓合同范本
- 定制家具合同
- 知識產(chǎn)權(quán)許可使用及轉(zhuǎn)讓合同范本
- 個人安全與社會責(zé)任的基本知識概述
- 建筑裝飾工程計(jì)量與計(jì)價(jià)試題一及答案
- 簡易勞務(wù)合同電子版
- 明代文學(xué)緒論
- 通用稅務(wù)自查情況說明報(bào)告(7篇)
- 體育賽事的策劃、組織與實(shí)施 體育賽事利益相關(guān)者
- 分析化學(xué)(高職)PPT完整版全套教學(xué)課件
- 晚熟的人(莫言諾獎后首部作品)
- m拱頂儲罐設(shè)計(jì)計(jì)算書
- 2023外貿(mào)業(yè)務(wù)協(xié)調(diào)期中試卷
- 新人教鄂教版(2017)五年級下冊科學(xué)全冊教學(xué)課件
評論
0/150
提交評論