Android开机启动流程

上传人:xc****rg 文档编号:158204578 上传时间:2022-10-03 格式:DOCX 页数:29 大小:144.11KB
返回 下载 相关 举报
Android开机启动流程_第1页
第1页 / 共29页
Android开机启动流程_第2页
第2页 / 共29页
Android开机启动流程_第3页
第3页 / 共29页
点击查看更多>>
资源描述
Android的开机流程1. 系统引导bootloader1) 源源码:bboottablle/bboottloaaderr/*2) 说说明:加加电后,CCPU将将先执行行boootlooadeer程序序,此处处有三种种选择a) 开开机按CCameera+Powwer启启动到ffasttbooot,即即命令或或SD卡卡烧写模模式,不不加载内内核及文文件系统统,此处处可以进进行工厂厂模式的的烧写b) 开开机按HHomee+Poowerr启动到到reccoveery模模式,加加载reecovveryy.immg,rrecooverry.iimg包包含内核核,基本本的文件件系统,用用于工程程模式的的烧写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中的设设置执行行:启动动服务(这这里的服服务指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接收收ActtiviityMManaangeerSeerviice的的请求,用用于Foork应应用程序序c) 启启动Syysteem SServver5. 系统统服务ssysttem serrverr1) 源源码:fframmewoorkss/baase/serrvicces/javva/ccom/anddroiid/sservver/SysstemmSerrverr.jaava2) 说说明:被被zyggotee启动,通通过Syysteem MManaagerr管理aandrroidd的服务务(这里里的服务务指frrameeworrks/basse/sservvicees下的的服务,如如卫星定定位服务务,剪切切板服务务等)6. 桌面面lauunchher1) 源源码:AActiivittyMaanaggerSServvicee.jaava为为入口,ppackkagees/aappss/laaunccherr*实现现2) 说说明:系系统启动动成功后后SysstemmSerrverr使用xxxx.sysstemmReaady()通知知各个服服务,系系统已经经就绪,桌桌面程序序Homme就是是在AcctivvityyMannageerSeerviice.sysstemmReaady()通知知的过程程中建立立的,最最终调用用 ()启启lauunchher7. 解锁锁1) 源源码:fframmewoorkss/poolicciess/baase/phoone/comm/anndrooid/intternnal/pollicyy/immpl/*loock*2) 说说明:系系统启动动成功后后SysstemmSerrverr调用wwm.ssysttemRReaddy()通知WWinddowMManaagerrSerrvicce,进进而调用用PhooneWWinddowMManaagerr,最终终通过LLockkPattterrnKeeyguuarddVieew显示示解锁界界面,跟跟踪代码码可以看看到解锁锁界面并并不是一一个Acctivvityy,这是是只是向向特定层层上绘图图,其代代码了存存放在特特殊的位位置8. 开机机自启动动的第三三方应用用程序1) 源源码:fframmewoorkss/baase/serrvicces/javva/ccom/anddroiid/sservver/am/ActtiviityMManaagerrSerrvicce.jjavaa2) 说说明:系系统启动动成功后后SysstemmSerrverr调用AActiivittyMaanaggerNNatiive.gettDeffaullt().syysteemReeadyy()通通知AcctivvityyMannageer启动动成功,AActiivittyMaanagger会会通过置置变量mmBoootinng,通通知它的的另一线线程,该该线程会会发送广广播anndrooid.inttentt.acctioon.BBOOTT_COOMPLLETEED以告告知已注注册的第第三方程程序在开开机时自自动启动动。9. 总结结综上所所述,系系统层次次关于启启动最核核心的部部分是zzygoote(即appp_pproccesss)和ssysttem serrverr,zyygotte它负负责最基基本的虚虚拟机的的建立,以以支持各各个应用用程序的的启动,而而sysstemm seerveer用于于管理aandrroidd后台服服务,启启动步骤骤及顺序序。10. 参参考http:/t/baasonnjiaang_sz/cattegoory/64883999.asspxAndrooid 启动过过程详解解Androoid从从Linnux系系统启动动有4个个步骤;(1) iinitt进程启启动(2) NNatiive服服务启动动(3) SSysttem Serrverr,Anndrooid服服务启动动(4) HHomee启动总体启动框框架图如如:第一步:iinittiall进程(ssysttem/corre/iinitt) iniit进程程,它是是一个由由内核启启动的用用户级进进程。内内核自行行启动(已已经被载载入内存存,开始始运行,并并已初始始化所有有的设备备驱动程程序和数数据结构构等)之之后,就就通过启启动一个个用户级级程序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.maarveel.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/iniit.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都是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_mmainn.cppp建立Javva RRunttimee runtiime.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();/登登记Liisteen端口口 starttSysstemmSerrverr(); 进入Zyggotee服务框框架。 经过这几个个步骤,ZZygoote就就建立好好了,利利用Soockeet通讯讯,接收收ActtiviityMManaangeerSeerviice的的请求,FForkk应用程程序。第三步 SSysttem SerrverrstarttSysstemmSerrverrcoom.aandrroidd.innterrnall.oss.ZyygotteInnit在在Zyggotee上foork了了一个进进程:comm.anndrooid.serrverr.SyysteemSeerveer.于于是SyysteemSeerveer(SysstemmSerrverr.jaava)就就建立了了。Anndrooid的的所有服服务循环环框架都都是建立立SysstemmSerrverr(SSysttemSServver.javva)上上。在SSysttemSServver.javva中看看不到循循环结构构,只是是可以看看到建立立了innit22的实现现函数,建建立了一一大堆服服务,并并AdddSerrvicce到sservvicee Maanagger。main() coom/aandrroidd/seerveer/SSysttemSServver initt1();Init11()是是在Naativve空间间实现的的(coom_aandooirdd_seerveer_ssysttemSServver.cppp)。我我们一看看这个函函数就知知道了,iinitt1-sysstemm_innit() Sysstemm_innit.cppp在systtem_iniit()我们看看到了循循环闭合合管理框框架。 Calll ccom/anddroiid/sservver/SysstemmSerrverr, innit22 . ProccesssStaate:seelf()-staartTThreeadPPooll(); IPCCThrreaddStaate:seelf()-joiinThhreaadPoool();init22()SysstemmSerrverr.jaava中中建立了了Anddroiid中所所有要用用到的服服务。这个iniit2()建建立了一一个线程程,来NNew Serrvicce和AAddSServvicee来建立立服务第三步 HHomee启动在ServverTThreeadSysstemmSerrverr.jaava后后半段,我我们可以以看到系系统在启启动完所所有的AAndrroidd服务后后,做了了这样一一些动作作:(1) 使使用xxxx.ssysttemRReaddy()通知各各个服务务,系统统已经就就绪。(2) 特别对对于AcctivvityyMannageerSeerviice.sysstemmReaady(回调) Widgget.walllpaaperr,immm(输输入法)等reeadyy通知。Home就就是在AActiivittyMaanaggerSServvicee.syysteemReeadyy()通通知的过过程中建建立的。下下面是AActiivittyMaanaggerSServvicee.syysteemReeadyy()的的伪代码码:systeemReeadyy()ActtiviityMManaagerrSerrvicce.jjavaa resuumeTTopAActiivittyLoockeed() starrtHoomeAActiivittyLoockeed();/如果是是第一个个则启动动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.Iniitiaalizze 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 prooperrty 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 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 inndeffiniite 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 iinitt, 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 .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 coontaainss 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 tto 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/ddesttrucctioon, 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 fformm 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 bbuilltinn 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:*”. 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 opttionn 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 rrun 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 ddeviice/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 staarteed, 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 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 ddeviice/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. 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/syysteem/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 daeemonn. 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 nattivee fuuncttionn foor JJAVAA VMM. 3. Caall thee maain funnctiion in thee JAAVA claass nammed comm.anndrooid.intternnal.os.ZyggoteeIniit wwhosse 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) CCalll 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/serrvicces/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 CaamerraSeerviice herre. l CCalll innit22 fuuncttionn 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. l IIf nnot runnninng oon ssimuulattor, caall 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 Teelepphonny 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 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. 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 Auudioo 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 wayy 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 meethoods 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. Soo Anndrooid usees aanottherr meethood. Aftter zynnotee iss innitiialiizedd, fforkk a neww prroceess to staart sysstemm seerviicess. Androoid 启动过过程 1. Booot系系统初始始化, 具体过过程参见见(syysteemccoreeinnitIniit.cc)中的的maiin函数数,这时时候,手手机或者者模拟器器出现的的画面是是一个cconssolee,显示示“ANNDROOID”mmsg。 2. 初始始化成功功后,就就开始mmounntinng系统统,具体体参见(sysstemmcooremouuntddMoounttd.cc) 中的maain函函数。 3接下来来运行nndrooidRRunttimee,并开开始启动动javva虚拟拟机daalviikvmm。 4. Jaava虚虚拟机启启动成功功后,开开始系统统初始化化。系统统初始的的第一步步是用JJNI方方式实现现的,对对应jaava代代码为(fraamewworkksbbaseeseerviicessjaavacommanndrooidserrverrSyysteemSeerveer.jjavaa) iinitt1(Nattivee)函数数,对应应的JNNI CC+代代码为(fraamewworkksbbaseecoorejniiseerveerccom_anddroiid_sservver_SysstemmSerrverr.cppp),而而实现的的C+代码为为 (frammewoorkssbaasecmddsssysttem_serrverrliibraary Syysteem_iinitt.cppp) 中中的syysteem_iinitt()函函数。 5. syysteem_iinitt调用SuurfaaceFFlinngerr,SurrfacceFllingger的的reaadyTToRuun()函数用用BoootAnnimaatioon来实实现开机机动画,这这时候手手机或者者模拟器器显示是是一副背背景图加加一个动动态的小小机器人人。 6. 系统统初始化化的第二二步,将将启动SServverTThreead进进程,参参见SyysteemSeerveer.iinitt2()。SerrverrThrreadd将启动动各种系系统服务务,如PPoweer MManaagerr、Acttiviity Mannageer等等等,具体体参见SServverTThreead的的runn函数,SServverTThreead同同在SyysteemSeerveer.jjavaa中。 7.这之后后的事,应应该就是是进入系系统了。(这这部分没没有调查查过)。对Andrroidd启动过过程的进进一步研研究对于关注AAndrroidd底层的的朋友来来说,其其具体的的启动过过程应该该是比较较吸引我我们的。但但是很多多启动文文件什么么的,都都得addb ppushh到hoost上上来看,挺挺不方便便的,都都怪Anndrooid自自带的TToollboxx太简略略了。所所以在深深入了解解Anddroiid的启启动流程程之前,我我们来把把Bussyboox安装装到Anndrooid上上去,这这样,就就有很多多工具供供我们使使用了。 首先去去bussyboox主页页 下载载最新版版本的源源代码,然然后用aarm的的交叉编编译器编编译出bbusyyboxx的可执执行程序序,编译译的时候候需要注注意一些些设置选选项,例例如Buiild Opttionns Buiild BussyBoox aas aa sttatiic bbinaary (noo shhareed llibss) 这这个要选选上,因因上这样样子编译译出来的的bussyBoox才是是可以独独立运行行的。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 这是是交叉编编译器的的路径,要要根据具具体的情情况来设设置。Insstalllattionn Opptioons Donnt usee /uusr这样子子编译出出来的bbusyyboxx才不会会安装到到你主机机的/uusr目目录下。一一定要选选上。bussyboox的功功能选项
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!