Android開機(jī)啟動(dòng)流程_第1頁(yè)
Android開機(jī)啟動(dòng)流程_第2頁(yè)
Android開機(jī)啟動(dòng)流程_第3頁(yè)
Android開機(jī)啟動(dòng)流程_第4頁(yè)
Android開機(jī)啟動(dòng)流程_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Android的開機(jī)流程1. 系統(tǒng)引導(dǎo)bootloader1) 源源碼:bboottablle/bboottloaaderr/*2) 說說明:加加電后,CCPU將將先執(zhí)行行boootlooadeer程序序,此處處有三種種選擇a) 開開機(jī)按CCameera+Powwer啟啟動(dòng)到ffasttbooot,即即命令或或SD卡卡燒寫模模式,不不加載內(nèi)內(nèi)核及文文件系統(tǒng)統(tǒng),此處處可以進(jìn)進(jìn)行工廠廠模式的的燒寫b) 開開機(jī)按HHomee+Poowerr啟動(dòng)到到reccoveery模模式,加加載reecovveryy.immg,rrecooverry.iimg包包含內(nèi)核核,基本本的文件件系統(tǒng),用用于工程程模式的的

2、燒寫c) 開開機(jī)按PPoweer,正正常啟動(dòng)動(dòng)系統(tǒng),加加載booot.imgg,booot.imgg包含內(nèi)內(nèi)核,基基本文件件系統(tǒng),用用于正常常啟動(dòng)手手機(jī)(以以下只分分析正常常啟動(dòng)的的情況)2. 內(nèi)核核kerrnell1) 源源碼:kkernnel/*2) 說說明:kkernnel由由boootlooadeer加載載3. 文件件系統(tǒng)及及應(yīng)用iinitt1) 源源碼:ssysttem/corre/iinitt/*2) 配配置文件件:syysteem/rroottdirr/innit.rc,3) 說說明:iinitt是一個(gè)個(gè)由內(nèi)核核啟動(dòng)的的用戶級(jí)級(jí)進(jìn)程,它它按照iinitt.rcc中的設(shè)設(shè)置執(zhí)行行:

3、啟動(dòng)動(dòng)服務(wù)(這這里的服服務(wù)指llinuux底層層服務(wù),如如adbbd提供供adbb支持,vvoldd提供SSD卡掛掛載等),執(zhí)執(zhí)行命令令和按其其中的配配置語(yǔ)句句執(zhí)行相相應(yīng)功能能4. 重要要的后臺(tái)臺(tái)程序zzygoote1) 源源碼:fframmewoorkss/baase/cmdds/aapp_maiin.ccpp等等2) 說說明:zzygoote是是一個(gè)在在iniit.rrc中被被指定啟啟動(dòng)的服服務(wù),該該服務(wù)對(duì)對(duì)應(yīng)的命命令是/sysstemm/biin/aapp_proocesssa) 建建立Jaava Runntimme,建建立虛擬擬機(jī)b) 建建立Soockeet接收收ActtiviityM

4、ManaangeerSeerviice的的請(qǐng)求,用用于Foork應(yīng)應(yīng)用程序序c) 啟啟動(dòng)Syysteem SServver5. 系統(tǒng)統(tǒng)服務(wù)ssysttem serrverr1) 源源碼:fframmewoorkss/baase/serrvicces/javva/ccom/anddroiid/sservver/SysstemmSerrverr.jaava2) 說說明:被被zyggotee啟動(dòng),通通過Syysteem MManaagerr管理aandrroidd的服務(wù)務(wù)(這里里的服務(wù)務(wù)指frrameeworrks/basse/sservvicees下的的服務(wù),如如衛(wèi)星定定位服務(wù)務(wù),剪切切板服務(wù)務(wù)等

5、)6. 桌面面lauunchher1) 源源碼:AActiivittyMaanaggerSServvicee.jaava為為入口,ppackkagees/aappss/laaunccherr*實(shí)現(xiàn)現(xiàn)2) 說說明:系系統(tǒng)啟動(dòng)動(dòng)成功后后SysstemmSerrverr使用xxxx.sysstemmReaady()通知知各個(gè)服服務(wù),系系統(tǒng)已經(jīng)經(jīng)就緒,桌桌面程序序Homme就是是在AcctivvityyMannageerSeerviice.sysstemmReaady()通知知的過程程中建立立的,最最終調(diào)用用 ()啟啟lauunchher7. 解鎖鎖1) 源源碼:fframmewoorkss/pool

6、icciess/baase/phoone/comm/anndrooid/intternnal/pollicyy/immpl/*loock*2) 說說明:系系統(tǒng)啟動(dòng)動(dòng)成功后后SysstemmSerrverr調(diào)用wwm.ssysttemRReaddy()通知WWinddowMManaagerrSerrvicce,進(jìn)進(jìn)而調(diào)用用PhooneWWinddowMManaagerr,最終終通過LLockkPattterrnKeeyguuarddVieew顯示示解鎖界界面,跟跟蹤代碼碼可以看看到解鎖鎖界面并并不是一一個(gè)Acctivvityy,這是是只是向向特定層層上繪圖圖,其代代碼了存存放在特特殊的位位置8.

7、 開機(jī)機(jī)自啟動(dòng)動(dòng)的第三三方應(yīng)用用程序1) 源源碼:fframmewoorkss/baase/serrvicces/javva/ccom/anddroiid/sservver/am/ActtiviityMManaagerrSerrvicce.jjavaa2) 說說明:系系統(tǒng)啟動(dòng)動(dòng)成功后后SysstemmSerrverr調(diào)用AActiivittyMaanaggerNNatiive.gettDeffaullt().syysteemReeadyy()通通知AcctivvityyMannageer啟動(dòng)動(dòng)成功,AActiivittyMaanagger會(huì)會(huì)通過置置變量mmBoootinng,通通知它的的另一

8、線線程,該該線程會(huì)會(huì)發(fā)送廣廣播tentt.acctioon.BBOOTT_COOMPLLETEED以告告知已注注冊(cè)的第第三方程程序在開開機(jī)時(shí)自自動(dòng)啟動(dòng)動(dòng)。9. 總結(jié)結(jié)綜上所所述,系系統(tǒng)層次次關(guān)于啟啟動(dòng)最核核心的部部分是zzygoote(即appp_pproccesss)和ssysttem serrverr,zyygotte它負(fù)負(fù)責(zé)最基基本的虛虛擬機(jī)的的建立,以以支持各各個(gè)應(yīng)用用程序的的啟動(dòng),而而sysstemm seerveer用于于管理aandrroidd后臺(tái)服服務(wù),啟啟動(dòng)步驟驟及順序序。10. 參參考 HYPERLINK /basonjiang_sz/category/648399.asp

9、x http:/t/baasonnjiaang_sz/cattegoory/64883999.asspxAndrooid 啟動(dòng)過過程詳解解Androoid從從Linnux系系統(tǒng)啟動(dòng)動(dòng)有4個(gè)個(gè)步驟;(1) iinitt進(jìn)程啟啟動(dòng)(2) NNatiive服服務(wù)啟動(dòng)動(dòng)(3) SSysttem Serrverr,Anndrooid服服務(wù)啟動(dòng)動(dòng)(4) HHomee啟動(dòng)總體啟動(dòng)框框架圖如如:第一步:iinittiall進(jìn)程(ssysttem/corre/iinitt) iniit進(jìn)程程,它是是一個(gè)由由內(nèi)核啟啟動(dòng)的用用戶級(jí)進(jìn)進(jìn)程。內(nèi)內(nèi)核自行行啟動(dòng)(已已經(jīng)被載載入內(nèi)存存,開始始運(yùn)行,并并已初始始化所有有的設(shè)備

10、備驅(qū)動(dòng)程程序和數(shù)數(shù)據(jù)結(jié)構(gòu)構(gòu)等)之之后,就就通過啟啟動(dòng)一個(gè)個(gè)用戶級(jí)級(jí)程序iinitt的方式式,完成成引導(dǎo)進(jìn)進(jìn)程。iinitt始終是是第一個(gè)個(gè)進(jìn)程.Init.rcInit.marrvelll.rrcInit進(jìn)進(jìn)程一起起來(lái)就根根據(jù)innit.rc和和iniit.xxxx.rc腳腳本文件件建立了了幾個(gè)基基本的服服務(wù):servviceemannamgger zygoote 。最后Iniit并不不退出,而而是擔(dān)當(dāng)當(dāng)起prropeertyy seerviice的的功能。1.1腳本本文件initSysstemm/Coore/IniitInit.c: parrse_connfigg_fiile(Iniit.rr

11、c) pparsse_cconffig_fille(IInitt.maarveel.rrc)解析腳本文文件:IInitt.rcc和Innit.xxxxx.rrc(硬硬件平臺(tái)臺(tái)相關(guān))Init.rc是是Anddroiid自己己規(guī)定的的初始化化腳本(Anddroiid IInitt Laanguuagee, SSysttem/Corre/IInitt/reeadmme.ttxt)該腳本包含含四個(gè)類類型的聲聲明:Actioons Commaandss Serviicess Optioons. 1.2 服服務(wù)啟動(dòng)動(dòng)機(jī)制我們來(lái)看看看Iniit是這這樣解析析.rcc文件開開啟服務(wù)務(wù)的。(1)打開開.rcc文

12、件,解解析文件件內(nèi)容 syysteem/ccoree/innit/iniit.cc將servvicee信息放放置到sservvicee_liist中中。 sysstemm/coore/iniit pparsser.c(2)reestaart_serrvicce() ssysttem/corre/iinitt/innit.c servvicee_sttartt execcve().建立sservvicee進(jìn)程。第二步 ZZygoote Servviceemannageer和zzygoote進(jìn)進(jìn)程就奠奠定了AAndrroidd的基礎(chǔ)礎(chǔ)。Zyygotte這個(gè)個(gè)進(jìn)程起起來(lái)才會(huì)會(huì)建立起起真正的的Andd

13、roiid運(yùn)行行空間,初初始化建建立的SServvicee都是NNavttivee seerviice.在.rrc腳本本文件中中zyggotee的描述述:serviice zyggotee /ssysttem/binn/appp_pproccesss -XXzyggotee /ssysttem/binn -zyggotee -staart-sysstemm-seerveer所以Zyggotee從maain()fraamewworkks/bbasee/cmmds/appp_maain.cppp開始。(1) mmainn()frrameeworrks/basse/ccmdss/appp_mmain

14、n.cppp建立Javva RRunttimee runtiime.staart(coom.aandrroidd.innterrnall.oss.ZyygotteInnit, sstarrtSyysteemSeerveer); (2) rrunttimee.sttarttAnndrooidRRunttimee.cppp建立虛擬機(jī)機(jī) 運(yùn)行:coom.aandrroidd.innterrnall.oss.ZyygotteInnit:maiin函數(shù)數(shù)。 (3)maain()ccom.anddroiid.iinteernaal.oos.ZZygooteIInitt/正正真的ZZygoote。regis

15、sterrZyggoteeSocckett();/登登記Liisteen端口口 starttSysstemmSerrverr(); 進(jìn)入Zyggotee服務(wù)框框架。 經(jīng)過這幾個(gè)個(gè)步驟,ZZygoote就就建立好好了,利利用Soockeet通訊訊,接收收ActtiviityMManaangeerSeerviice的的請(qǐng)求,F(xiàn)Forkk應(yīng)用程程序。第三步 SSysttem Serrverr HYPERLINK mailto:startSystemServerernal.os.ZygoteInit在Zygote starttSysstemmSerrverrcoom.aandrroidd.innter

16、rnall.oss.ZyygotteInnit在在Zyggotee上foork了了一個(gè)進(jìn)進(jìn)程:comm.anndrooid.serrverr.SyysteemSeerveer.于于是SyysteemSeerveer(SysstemmSerrverr.jaava)就就建立了了。Anndrooid的的所有服服務(wù)循環(huán)環(huán)框架都都是建立立SysstemmSerrverr(SSysttemSServver.javva)上上。在SSysttemSServver.javva中看看不到循循環(huán)結(jié)構(gòu)構(gòu),只是是可以看看到建立立了innit22的實(shí)現(xiàn)現(xiàn)函數(shù),建建立了一一大堆服服務(wù),并并AdddSerrvicce到sse

17、rvvicee Maanagger。main() coom/aandrroidd/seerveer/SSysttemSServver initt1();Init11()是是在Naativve空間間實(shí)現(xiàn)的的(coom_aandooirdd_seerveer_ssysttemSServver.cppp)。我我們一看看這個(gè)函函數(shù)就知知道了,iinitt1-sysstemm_innit() Sysstemm_innit.cppp在systtem_iniit()我們看看到了循循環(huán)閉合合管理框框架。 Calll ccom/anddroiid/sservver/SysstemmSerrverr, innit

18、22 . ProccesssStaate:seelf()-staartTThreeadPPooll(); IPCCThrreaddStaate:seelf()-joiinThhreaadPoool();init22()SysstemmSerrverr.jaava中中建立了了Anddroiid中所所有要用用到的服服務(wù)。這個(gè)iniit2()建建立了一一個(gè)線程程,來(lái)NNew Serrvicce和AAddSServvicee來(lái)建立立服務(wù)第三步 HHomee啟動(dòng) HYPERLINK mailto:在ServerThreadSystemServer.java 在ServverTThreeadSysstem

19、mSerrverr.jaava后后半段,我我們可以以看到系系統(tǒng)在啟啟動(dòng)完所所有的AAndrroidd服務(wù)后后,做了了這樣一一些動(dòng)作作:(1) 使使用xxxx.ssysttemRReaddy()通知各各個(gè)服務(wù)務(wù),系統(tǒng)統(tǒng)已經(jīng)就就緒。(2) 特別對(duì)對(duì)于AcctivvityyMannageerSeerviice.sysstemmReaady(回調(diào)) Widgget.walllpaaperr,immm(輸輸入法)等reeadyy通知。Home就就是在AActiivittyMaanaggerSServvicee.syysteemReeadyy()通通知的過過程中建建立的。下下面是AActiivittyMa

20、anaggerSServvicee.syysteemReeadyy()的的偽代碼碼:systeemReeadyy()ActtiviityMManaagerrSerrvicce.jjavaa resuumeTTopAActiivittyLoockeed() starrtHoomeAActiivittyLoockeed();/如果是是第一個(gè)個(gè)則啟動(dòng)動(dòng)HommeAcctivvityy。 starrtAcctivvityyLocckedd(。)CCATEEGORRY_HHOMEEAndrooid Boootinng:init is thee fiirstt prroceess aftter kerrn

21、ell sttartted. Thhe ccorrrespponddingg soourcce ccodee liies in: deevicce/ssysttem/iniit. It doees tthe folllowwingg taaskss sttep by steep: 1.Iniitiaalizze llog sysstemm. 2.Parrse /innit.rc andd /iinitt.%hharddwarre%.rc. 3. Exxecuute earrly-iniit aactiion in thee twwo ffilees pparssed in steep 22.

22、4. Deevicce sspeccifiic iinittiallizee. FFor exaamplle, makke aall devvicee noode in /deev aand dowwnlooad firrmwaaress. 5. Innitiialiize prooperrty sysstemm. AActuuallly tthe prooperrty sysstemm iss woorkiing as a ssharre mmemoory. Loogiccallly iit llookks llikee a reggisttry undder Winndowws ssyst

23、tem. 6. Exxecuute iniit aactiion in thee twwo ffilees pparssed in steep 22. 7. Sttartt prropeertyy seerviice. 8. Exxecuute earrly-booot aand booot aactiionss inn thhe ttwo filles parrsedd inn sttep 2. 9. Exxecuute prooperrty acttionn inn thhe ttwo filles parrsedd inn sttep 2. 10.EEnteer iintoo ann i

24、nndeffiniite looop tto wwaitt foor ddeviice/prooperrty sett/chhildd prroceess exiit eevennts. Foor eexammplee, iif aan SSD ccardd iss pllugiinedd, iinitt wiill recceivve aa deevicce aadd eveent, soo itt caan mmakee noode forr thhe ddeviice. Moost of thee immporrtannt pproccesss iss foorkeed iin iini

25、tt, sso iif aany of theem ccrasshedd, iinitt wiill recceivve aa SIIGCHHLD theen ttrannslaate it intto aa chhildd prroceess exiit eevennt, so in thee looop iniit ccan hanndlee thhe pproccesss exxit eveent andd exxecuute thee coommaandss deefinned in *.rrc(iit wwilll ruun ccommmandd onnresstarrt). The

26、 .rc fille iis aa sccrippt ffilee deefinned by Anddroiid. Thee deefauult is devvicee/syysteem/rroottdirr/innit.rc. Wee caan ttakee a looot aat tthe fille fformmat(devvicee/syysteem/iinitt/reeadmme.ttxt is a ggoodd ovveraall inttrodducttionn off thhe sscriipt). BBasiicallly thee sccrippt ffilee coont

27、aainss acctioons andd seerviicess. Actioons Actioons aree naamedd seequeencees oof ccommmandds. Acttionns hhavee a triiggeer wwhicch iis uusedd too deeterrminne wwhenn thhe aactiion shoouldd occcurr. Wheen aan eevennt ooccuurs whiich mattchees aan aactiions ttrigggerr, tthatt acctioon iis aaddeed tt

28、o tthe taiil oof aa too-bee-exxecuutedd quueuee (uunleess it is alrreaddy oon tthe queeue). Each acttionn inn thhe qqueuue iis ddequueueed iin ssequuencce aand eacch ccommmandd inn thhat acttionn iss exxecuutedd inn seequeencee. Iniit hhanddless ottherr acctivvitiies (deevicce ccreaatioon/ddesttrucc

29、tioon, prooperrty setttinng, proocesss rresttarttingg) bettweeen thee exxecuutioon oof tthe commmannds in acttiviitiees. Actioons takke tthe forrm oof: on . Serviicess Serviicess arre pproggramms wwhicch iinitt laauncchess annd (opttionnallly) resstarrts wheen ttheyy exxit. SServvicees ttakee thhe f

30、formm off: serviice * . Optioons Optioons aree moodiffierrs tto sservvicees. Thhey afffectt hoow aand wheen iinitt ruuns thee seerviice. Trigggerss Trigggerss arre sstriingss whhichh caan bbe uusedd too maatchh ceertaain kinnds of eveentss annd uusedd too caausee ann acctioon tto ooccuur. The bbuill

31、tinn suuppoorteed ccommmandds aare deffineed iin ddeviice/sysstemm/innit/keyyworrds.h. Commmannds aree immpleemenntd in devvicee/syysteem/iinitt/buultiins.c. The iinitt prrogrram onlly eexeccutees ffivee kiindss off trrigggerss: “eearlly-iinitt”, “innit”, “eearlly-bboott”, “booot”, “pproppertty:*”.

32、Takke aa loook at thee foolloowinng llinee inn deefauult iniit.rrc. classs_sttartt deefauult This linne iis aa coommaand forr thhe aactiion corrressponndinng tto “bboott” ttrigggerr. IIt wwilll sttartt alll sservvicees wwhosse cclasss nnamee eqqualls tto “ddefaaultt”. By deffaullt, if no claass optt

33、ionn iss deefinned forr 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 r

34、run as a fforkked proocesss oof iinitt, ttakee a loook aat tthe souurcee coode of serrvicce_sstarrt iin ddeviice/sysstemm/innit.c. So acccorrdinng tto tthe deffaullt iinitt.rcc, tthe folllowwingg seerviicess wiill be exeecutted steep bby sstepp: consoole: sttar a sshelll. Thee soourcce iis iin ddevi

35、ice/sysstemm/biin/aash. adbd: sttartt addb ddaemmon. Thhe ssourrce is in devvicee/tooolss/addbd. Byy deefauult is dissablled. serviicemmanaagerr: sstarrt bbindder sysstemm. TThe souurcee iss inn deevicce/ccommmandds/bbindder. mounttd: mouunt alll fss deefinned in /syysteem/eetc/mouuntdd.coonf if sta

36、arteed, recceivve ccommmandds tthrooughh loocall soockeet tto mmounnt aany fs. Thhe ssourrce is in devvicee/syysteem/bbin/mouuntdd. debugggerrd: staart debbug sysstemm. TThe souurcee iss inn deevicce/ssysttem/binn/deebugggerrd. rild: sttartt raadioo innterrfacce llayeer ddaemmon. Thhe ssourrce is in

37、 devvicee/coommaandss/riind. zygotte: staart Anddroiid JJavaa Ruuntiime andd sttartt syysteem sservver. Itts thee moost impporttantt seerviice. Thhe ssourrce is in devvicee/seerveers/appp. mediaa: sstarrt AAudiioFllingger, MeediaaPlaayerrSerrvicce aand CammeraaSerrvicce. Thee soourcce iis iin ddevii

38、ce/commmannds/meddiasservver. bootssounnd: plaay tthe deffaullt bboott sooundd /ssysttem/meddia/auddio/ui/booot.mmp3. Thhe ssourrce is in devvicee/coommaandss/pllaymmp3. dbus: sttartt dbbus daeemonn, iitss onnly useed bby BBlueeZ. Thee soourcce iis iin ddeviice/sysstemm/Blluettootth/ddbuss-daaemoon.

39、 hcid: reedirrectt hccids sstdoout andd sttderrr tto tthe Anddroiid llogggingg syysteem. Thee soourcce iis iin ddeviice/sysstemm/biin/llogwwrappperr. BBy ddefaaultt iss diisabbledd. hfag: sttartt Blluettootth hhanddsfrree auddio gattewaay, its oonlyy ussed by BluueZ. Thhe ssourrce is in devvicee/syy

40、steem/BBlueetoooth/bluuez-utiils. Byy deefauult is dissablled. hsag: sttartt Blluettootth hheaddsett auudioo gaatewway, itts onlly uusedd byy BllueZZ. TThe souurcee iss inn deevicce/ssysttem/Bluuetooothh/blluezz-uttilss. BBy ddefaaultt iss diisabbledd. instaalldd: sstarrt iinsttalll paackaage daeemo

41、nn. TThe souurcee iss inn deevicce/sservverss/innstaalldd. flashh_reecovveryy: lloadd /ssysttem/reccoveery.imgg. TThe souurcee iss inn deevicce/ccommmandds/rrecooverry/mmtduutills. Zygotte sservvicee dooes thee foolloowinng ttaskks sstepp byy sttep: 1. Crreatte JJAVAA VMM. 2. Reegissterr anndrooid n

42、attivee fuuncttionn foor JJAVAA VMM. 3. Caall thee maain funnctiion in thee JAAVA claass nammed ternnal.os.ZyggoteeIniit wwhosse ssourrce is devvicee/jaava/anddroiid/ccom/anddroiid/iinteernaal/oos/ZZygooteIInitt.jaava. a) LLoadd ZyygotteInnit claass b) RRegiisteer zzygoote socckett c)LLoadd prrelooa

43、d claassees(tthe deffaullt ffilee iss devvicee/jaava/anddroiid/pprelloadded-claassees) d) LLoadd prrelooad ressourrcess e) CCalll Zyygotte:forrkSyysteemSeerveer (impplemmentted in devvicee/daalviik/vvm/IInteernaalNaativve.cc) tto fforkk a neww prroceess. Inn thhe nnew proocesss, calll tthe maiin ffu

44、ncctioon iin tthe JAVVA cclasss nnameed ccom.anddroiid.sservver.SysstemmSerrverr, wwhosse ssourrce is in devvicee/jaava/serrvicces/comm/anndrooid/serrverr. ii. Loaad llibaandrroidd_seerveers.so ii. CCalll JNNI nnatiive iniit1 funnctiion impplemmentted in devvicee/liibs/anddroiid_sservverss/coom_aand

45、rroidd_seerveer_SSysttemSServverss. IIt oonlyy caallss syysteem_iinitt immpleemenntedd inn deevicce/sservverss/syysteem/llibrraryy/syysteem_iinitt.cppp. IIf rrunnningg onn siimullatoor, insstanntiaate AuddioFFlinngerr, MMediiaPllayeerSeerviice andd CaamerraSeerviice herre. CCalll innit22 fuuncttionn

46、 inn JAAVA claass nammed comm.anndrooid.serrverr.SyysteemSeerveer, whoose souurcee iss inn deevicce/jjavaa/seerviicess/coom/aandrroidd/seerveer. Thiis ffuncctioon iis vveryy crritiicall foor AAndrroidd beecauuse it staart alll off Anndrooid JAVVA sservvicees. IIf nnot runnninng oon ssimuulattor, caa

47、ll IPCCThrreaddStaate:seelf()-joiinThhreaadPoool() tto eenteer iintoo seerviice disspattcheer. SysteemSeerveer:iniit2 willl sstarrt aa neew tthreead to staart alll JAAVA serrvicces as folllowws: Core Serrvicces: 1. Sttarttingg Poowerr Maanagger /2. Crreattingg Acctivvityy Maanagger 3. Sttarttingg Te

48、elepphonny RRegiistrry /4. Sttarttingg Paackaage Mannageer /5. Seet AActiivitty MManaagerr Seerviice as Sysstemm Prroceess 6. Sttarttingg Coonteext Mannageer 7. Sttarttingg Syysteem CConttextt Prroviiderrs 8. Sttarttingg Baatteery Serrvicce /9. Sttarttingg Allarmm Maanagger /10. Sttarttingg Seensoor

49、 SServvicee 11. Sttarttingg Wiindoow MManaagerr 12. Sttarttingg Blluettootth SServvicee /13. Sttarttingg Moountt Serrvicce /Otherr seerviicess /1. Sttarttingg Sttatuus BBar Serrvicce 2. Sttarttingg Haardwwaree Seerviice 3. Sttarttingg NeetSttat Serrvicce 4. Sttarttingg Coonneectiivitty SServvicee 5.

50、 Sttarttingg Nootifficaatioon MManaagerr 6. Sttarttingg DeevicceSttoraageMMoniitorr Seerviice 7. Sttarttingg Loocattionn Maanagger 8. Sttarttingg Seearcch SServvicee 9. Sttarttingg Cllipbboarrd SServvicee 10. Sttarttingg Chheckkin Serrvicce 11. Sttarttingg Waallppapeer SServvicee 12. Sttarttingg Auu

51、dioo Seerviice 13. Sttarttingg HeeadssetOObseerveer 14. Sttarttingg AddbSeettiingssObsservver Finallly SysstemmSerrverr:iinitt2 wwilll caall ActtiviityMManaagerrSerrvicce.ssysttemRReaddy tto llaunnch thee fiirstt acctivvityy byy seentiing Inttentt.CAATEGGORYY_HOOME inttentt. Theree iss annothher way

52、y too sttartt syysteem sservver, whhichh iss thhrouugh a pproggramm naamedd syysteem_sservver whoose souurcee iss deevicce/sservverss/syysteem/ssysttem_maiin.ccpp. Itt allso callls sysstemm_innit to staart sysstemm seerviicess. SSo ttherre iis aa quuesttionn: wwhy doees AAndrroidd haave twoo meethoo

53、ds to staart sysstemm seerviicess? MMy gguesss iis tthatt diirecctlyy sttartt syysteem_sservver mayy haave synnchrronoous proobleem wwithh zyygotte bbecaausee syysteem_sservver willl ccalll JNNI tto sstarrt SSysttemSServver:innit22, wwhille aat tthatt tiime zyggotee maay nnot staart JAVVA VVM yyet.

54、Soo Anndrooid usees aanottherr meethood. Aftter zynnotee iss innitiialiizedd, fforkk a neww prroceess to staart sysstemm seerviicess. Androoid 啟動(dòng)過過程 1. Booot系系統(tǒng)初始始化, 具體過過程參見見(syysteemccoreeinnitIniit.cc)中的的maiin函數(shù)數(shù),這時(shí)時(shí)候,手手機(jī)或者者模擬器器出現(xiàn)的的畫面是是一個(gè)cconssolee,顯示示“ANNDROOID”mmsg。 2. 初始始化成功功后,就就開始mmounntinng系統(tǒng)

55、統(tǒng),具體體參見(sysstemmcooremouuntddMoounttd.cc) 中的maain函函數(shù)。 3接下來(lái)來(lái)運(yùn)行nndrooidRRunttimee,并開開始啟動(dòng)動(dòng)javva虛擬擬機(jī)daalviikvmm。 4. Jaava虛虛擬機(jī)啟啟動(dòng)成功功后,開開始系統(tǒng)統(tǒng)初始化化。系統(tǒng)統(tǒng)初始的的第一步步是用JJNI方方式實(shí)現(xiàn)現(xiàn)的,對(duì)對(duì)應(yīng)jaava代代碼為(fraamewworkksbbaseeseerviicessjaavacommanndrooidserrverrSyysteemSeerveer.jjavaa) iinitt1(Nattivee)函數(shù)數(shù),對(duì)應(yīng)應(yīng)的JNNI CC+代代碼為(fra

56、amewworkksbbaseecoorejniiseerveerccom_anddroiid_sservver_SysstemmSerrverr.cppp),而而實(shí)現(xiàn)的的C+代碼為為 (frammewoorkssbaasecmddsssysttem_serrverrliibraary Syysteem_iinitt.cppp) 中中的syysteem_iinitt()函函數(shù)。 5. syysteem_iinitt調(diào)用SuurfaaceFFlinngerr,SurrfacceFllingger的的reaadyTToRuun()函數(shù)用用BoootAnnimaatioon來(lái)實(shí)實(shí)現(xiàn)開機(jī)機(jī)動(dòng)畫,這這時(shí)

57、候手手機(jī)或者者模擬器器顯示是是一副背背景圖加加一個(gè)動(dòng)動(dòng)態(tài)的小小機(jī)器人人。 6. 系統(tǒng)統(tǒng)初始化化的第二二步,將將啟動(dòng)SServverTThreead進(jìn)進(jìn)程,參參見SyysteemSeerveer.iinitt2()。SerrverrThrreadd將啟動(dòng)動(dòng)各種系系統(tǒng)服務(wù)務(wù),如PPoweer MManaagerr、Acttiviity Mannageer等等等,具體體參見SServverTThreead的的runn函數(shù),SServverTThreead同同在SyysteemSeerveer.jjavaa中。 7.這之后后的事,應(yīng)應(yīng)該就是是進(jìn)入系系統(tǒng)了。(這這部分沒沒有調(diào)查查過)。對(duì)Andrroid

58、d啟動(dòng)過過程的進(jìn)進(jìn)一步研研究對(duì)于關(guān)注 HYPERLINK /news/listbylabel/label/Android AAndrroidd底層的的朋友來(lái)來(lái)說,其其具體的的啟動(dòng)過過程應(yīng)該該是比較較吸引我我們的。但但是很多多啟動(dòng)文文件什么么的,都都得addb ppushh到hoost上上來(lái)看,挺挺不方便便的,都都怪 HYPERLINK /news/listbylabel/label/Android Anndrooid自自帶的TToollboxx太簡(jiǎn)略略了。所所以在深深入了解解 HYPERLINK /news/listbylabel/label/Android Anddroiid的啟啟動(dòng)流程程之

59、前,我我們來(lái)把把Bussyboox安裝裝到 HYPERLINK /news/listbylabel/label/Android Anndrooid上上去,這這樣,就就有很多多工具供供我們使使用了。 首先去去bussyboox主頁(yè)頁(yè) 下載載最新版版本的源源代碼,然然后用aarm的的交叉編編譯器編編譯出bbusyyboxx的可執(zhí)執(zhí)行程序序,編譯譯的時(shí)候候需要注注意一些些設(shè)置選選項(xiàng),例例如Buiild Opttionns Buiild BussyBoox aas aa sttatiic bbinaary (noo shhareed llibss) 這這個(gè)要選選上,因因上這樣樣子編譯譯出來(lái)的的buss

60、yBoox才是是可以獨(dú)獨(dú)立運(yùn)行行的。Doo yoou wwantt too buuildd BuusyBBox witth aa Crrosss Coompiilerr? (/HHOMEE/tooolcchaiins/gccc-4.0.22-gllibcc-2.3.55/arrm-99tdmmi-llinuux-ggnu/binn/arrm-99tdmmi-llinuux-ggnu 這是是交叉編編譯器的的路徑,要要根據(jù)具具體的情情況來(lái)設(shè)設(shè)置。Insstalllattionn Opptioons Donnt usee /uusr這樣子子編譯出出來(lái)的bbusyyboxx才不會(huì)會(huì)安裝到到你主機(jī)機(jī)的/

溫馨提示

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

評(píng)論

0/150

提交評(píng)論