《Android开机启动流程962.docx》由会员分享,可在线阅读,更多相关《Android开机启动流程962.docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Android的开机流程1. 系统引导bootloader1) 源源码:bboottablle/bboottloaaderr/*2) 说说明:加加电后,CCPU将将先执行行boootlooadeer程序序,此处处有三种种选择a) 开开机按CCameera+Powwer启启动到ffasttbooot,即即命令或或SD卡卡烧写模模式,不不加载内内核及文文件系统统,此处处可以进进行工厂厂模式的的烧写b) 开开机按HHomee+Poowerr启动到到reccoveery模模式,加加载reecovveryy.immg,rrecooverry.iimg包包含内核核,基本本的文件件系统,用用于工程程模式的的
2、烧写c) 开开机按PPoweer,正正常启动动系统,加加载booot.imgg,booot.imgg包含内内核,基基本文件件系统,用用于正常常启动手手机(以以下只分分析正常常启动的的情况)2. 内核核kerrnell1) 源源码:kkernnel/*2) 说说明:kkernnel由由boootlooadeer加载载3. 文件件系统及及应用iinitt1) 源源码:ssysttem/corre/iinitt/*2) 配配置文件件:syysteem/rroottdirr/innit.rc,3) 说说明:iinitt是一个个由内核核启动的的用户级级进程,它它按照iinitt.rcc中的设设置执行行:
3、启动动服务(这这里的服服务指llinuux底层层服务,如如adbbd提供供adbb支持,vvoldd提供SSD卡挂挂载等),执执行命令令和按其其中的配配置语句句执行相相应功能能4. 重要要的后台台程序zzygoote1) 源源码:fframmewoorkss/baase/cmdds/aapp_maiin.ccpp等等2) 说说明:zzygoote是是一个在在iniit.rrc中被被指定启启动的服服务,该该服务对对应的命命令是/sysstemm/biin/aapp_proocesssa) 建建立Jaava Runntimme,建建立虚拟拟机b) 建建立Soockeet接收收ActtiviityM
4、ManaangeerSeerviice的的请求,用用于Foork应应用程序序c) 启启动Syysteem SServver5. 系统统服务ssysttem serrverr1) 源源码:fframmewoorkss/baase/serrvicces/javva/ccom/anddroiid/sservver/SysstemmSerrverr.jaava2) 说说明:被被zyggotee启动,通通过Syysteem MManaagerr管理aandrroidd的服务务(这里里的服务务指frrameeworrks/basse/sservvicees下的的服务,如如卫星定定位服务务,剪切切板服务务等
5、)6. 桌面面lauunchher1) 源源码:AActiivittyMaanaggerSServvicee.jaava为为入口,ppackkagees/aappss/laaunccherr*实现现2) 说说明:系系统启动动成功后后SysstemmSerrverr使用xxxx.sysstemmReaady()通知知各个服服务,系系统已经经就绪,桌桌面程序序Homme就是是在AcctivvityyMannageerSeerviice.sysstemmReaady()通知知的过程程中建立立的,最最终调用用 ()启启lauunchher7. 解锁锁1) 源源码:fframmewoorkss/pool
6、icciess/baase/phoone/comm/anndrooid/intternnal/pollicyy/immpl/*loock*2) 说说明:系系统启动动成功后后SysstemmSerrverr调用wwm.ssysttemRReaddy()通知WWinddowMManaagerrSerrvicce,进进而调用用PhooneWWinddowMManaagerr,最终终通过LLockkPattterrnKeeyguuarddVieew显示示解锁界界面,跟跟踪代码码可以看看到解锁锁界面并并不是一一个Acctivvityy,这是是只是向向特定层层上绘图图,其代代码了存存放在特特殊的位位置8.
7、 开机机自启动动的第三三方应用用程序1) 源源码:fframmewoorkss/baase/serrvicces/javva/ccom/anddroiid/sservver/am/ActtiviityMManaagerrSerrvicce.jjavaa2) 说说明:系系统启动动成功后后SysstemmSerrverr调用AActiivittyMaanaggerNNatiive.gettDeffaullt().syysteemReeadyy()通通知AcctivvityyMannageer启动动成功,AActiivittyMaanagger会会通过置置变量mmBoootinng,通通知它的的另一
8、线线程,该该线程会会发送广广播anndrooid.inttentt.acctioon.BBOOTT_COOMPLLETEED以告告知已注注册的第第三方程程序在开开机时自自动启动动。9. 总结结综上所所述,系系统层次次关于启启动最核核心的部部分是zzygoote(即appp_pproccesss)和ssysttem serrverr,zyygotte它负负责最基基本的虚虚拟机的的建立,以以支持各各个应用用程序的的启动,而而sysstemm seerveer用于于管理aandrroidd后台服服务,启启动步骤骤及顺序序。10. 参参考http:/t/baasonnjiaang_sz/cattego
9、ory/64883999.asspxAndrooid 启动过过程详解解Androoid从从Linnux系系统启动动有4个个步骤;(1) iinitt进程启启动(2) NNatiive服服务启动动(3) SSysttem Serrverr,Anndrooid服服务启动动(4) HHomee启动总体启动框框架图如如:第一步:iinittiall进程(ssysttem/corre/iinitt) iniit进程程,它是是一个由由内核启启动的用用户级进进程。内内核自行行启动(已已经被载载入内存存,开始始运行,并并已初始始化所有有的设备备驱动程程序和数数据结构构等)之之后,就就通过启启动一个个用户级级程
10、序iinitt的方式式,完成成引导进进程。iinitt始终是是第一个个进程.Init.rcInit.marrvelll.rrcInit进进程一起起来就根根据innit.rc和和iniit.xxxx.rc脚脚本文件件建立了了几个基基本的服服务:servviceemannamgger zygoote 。最后Iniit并不不退出,而而是担当当起prropeertyy seerviice的的功能。1.1脚本本文件initSysstemm/Coore/IniitInit.c: parrse_connfigg_fiile(Iniit.rrc) pparsse_cconffig_fille(IInitt.m
11、aarveel.rrc)解析脚本文文件:IInitt.rcc和Innit.xxxxx.rrc(硬硬件平台台相关)Init.rc是是Anddroiid自己己规定的的初始化化脚本(Anddroiid IInitt Laanguuagee, SSysttem/Corre/IInitt/reeadmme.ttxt)该脚本包含含四个类类型的声声明:Actioons Commaandss Serviicess Optioons. 1.2 服服务启动动机制我们来看看看Iniit是这这样解析析.rcc文件开开启服务务的。(1)打开开.rcc文件,解解析文件件内容 syysteem/ccoree/innit/i
12、niit.cc将servvicee信息放放置到sservvicee_liist中中。 sysstemm/coore/iniit pparsser.c(2)reestaart_serrvicce() ssysttem/corre/iinitt/innit.c servvicee_sttartt execcve().建立sservvicee进程。第二步 ZZygoote Servviceemannageer和zzygoote进进程就奠奠定了AAndrroidd的基础础。Zyygotte这个个进程起起来才会会建立起起真正的的Anddroiid运行行空间,初初始化建建立的SServvicee都是NNa
13、vttivee 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_mmainn.cppp建立Javva RRunttimee runtiime.
14、staart(coom.aandrroidd.innterrnall.oss.ZyygotteInnit, sstarrtSyysteemSeerveer); (2) rrunttimee.sttarttAnndrooidRRunttimee.cppp建立虚拟机机 运行:coom.aandrroidd.innterrnall.oss.ZyygotteInnit:maiin函数数。 (3)maain()ccom.anddroiid.iinteernaal.oos.ZZygooteIInitt/正正真的ZZygoote。regissterrZyggoteeSocckett();/登登记Liiste
15、en端口口 starttSysstemmSerrverr(); 进入Zyggotee服务框框架。 经过这几个个步骤,ZZygoote就就建立好好了,利利用Soockeet通讯讯,接收收ActtiviityMManaangeerSeerviice的的请求,FForkk应用程程序。第三步 SSysttem SerrverrstarttSysstemmSerrverrcoom.aandrroidd.innterrnall.oss.ZyygotteInnit在在Zyggotee上foork了了一个进进程:comm.anndrooid.serrverr.SyysteemSeerveer.于于是Syyst
16、eemSeerveer(SysstemmSerrverr.jaava)就就建立了了。Anndrooid的的所有服服务循环环框架都都是建立立SysstemmSerrverr(SSysttemSServver.javva)上上。在SSysttemSServver.javva中看看不到循循环结构构,只是是可以看看到建立立了innit22的实现现函数,建建立了一一大堆服服务,并并AdddSerrvicce到sservvicee Maanagger。main() coom/aandrroidd/seerveer/SSysttemSServver initt1();Init11()是是在Naativve空
17、间间实现的的(coom_aandooirdd_seerveer_ssysttemSServver.cppp)。我我们一看看这个函函数就知知道了,iinitt1-sysstemm_innit() Sysstemm_innit.cppp在systtem_iniit()我们看看到了循循环闭合合管理框框架。 Calll ccom/anddroiid/sservver/SysstemmSerrverr, innit22 . ProccesssStaate:seelf()-staartTThreeadPPooll(); IPCCThrreaddStaate:seelf()-joiinThhreaadPoo
18、ol();init22()SysstemmSerrverr.jaava中中建立了了Anddroiid中所所有要用用到的服服务。这个iniit2()建建立了一一个线程程,来NNew Serrvicce和AAddSServvicee来建立立服务第三步 HHomee启动在ServverTThreeadSysstemmSerrverr.jaava后后半段,我我们可以以看到系系统在启启动完所所有的AAndrroidd服务后后,做了了这样一一些动作作:(1) 使使用xxxx.ssysttemRReaddy()通知各各个服务务,系统统已经就就绪。(2) 特别对对于AcctivvityyMannageerSe
19、erviice.sysstemmReaady(回调) Widgget.walllpaaperr,immm(输输入法)等reeadyy通知。Home就就是在AActiivittyMaanaggerSServvicee.syysteemReeadyy()通通知的过过程中建建立的。下下面是AActiivittyMaanaggerSServvicee.syysteemReeadyy()的的伪代码码:systeemReeadyy()ActtiviityMManaagerrSerrvicce.jjavaa resuumeTTopAActiivittyLoockeed() starrtHoomeAActii
20、vittyLoockeed();/如果是是第一个个则启动动HommeAcctivvityy。 starrtAcctivvityyLocckedd(。)CCATEEGORRY_HHOMEEAndrooid Boootinng:init is thee fiirstt prroceess aftter kerrnell sttartted. Thhe ccorrrespponddingg soourcce ccodee liies in: deevicce/ssysttem/iniit. It doees tthe folllowwingg taaskss sttep by steep: 1.In
21、iitiaalizze llog sysstemm. 2.Parrse /innit.rc andd /iinitt.%hharddwarre%.rc. 3. Exxecuute earrly-iniit aactiion in thee twwo ffilees pparssed in steep 22. 4. Deevicce sspeccifiic iinittiallizee. FFor exaamplle, makke aall devvicee noode in /deev aand dowwnlooad firrmwaaress. 5. Innitiialiize prooper
22、rty sysstemm. AActuuallly tthe prooperrty sysstemm iss woorkiing as a ssharre mmemoory. Loogiccallly iit llookks llikee a reggisttry undder Winndowws ssysttem. 6. Exxecuute iniit aactiion in thee twwo ffilees pparssed in steep 22. 7. Sttartt prropeertyy seerviice. 8. Exxecuute earrly-booot aand booo
23、t 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 inndeffiniite looop tto wwaitt foor ddeviice/prooperrty sett/chhildd prroceess exiit eevennts. Foor eexammplee, iif aan SSD ccardd iss pllugiinedd
24、, iinitt wiill recceivve aa deevicce aadd eveent, soo itt caan mmakee noode forr thhe ddeviice. Moost of thee immporrtannt pproccesss iss foorkeed iin iinitt, sso iif aany of theem ccrasshedd, iinitt wiill recceivve aa SIIGCHHLD theen ttrannslaate it intto aa chhildd prroceess exiit eevennt, so in t
25、hee looop iniit ccan hanndlee thhe pproccesss exxit eveent andd exxecuute thee coommaandss deefinned in *.rrc(iit wwilll ruun ccommmandd onnresstarrt). The .rc fille iis aa sccrippt ffilee deefinned by Anddroiid. Thee deefauult is devvicee/syysteem/rroottdirr/innit.rc. Wee caan ttakee a looot aat tt
26、he fille fformmat(devvicee/syysteem/iinitt/reeadmme.ttxt is a ggoodd ovveraall inttrodducttionn off thhe sscriipt). BBasiicallly thee sccrippt ffilee coontaainss acctioons andd seerviicess. Actioons Actioons aree naamedd seequeencees oof ccommmandds. Acttionns hhavee a triiggeer wwhicch iis uusedd t
27、oo deeterrminne wwhenn thhe aactiion shoouldd occcurr. Wheen aan eevennt ooccuurs whiich mattchees aan aactiions ttrigggerr, tthatt acctioon iis aaddeed tto tthe taiil oof aa too-bee-exxecuutedd quueuee (uunleess it is alrreaddy oon tthe queeue). Each acttionn inn thhe qqueuue iis ddequueueed iin ss
28、equuencce aand eacch ccommmandd inn thhat acttionn iss exxecuutedd inn seequeencee. Iniit hhanddless ottherr acctivvitiies (deevicce ccreaatioon/ddesttrucctioon, prooperrty setttinng, proocesss rresttarttingg) bettweeen thee exxecuutioon oof tthe commmannds in acttiviitiees. Actioons takke tthe forr
29、m oof: on . Serviicess Serviicess arre pproggramms wwhicch iinitt laauncchess annd (opttionnallly) resstarrts wheen ttheyy exxit. SServvicees ttakee thhe fformm off: serviice * . Optioons Optioons aree moodiffierrs tto sservvicees. Thhey afffectt hoow aand wheen iinitt ruuns thee seerviice. Triggger
30、ss Trigggerss arre sstriingss whhichh caan bbe uusedd too maatchh ceertaain kinnds of eveentss annd uusedd too caausee ann acctioon tto ooccuur. The bbuilltinn suuppoorteed ccommmandds aare deffineed iin ddeviice/sysstemm/innit/keyyworrds.h. Commmannds aree immpleemenntd in devvicee/syysteem/iinitt/
31、buultiins.c. The iinitt prrogrram onlly eexeccutees ffivee kiindss off trrigggerss: “eearlly-iinitt”, “innit”, “eearlly-bboott”, “booot”, “pproppertty:*”. Takke aa loook at thee foolloowinng llinee inn deefauult iniit.rrc. classs_sttartt deefauult This linne iis aa coommaand forr thhe aactiion corrr
32、essponndinng tto “bboott” ttrigggerr. IIt wwilll sttartt alll sservvicees wwhosse cclasss nnamee eqqualls tto “ddefaaultt”. By deffaullt, if no claass opttionn iss deefinned forr a serrvicce, thee seerviices cclasss nnamee iss “ddefaaultt”. So thiis llinee wiill staart alll thhe sservvicees iin tthe
33、 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 proocesss oof iinitt, ttakee a loook aat tthe souurcee coode of serrvicce_sstarrt iin ddeviice/sysstemm/innit.c. So acccorrdinn
34、g tto tthe deffaullt iinitt.rcc, tthe folllowwingg seerviicess wiill be exeecutted steep bby sstepp: consoole: sttar a sshelll. Thee soourcce iis iin ddeviice/sysstemm/biin/aash. adbd: sttartt addb ddaemmon. Thhe ssourrce is in devvicee/tooolss/addbd. Byy deefauult is dissablled. serviicemmanaagerr:
35、 sstarrt bbindder sysstemm. TThe souurcee iss inn deevicce/ccommmandds/bbindder. mounttd: mouunt alll fss deefinned in /syysteem/eetc/mouuntdd.coonf if staarteed, recceivve ccommmandds tthrooughh loocall soockeet tto mmounnt aany fs. Thhe ssourrce is in devvicee/syysteem/bbin/mouuntdd. debugggerrd:
36、staart debbug sysstemm. TThe souurcee iss inn deevicce/ssysttem/binn/deebugggerrd. rild: sttartt raadioo innterrfacce llayeer ddaemmon. Thhe ssourrce is in devvicee/coommaandss/riind. zygotte: staart Anddroiid JJavaa Ruuntiime andd sttartt syysteem sservver. Itts thee moost impporttantt seerviice. T
37、hhe ssourrce is in devvicee/seerveers/appp. mediaa: sstarrt AAudiioFllingger, MeediaaPlaayerrSerrvicce aand CammeraaSerrvicce. Thee soourcce iis iin ddeviice/commmannds/meddiasservver. bootssounnd: plaay tthe deffaullt bboott sooundd /ssysttem/meddia/auddio/ui/booot.mmp3. Thhe ssourrce is in devvice
38、e/coommaandss/pllaymmp3. dbus: sttartt dbbus daeemonn, iitss onnly useed bby BBlueeZ. Thee soourcce iis iin ddeviice/sysstemm/Blluettootth/ddbuss-daaemoon. hcid: reedirrectt hccids sstdoout andd sttderrr tto tthe Anddroiid llogggingg syysteem. Thee soourcce iis iin ddeviice/sysstemm/biin/llogwwrappp
39、err. BBy ddefaaultt iss diisabbledd. hfag: sttartt Blluettootth hhanddsfrree auddio gattewaay, its oonlyy ussed by BluueZ. Thhe ssourrce is in devvicee/syysteem/BBlueetoooth/bluuez-utiils. Byy deefauult is dissablled. hsag: sttartt Blluettootth hheaddsett auudioo gaatewway, itts onlly uusedd byy Bll
40、ueZZ. TThe souurcee iss inn deevicce/ssysttem/Bluuetooothh/blluezz-uttilss. BBy ddefaaultt iss diisabbledd. instaalldd: sstarrt iinsttalll paackaage daeemonn. TThe souurcee iss inn deevicce/sservverss/innstaalldd. flashh_reecovveryy: lloadd /ssysttem/reccoveery.imgg. TThe souurcee iss inn deevicce/c
41、commmandds/rrecooverry/mmtduutills. Zygotte sservvicee dooes thee foolloowinng ttaskks sstepp byy sttep: 1. Crreatte JJAVAA VMM. 2. Reegissterr anndrooid nattivee fuuncttionn foor JJAVAA VMM. 3. Caall thee maain funnctiion in thee JAAVA claass nammed comm.anndrooid.intternnal.os.ZyggoteeIniit wwhoss
42、e ssourrce is devvicee/jaava/anddroiid/ccom/anddroiid/iinteernaal/oos/ZZygooteIInitt.jaava. a) LLoadd ZyygotteInnit claass b) RRegiisteer zzygoote socckett c)LLoadd prrelooad claassees(tthe deffaullt ffilee iss devvicee/jaava/anddroiid/pprelloadded-claassees) d) LLoadd prrelooad ressourrcess e) CCal
43、ll Zyygotte:forrkSyysteemSeerveer (impplemmentted in devvicee/daalviik/vvm/IInteernaalNaativve.cc) tto fforkk a neww prroceess. Inn thhe nnew proocesss, calll tthe maiin ffuncctioon iin tthe JAVVA cclasss nnameed ccom.anddroiid.sservver.SysstemmSerrverr, wwhosse ssourrce is in devvicee/jaava/serrvic
44、ces/comm/anndrooid/serrverr. ii. Loaad llibaandrroidd_seerveers.so ii. CCalll JNNI nnatiive iniit1 funnctiion impplemmentted in devvicee/liibs/anddroiid_sservverss/coom_aandrroidd_seerveer_SSysttemSServverss. IIt oonlyy caallss syysteem_iinitt immpleemenntedd inn deevicce/sservverss/syysteem/llibrraryy/syysteem_iinitt.cppp. l IIf rrunnningg onn siimullatoor, insstanntiaate AuddioFFlinngerr, MMediiaPllayeerSeerviice andd CaamerraSe