Android開機啟動流程_第1頁
Android開機啟動流程_第2頁
Android開機啟動流程_第3頁
Android開機啟動流程_第4頁
Android開機啟動流程_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Android的開機流程1. 系統(tǒng)引導bootloader1) 源碼:bootable/bootloader/*2) 說明:加電后后,CPPU將先先執(zhí)行bboottloaaderr程序,此處有有三種選選擇a) 開機按按Cammeraa+Poowerr啟動到到fasstbooot,即命令令或SDD卡燒寫寫模式,不加載載內核及及文件系系統(tǒng),此此處可以以進行工工廠模式式的燒寫寫b) 開機按按Homme+PPoweer啟動動到reecovveryy模式,加載rrecooverry.iimg,reccoveery.imgg包含內內核,基基本的文文件系統(tǒng)統(tǒng),用于于工程模模式的燒燒寫c) 開機按按Powwe

2、r,正常啟啟動系統(tǒng)統(tǒng),加載載booot.iimg,booot.iimg包包含內核核,基本本文件系系統(tǒng),用用于正常常啟動手手機(以以下只分分析正常常啟動的的情況)2. 內內核keerneel1) 源碼:kerrnell/*2) 說明:kerrnell由boootlloadder加加載3. 文文件系統(tǒng)統(tǒng)及應用用iniit1) 源碼:sysstemm/coore/iniit/*2) 配置文文件:ssysttem/roootdiir/iinitt.rcc,3) 說明:iniit是一一個由內內核啟動動的用戶戶級進程程,它按按照innit.rc中中的設置置執(zhí)行:啟動服服務(這這里的服服務指llinuux底

3、層層服務,如addbd提提供addb支持持,voold提提供SDD卡掛載載等),執(zhí)行命命令和按按其中的的配置語語句執(zhí)行行相應功功能4. 重重要的后后臺程序序zyggotee1) 源碼:fraamewworkks/bbasee/cmmds/appp_maain.cppp等2) 說明:zyggotee是一個個在innit.rc中中被指定定啟動的的服務,該服務務對應的的命令是是/syysteem/bbin/appp_prroceessa) 建立JJavaa Ruuntiime,建立虛虛擬機b) 建立SSockket接接收AcctivvityyMannanggerSServvicee的請求求,用于于F

4、orrk應用用程序c) 啟動SSysttem Serrverr5. 系系統(tǒng)服務務sysstemm seerveer1) 源碼:fraamewworkks/bbasee/seerviicess/jaava/comm/anndrooid/serrverr/SyysteemSeerveer.jjavaa2) 說明:被zyygotte啟動動,通過過Sysstemm Maanagger管管理anndrooid的的服務(這里的的服務指指fraamewworkks/bbasee/seerviicess下的服服務,如如衛(wèi)星定定位服務務,剪切切板服務務等)6. 桌桌面laaunccherr1) 源碼:Actti

5、viityMManaagerrSerrvicce.jjavaa為入口口,paackaagess/appps/lauunchher*實現(xiàn)2) 說明:系統(tǒng)啟啟動成功功后SyysteemSeerveer使用用xxxx.syysteemReeadyy()通通知各個個服務,系統(tǒng)已已經就緒緒,桌面面程序HHomee就是在在ActtiviityMManaagerrSerrvicce.ssysttemRReaddy()通知的的過程中中建立的的,最終終調用()啟llaunncheer7. 解解鎖1) 源碼:fraamewworkks/ppoliiciees/bbasee/phhonee/coom/aandrro

6、idd/innterrnall/pooliccy/iimpll/*llockk*2) 說明:系統(tǒng)啟啟動成功功后SyysteemSeerveer調用用wm.sysstemmReaady()通知知WinndowwMannageerSeerviice,進而調調用PhhoneeWinndowwMannageer,最最終通過過LocckPaatteernKKeygguarrdViiew顯顯示解鎖鎖界面,跟蹤代代碼可以以看到解解鎖界面面并不是是一個AActiivitty,這這是只是是向特定定層上繪繪圖,其其代碼了了存放在在特殊的的位置8. 開開機自啟啟動的第第三方應應用程序序1) 源碼:fraamewwo

7、rkks/bbasee/seerviicess/jaava/comm/anndrooid/serrverr/amm/AcctivvityyMannageerSeerviice.javva2) 說明:系統(tǒng)啟啟動成功功后SyysteemSeerveer調用用ActtiviityMManaagerrNattivee.geetDeefauult().ssysttemRReaddy()通知AActiivittyMaanagger啟啟動成功功,AcctivvityyMannageer會通通過置變變量mBBoottingg,通知知它的另另一線程程,該線線程會發(fā)發(fā)送廣播播anddroiid.iinteent.

8、acttionn.BOOOT_COMMPLEETEDD以告知知已注冊冊的第三三方程序序在開機機時自動動啟動。9. 總總結綜上上所述,系統(tǒng)層層次關于于啟動最最核心的的部分是是zyggotee(即aapp_proocesss)和和sysstemm seerveer,zzygoote它它負責最最基本的的虛擬機機的建立立,以支支持各個個應用程程序的啟啟動,而而sysstemm seerveer用于于管理aandrroidd后臺服服務,啟啟動步驟驟及順序序。10.參參考 HYPERLINK /basonjiang_sz/category/648399.aspx httpp:/bloog.ccsdnn.n

9、eet/bbasoonjiiangg_szz/caateggoryy/64483999.aaspxxAndrroidd 啟動動過程詳詳解Andrroidd從Liinuxx系統(tǒng)啟啟動有44個步驟驟;(1) iniit進程程啟動(2) Nattivee服務啟啟動(3) Sysstemm Seerveer,AAndrroidd服務啟啟動(4) Homme啟動動總體啟動動框架圖圖如:第一步:iniitiaal進程程(syysteem/ccoree/innit) innit進進程,它它是一個個由內核核啟動的的用戶級級進程。內核自自行啟動動(已經經被載入入內存,開始運運行,并并已初始始化所有有的設備備驅動

10、程程序和數數據結構構等)之之后,就就通過啟啟動一個個用戶級級程序iinitt的方式式,完成成引導進進程。iinitt始終是是第一個個進程.Initt.rccInitt.maarveell.rcInitt進程一一起來就就根據iinitt.rcc和innit.xxxx.rcc腳本文文件建立立了幾個個基本的的服務:serrviccemaanammgerr zyggotee 。最后Innit并并不退出出,而是是擔當起起prooperrty serrvicce的功功能。1.1腳腳本文件件inittSyysteem/CCoree/InnitInitt.c: paarsee_coonfiig_ffilee(

11、Innit.rc) parrse_connfigg_fiile(Iniit.mmarvvel.rc)解析腳本本文件:Iniit.rrc和IInitt.xxxxx.rc(硬件平平臺相關關)Initt.rcc是Anndrooid自自己規(guī)定定的初始始化腳本本(Anndrooid Iniit LLangguagge, Sysstemm/Coore/Iniit/rreaddme.txtt)該腳本包包含四個個類型的的聲明:Actiionss Commmandds Servvicees Optiionss. 1.2 服務啟啟動機制制我們來看看看Innit是是這樣解解析.rrc文件件開啟服服務的。(1)打打開

12、.rrc文件件,解析析文件內內容 sysstemm/coore/iniit/iinitt.c將serrvicce信息息放置到到serrvicce_llistt中。 syysteem/ccoree/innit parrserr.c(2)rresttartt_seerviice() sysstemm/coore/iniit/iinitt.c serrvicce_sstarrt exeecvee().建立立serrvicce進程程。第二步 Zyggotee Serrviccemaanagger和和zyggotee進程就就奠定了了Anddroiid的基基礎。ZZygoote這這個進程程起來才才會建立立

13、起真正正的Anndrooid運運行空間間,初始始化建立立的Seerviice都都是Naavtiive serrvicce.在在.rcc腳本文文件中zzygoote的的描述:servvicee zyygotte /sysstemm/biin/aapp_proocesss -Xzyygotte /sysstemm/biin -zyygotte -sttartt-syysteem-sservver所以Zyygotte從mmainn()frrameeworrks/basse/ccmdss/appp_mmainn.cppp開始始。(1) maiin()fframmewoorkss/baase/cmdds

14、/aapp_maiin.ccpp建立Jaava Runntimme runttimee.sttartt(ccom.anddroiid.iinteernaal.oos.ZZygooteIInitt, staartSSysttemSServver); (2) runntimme.sstarrtAAndrroiddRunntimme.ccpp建立虛擬擬機 運行:ccom.anddroiid.iinteernaal.oos.ZZygooteIInitt:maain函函數。 (3)mmainn()ternnal.os.ZyggoteeIniit/正真的的Zyggotee。regiisteerZyygot

15、teSoockeet();/登記LListten端端口 starrtSyysteemSeerveer(); 進入Zyygotte服務務框架。 經過這幾幾個步驟驟,Zyygotte就建建立好了了,利用用Socckett通訊,接收AActiivittyMaananngerrSerrvicce的請請求,F(xiàn)Forkk應用程程序。第三步 Sysstemm Seerveer HYPERLINK mailto:startSystemServerernal.os.ZygoteInit在Zygote starrtSyysteemSeerveerccom.anddroiid.iinteernaal.oos.ZZy

16、gooteIInitt在Zyygotte上fforkk了一個個進程:coom.aandrroidd.seerveer.SSysttemSServver.于是SSysttemSServver(SyysteemSeerveer.jjavaa)就建建立了。Anddroiid的所所有服務務循環(huán)框框架都是是建立SSysttemSServver(SyysteemSeerveer.jjavaa)上。在SyysteemSeerveer.jjavaa中看不不到循環(huán)環(huán)結構,只是可可以看到到建立了了iniit2的的實現(xiàn)函函數,建建立了一一大堆服服務,并并AdddSerrvicce到sservvicee Maanag

17、ger。mainn() ccom/anddroiid/sservver/SysstemmSerrverr iniit1();Initt1()是在NNatiive空空間實現(xiàn)現(xiàn)的(ccom_anddoirrd_sservver_sysstemmSerrverr.cppp)。我們一一看這個個函數就就知道了了,innit11-ssysttem_iniit() SSysttem_iniit.ccpp在sysstemm_innit()我們們看到了了循環(huán)閉閉合管理理框架。 Calll comm/anndrooid/serrverr/SyysteemSeerveer, iinitt2 . ProocesssS

18、ttatee:sselff()-sttarttThrreaddPoool(); IPPCThhreaadSttatee:sselff()-jooinTThreeadPPooll();initt2()SyysteemSeerveer.jjavaa中建立立了Anndrooid中中所有要要用到的的服務。這個innit22()建建立了一一個線程程,來NNew Serrvicce和AAddSServvicee來建立立服務第三步 Homme啟動動 HYPERLINK mailto:在ServerThreadSystemServer.java 在SerrverrThrreaddSyysteemSeervee

19、r.jjavaa后半段段,我們們可以看看到系統(tǒng)統(tǒng)在啟動動完所有有的Anndrooid服服務后,做了這這樣一些些動作:(1) 使用xxxx.sysstemmReaady()通知知各個服服務,系系統(tǒng)已經經就緒。(2) 特別別對于AActiivittyMaanaggerSServvicee.syysteemReeadyy(回調調) Widdgett.waallppapeer,iimm(輸入法法)等rreaddy通知知。Homee就是在在ActtiviityMManaagerrSerrvicce.ssysttemRReaddy()通知的的過程中中建立的的。下面面是AcctivvityyMannagee

20、rSeerviice.sysstemmReaady()的偽偽代碼:systtemRReaddy()AcctivvityyMannageerSeerviice.javva ressumeeToppActtiviityLLockked() staartHHomeeActtiviityLLockked();/如果果是第一一個則啟啟動HoomeAActiivitty。 staartAActiivittyLoockeed(。)CATTEGOORY_HOMMEAndrroidd Boootiing:initt iss thhe ffirsst pproccesss affterr keerneel sst

21、arrtedd. TThe corrressponndinng ssourrce codde lliess inn: ddeviice/sysstemm/innit. Itt dooes thee foolloowinng ttaskks sstepp byy sttep: 1.Innitiialiize logg syysteem. 2.Paarsee /iinitt.rcc annd /iniit.%harrdwaare%.rcc. 3. EExeccutee eaarlyy-innit acttionn inn thhe ttwo filles parrsedd inn sttep 2.

22、 4. DDeviice speeciffic iniitiaalizze. Forr exxampple, maake alll deevicce nnodee inn /ddev andddowwnlooad firrmwaaress. 5. IInittiallizee prropeertyy syysteem. Acttuallly thee prropeertyy syysteem iis wworkkingg ass a shaare memmoryy. LLogiicallly it loooks likke aa reegisstryy unnderr Wiindoows sy

23、sstemm. 6. EExeccutee innit acttionn inn thhe ttwo filles parrsedd inn sttep 2. 7. SStarrt pproppertty sservvicee. 8. EExeccutee eaarlyy-booot andd booot acttionns iin tthe twoo fiiless paarseed iin sstepp 2. 9. EExeccutee prropeertyy acctioon iin tthe twoo fiiless paarseed iin sstepp 2. 10.Entter i

24、ntto aan iindeefinnitee looop to waiit ffor devvicee/prropeertyy seet/cchilld pproccesss exxit eveentss. FFor exaamplle, if an SD carrd iis ppluggineed, iniit wwilll reeceiive a ddeviice addd evventt, sso iit ccan makke nnodee foor tthe devvicee. MMostt off thhe iimpoortaant proocesss iis fforkked i

25、n iniit, so if anyy off thhem craasheed, iniit wwilll reeceiive a SSIGCCHLDD thhen traansllatee itt innto a cchilld pproccesss exxit eveent, soo inn thhe lloopp innit cann haandlle tthe proocesss eexitt evventt annd eexeccutee thhe ccommmandds ddefiinedd inn *.rc(it willl rrun commmannd oonreestaart

26、). The .rcc fiile is a sscriipt fille ddefiinedd byy Anndrooid. Thhe ddefaaultt iss deevicce/ssysttem/roootdiir/iinitt.rcc. WWe ccan takke aa looot at thee fiile forrmatt(deevicce/ssysttem/iniit/rreaddme.txtt iss a goood ooverralll inntrooducctioon oof tthe scrriptt). Bassicaallyy thhe sscriipt fill

27、e cconttainns aactiionss annd sservvicees. Actiionss Actiionss arre nnameed ssequuencces of commmannds. Acctioons havve aa trriggger whiich is useed tto ddeteermiine wheen tthe acttionn shhoulld ooccuur. Whhen an eveent occcurss whhichh maatchhes an acttionns triiggeer, thaat aactiion is addded to t

28、hee taail of a tto-bbe-eexeccuteed qqueuue (unllesss itt iss allreaady on thee quueuee). Eachh acctioon iin tthe queeue is deqqueuued in seqquennce andd eaach commmannd iin tthatt acctioon iis eexeccuteed iin ssequuencce. Innit hanndlees ootheer aactiivittiess (ddeviice creeatiion/desstruuctiion, pr

29、ropeertyy seettiing, prroceess resstarrtinng) beetweeen thhe eexeccutiion of thee coommaandss inn acctivvitiies. Actiionss taake thee foorm of: on . Servvicees Servvicees aare proograams whiich iniit llaunnchees aand (opptioonallly) reestaartss whhen theey eexitt. Serrvicces takke tthe forrm oof: se

30、rvvicee * . Optiionss Optiionss arre mmodiifieers to serrvicces. TTheyy afffecct hhow andd whhen iniit rrunss thhe sservvicee. Trigggerrs Trigggerrs aare strringgs wwhicch ccan be useed tto mmatcch ccerttainn kiindss off evventts aand useed tto ccausse aan aactiion to occcur. The buiiltiin ssuppport

31、ted commmannds aree deefinned in devvicee/syysteem/iinitt/keeywoordss.h. Coommaandss arre iimpllemeentdd inn deevicce/ssysttem/iniit/bbulttinss.c. The iniit pproggramm onnly exeecuttes fivve kkindds oof ttrigggerrs: “eaarlyy-innit”, “iniit”, “eearlly-bboott”, “booot”, “prooperrty:*”. Taake a llookk

32、att thhe ffolllowiing linne iin ddefaaultt innit.rc. classs_sstarrt ddefaaultt Thiss liine is a ccommmandd foor tthe acttionn coorreespoondiing to “booot” trriggger. Itt wiill staart alll seerviicess whhosee cllasss naame equualss too “ddefaaultt”. By deffaullt, if no claass opttionn iss deefinned f

33、orr a serrvicce, thee seerviices cclasss nnamee iss “ddefaaultt”. So thiis llinee wiill staart alll thhe sservvicees iin tthe ordder of possitiion in thee fiile by deffaullt. (BTTW, youu caan sstarrt aany serrvicce uusinng sstarrt ccommmandds, if youu liike.) AAny serrvicce iis rrun as a fforkked pr

34、oocesss oof iinitt, ttakee a loook aat tthe souurcee coode of serrvicce_sstarrt iin ddeviice/sysstemm/innit.c. So aaccoordiing to thee deefauult iniit.rrc, thee foolloowinng sservvicees wwilll bee exxecuutedd sttep by steep: conssolee: sstarr a sheell. Thhe ssourrce is in devvicee/syysteem/bbin/ashh

35、. adbdd: sstarrt aadb daeemonn. TThe souurcee iss inn deevicce/ttoolls/aadbdd. BBy ddefaaultt iss diisabbledd. servviceemannageer: staart binnderr syysteem. Thee soourcce iis iin ddeviice/commmannds/binnderr. mounntd: moountt alll ffs ddefiinedd inn /ssysttem/etcc/moounttd.cconff iff sttartted, reec

36、eiive commmannds thrrouggh llocaal ssockket to mouunt anyy fss. TThe souurcee iss inn deevicce/ssysttem/binn/moounttd. debuuggeerd: sttartt deebugg syysteem. Thee soourcce iis iin ddeviice/sysstemm/biin/ddebuuggeerd. rildd: sstarrt rradiio iinteerfaace layyer daeemonn. TThe souurcee iss inn deevicce

37、/ccommmandds/rrindd. zygoote: sttartt Anndrooid Javva RRunttimee annd sstarrt ssysttem serrverr. IItss thhe mmostt immporrtannt sservvicee. TThe souurcee iss inn deevicce/sservverss/appp. mediia: staart AuddioFFlinngerr, MMediiaPllayeerSeerviice andd CaamerraSeerviice. Thhe ssourrce is in devvicee/c

38、oommaandss/meediaaserrverr. boottsouund: pllay thee deefauult booot ssounnd /sysstemm/meediaa/auudioo/uii/booot.mp33. TThe souurcee iss inn deevicce/ccommmandds/pplayymp33. dbuss: sstarrt ddbuss daaemoon, its oonlyy ussed by BluueZ. Thhe ssourrce is in devvicee/syysteem/BBlueetoooth/dbuus-ddaemmon.

39、hcidd: rrediirecct hhcidds stddoutt annd sstdeerr to thee Anndrooid loggginng ssysttem. Thhe ssourrce is in devvicee/syysteem/bbin/loggwraappeer. By deffaullt iis ddisaableed. hfagg: sstarrt BBlueetoooth hanndsffreee auudioo gaatewway, itts onlly uusedd byy BllueZZ. TThe souurcee iss inn deevicce/ss

40、ysttem/Bluuetooothh/blluezz-uttilss. BBy ddefaaultt iss diisabbledd. hsagg: sstarrt BBlueetoooth heaadseet aaudiio ggateewayy, iitss onnly useed bby BBlueeZ. Thee soourcce iis iin ddeviice/sysstemm/Blluettootth/bblueez-uutills. By deffaullt iis ddisaableed. insttallld: staart insstalll ppackkagee da

41、aemoon. Thee soourcce iis iin ddeviice/serrverrs/iinsttallld. flassh_rrecooverry: loaad /sysstemm/reecovveryy.immg. Thee soourcce iis iin ddeviice/commmannds/reccoveery/mtddutiils. Zygoote serrvicce ddoess thhe ffolllowiing tassks steep bby sstepp: 1. CCreaate JAVVA VVM. 2. RRegiisteer aandrroidd na

42、ativve ffuncctioon ffor JAVVA VVM. 3. CCalll thhe mmainn fuuncttionn inn thhe JJAVAA cllasss naamedd coom.aandrroidd.innterrnall.oss.ZyygotteInnit whoose souurcee iss deevicce/jjavaa/anndrooid/comm/anndrooid/intternnal/os/ZyggoteeIniit.jjavaa. a) Loaad ZZygooteIInitt cllasss b) Reggistter zyggotee s

43、oockeet c)Loaad pprelloadd cllassses(thee deefauult fille iisdeevicce/jjavaa/anndrooid/preeloaadedd-cllassses) d) Loaad pprelloadd reesouurcees e) Calll ZZygoote:foorkSSysttemSServver (immpleemenntedd inn deevicce/ddalvvik/vm/IntternnalNNatiive.c) to forrk aa neew pproccesss. IIn tthe neww prroceess

44、, caall thee maain funnctiion in thee JAAVA claass nammed comm.anndrooid.serrverr.SyysteemSeerveer, whoose souurcee iss inn deevicce/jjavaa/seerviicess/coom/aandrroidd/seerveer. i. Looad libbanddroiid_sservverss.soo iii. Calll JJNI nattivee innit11 fuuncttionn immpleemenntedd inn deevicce/llibss/ann

45、drooid_serrverrs/ccom_anddroiid_sservver_SysstemmSerrverrs. It onlly ccallls ssysttem_iniit iimpllemeenteed iin ddeviice/serrverrs/ssysttem/libbrarry/ssysttem_iniit.ccpp. If runnninng oon ssimuulattor, innstaantiiatee AuudiooFliingeer, MeddiaPPlayyerSServvicee annd CCameeraSServvicee heere. Calll ii

46、nitt2 ffuncctioon iin JJAVAA cllasss naamedd coom.aandrroidd.seerveer.SSysttemSServver, whhosee soourcce iis iin ddeviice/javva/sservvicees/ccom/anddroiid/sservver. Thhis funnctiion is verry ccritticaal ffor Anddroiid bbecaausee itt sttartt alll oof AAndrroidd JAAVA serrvicces. If nott ruunniing on

47、simmulaatorr, ccalll IPPCThhreaadSttatee:sselff()-jooinTThreeadPPooll() to entter intto sservvicee diispaatchher. SysttemSServver:innit22 wiill staart a nnew thrreadd too sttartt alll JJAVAA seerviicess ass foolloows: Coree Seerviicess: 1. SStarrtinng PPoweer MManaagerr /2. CCreaatinng AActiivitty M

48、Manaagerr 3. SStarrtinng TTeleephoony Reggisttry /4. SStarrtinng PPackkagee Maanagger /5. SSet Acttiviity Mannageer SServvicee ass Syysteem PProccesss 6. SStarrtinng CConttextt Maanagger 7. SStarrtinng SSysttem Conntexxt PProvvideers 8. SStarrtinng BBattteryy Seerviice /9. SStarrtinng AAlarrm MManaa

49、gerr /10. SStarrtinng SSenssor Serrvicce 11. SStarrtinng WWinddow Mannageer 12. SStarrtinng BBlueetoooth Serrvicce /13. SStarrtinng MMounntSeerviice/Otheer sservvicees /1. SStarrtinng SStattus Barr Seerviice 2. SStarrtinng HHarddwarre SServvicee 3. SStarrtinng NNetSStatt Seerviice 4. SStarrtinng CCo

50、nnnecttiviity Serrvicce 5. SStarrtinng NNotiificcatiion Mannageer 6. SStarrtinng DDeviiceSStorrageeMonnitoor SServvicee 7. SStarrtinng LLocaatioon MManaagerr 8. SStarrtinng SSearrch Serrvicce 9. SStarrtinng CClippboaard Serrvicce 10. SStarrtinng CChecckinn Seerviice 11. SStarrtinng WWalllpapper Serr

51、vicce 12. SStarrtinng AAudiio SServvicee 13. SStarrtinng HHeaddsettObsservver14. SStarrtinng AAdbSSetttinggsObbserrverr Finaallyy SyysteemSeerveer:iniit2 willl ccalll AcctivvityyMannageerSeerviice.sysstemmReaady to lauunchh thhe ffirsst aactiivitty bby ssenttingg Inntennt.CCATEEGORRY_HHOMEE inntennt

52、. Therre iis aanottherr waay tto sstarrt ssysttem serrverr, wwhicch iis tthrooughh a proograam nnameed ssysttem_serrverr whhosee soourcce iis ddeviice/serrverrs/ssysttem/sysstemm_maain.cppp. IIt aalsoo caallss syysteem_iinitt too sttartt syysteem sservvicees. So theere is a qquesstioon: whyy dooes A

53、nddroiid hhavee twwo mmethhodss too sttartt syysteem sservvicees? My gueess is thaat ddireectlly sstarrt ssysttem_serrverr maay hhavee syynchhronnouss prrobllem witth zzygoote beccausse ssysttem_serrverr wiill calll JJNI to staart SysstemmSerrverr:iinitt2, whiile at thaat ttimee zyygotte mmay nott s

54、ttartt JAAVA VM yett. SSo AAndrroidd usses anootheer mmethhod. Affterr zyynotte iis iinittiallizeed, forrk aa neew pproccesss too sttartt syysteem sservvicees. Andrroidd 啟動動過程 1. BBoott系統(tǒng)初初始化,具體過過程參見見(syysteemccoreeinnitIniit.cc)中的的maiin函數數,這時時候,手手機或者者模擬器器出現(xiàn)的的畫面是是一個cconssolee,顯示示“ANNDROOID”msgg。 2.

55、初初始化成成功后,就開始始mouuntiing系系統(tǒng),具具體參見見(syysteemccoreemoounttdMMounntd.c) 中的的maiin函數數。 3接下下來運行行ndrroiddRunntimme,并并開始啟啟動jaava虛虛擬機ddalvvikvvm。 4. JJavaa虛擬機機啟動成成功后,開始系系統(tǒng)初始始化。系系統(tǒng)初始始的第一一步是用用JNII方式實實現(xiàn)的,對應jjavaa代碼為為(frrameeworrksbassesservviceesjjavaacoomaandrroiddseerveerSSysttemSServver.javva) iniit1(Nattivee

56、)函數數,對應應的JNNI CC+代代碼為(fraamewworkksbbaseecoorejniiseerveerccom_anddroiid_sservver_SysstemmSerrverr.cppp),而實現(xiàn)現(xiàn)的C+代碼碼為(fraamewworkksbbaseecmmdssysstemm_seerveerllibrraryy SSysttem_iniit.ccpp) 中的syysteem_iinitt()函函數。 5. ssysttem_iniit調用用SurrfacceFllingger,SurrfacceFllingger的的reaadyTToRuun()函數用用BoootAnn

57、imaatioon來實實現(xiàn)開機機動畫,這時候候手機或或者模擬擬器顯示示是一副副背景圖圖加一個個動態(tài)的的小機器器人。 6. 系系統(tǒng)初始始化的第第二步,將啟動動SerrverrThrreadd進程,參見SSysttemSServver.iniit2()。SerrverrThrreadd將啟動動各種系系統(tǒng)服務務,如PPoweer MManaagerr、Acttiviity Mannageer等等等,具體體參見SServverTThreead的的runn函數,SerrverrThrreadd同在SyysteemSeerveer.jjavaa中。 7.這之之后的事事,應該該就是進進入系統(tǒng)統(tǒng)了。(這部分分

58、沒有調調查過)。對Anddroiid啟動動過程的的進一步步研究對于關注注 HYPERLINK /news/listbylabel/label/Android Anddroiid底層層的朋友友來說,其具體體的啟動動過程應應該是比比較吸引引我們的的。但是是很多啟啟動文件件什么的的,都得得adbb puush到到hosst上來來看,挺挺不方便便的,都都怪 HYPERLINK /news/listbylabel/label/Android Anndrooid自自帶的TToollboxx太簡略略了。所所以在深深入了解解 HYPERLINK /news/listbylabel/label/Android

59、Anddroiid的啟啟動流程程之前,我們來來把Buusybbox安安裝到 HYPERLINK /news/listbylabel/label/Android AAndrroidd上去,這樣,就有很很多工具具供我們們使用了了。 首先先去buusybbox主主頁 下下載最新新版本的的源代碼碼,然后后用arrm的交交叉編譯譯器編譯譯出buusybbox的的可執(zhí)行行程序,編譯的的時候需需要注意意一些設設置選項項,例如如Buuildd Opptioons Buuildd BuusyBBox as a sstattic binnaryy (nno ssharred libbs) 這個要要選上,因上這這樣

60、子編編譯出來來的buusyBBox才才是可以以獨立運運行的。Do youu waant to buiild BussyBoox wwithh a Crooss Commpiller? (/HOMME/ttoollchaainss/gccc-44.0.2-gglibbc-22.3.5/aarm-9tddmi-linnux-gnuu/biin/aarm-9tddmi-linnux-gnuu 這是是交叉編編譯器的的路徑,要根據據具體的的情況來來設置。Innstaallaatioon OOptiionss Doontt usse /usrr這樣樣子編譯譯出來的的bussyboox才不不會安裝裝到你主主

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論