µ±°´ÏÂAndroidÉ豸µçÔ´¼üʱ¾¿¾¹·¢ÉúÁËʲô£¿
AndroidµÄÆô¶¯¹ý³ÌÊÇÔõôÑùµÄ£¿
ʲôÊÇLinuxÄںˣ¿
×ÀÃæÏµÍ³linuxÄÚºËÓëAndroidϵͳlinuxÄÚºËÓÐÊ²Ã´Çø±ð£¿
ʲôÊÇÒýµ¼×°ÔسÌÐò£¿
ʲôÊÇZygote£¿
ʲôÊÇX86ÒÔ¼°ARM linux£¿
ʲôÊÇinit.rc?
ʲôÊÇϵͳ·þÎñ£¿
µ±ÎÒÃÇÏëµ½AndroidÆô¶¯¹ý³Ìʱ£¬ÄÔº£ÖÐ×ÜÊÇð³öºÜ¶àÒÉÎÊ¡£±¾ÎĽ«½éÉÜAndroidµÄÆô¶¯¹ý³Ì£¬Ï£ÍûÄܰïÖúÄãÕÒµ½ÉÏÃæÕâЩÎÊÌâµÄ´ð°¸¡£
AndroidÊÇÒ»¸ö»ùÓÚLinuxµÄ¿ªÔ´²Ù×÷ϵͳ¡£x86£¨x86ÊÇһϵÁеĻùÓÚintel
8086 CPUµÄ¼ÆËã»ú΢´¦ÀíÆ÷Ö¸Á¼Ü¹¹£©ÊÇlinuxÄں˲¿Êð×î³£¼ûµÄϵͳ¡£È»¶ø£¬ËùÓеÄAndroidÉ豸¶¼ÊÇÔËÐÐÔÚARM´¦ÀíÆ÷£¨ARM
Ô´×Ô½ø½×¾«¼òÖ¸Á»úÆ÷£¬Ô´×ÔARM¼Ü¹¹£©ÉÏ£¬³ýÁËÓ¢ÌØ¶ûµÄXoloÉ豸(http://xolo.in/xolo-x900-features)¡£XoloÀ´Ô´×ÔÁ趯1.6GHz
x86´¦ÀíÆ÷¡£AndroidÉ豸»òÕßǶÈëÉ豸»òÕß»ùÓÚlinuxµÄARMÉ豸µÄÆô¶¯¹ý³ÌÓë×ÀÃæ°æ±¾Ïà±ÈÉÔ΢ÓÐЩ²î±ð¡£ÕâÆªÎÄÕÂÖУ¬ÎÒ½«½âÊÍAndroidÉ豸µÄÆô¶¯¹ý³Ì¡£ÉîÈëlinuxÆô¶¯¹ý³ÌÊÇһƪ½²×ÀÃælinuxÆô¶¯¹ý³ÌµÄºÃÎÄ¡£
µ±Ä㰴ϵçÔ´¿ª¹ØºóAndroidÉ豸ִÐÐÁËÒÔϲ½Öè¡£
AndroidÆô¶¯Á÷³Ì/¹ý³Ì
µÚÒ»²½£ºÆô¶¯µçÔ´ÒÔ¼°ÏµÍ³Æô¶¯
µ±µçÔ´°´Ï£¬Òýµ¼Ð¾Æ¬´úÂ뿪ʼ´ÓÔ¤¶¨ÒåµÄµØ·½£¨¹Ì»¯ÔÚROM£©¿ªÊ¼Ö´ÐС£¼ÓÔØÒýµ¼³ÌÐòµ½RAM£¬È»ºóÖ´ÐС£
µÚ¶þ²½£ºÒýµ¼³ÌÐò
Òýµ¼³ÌÐòÊÇÔÚAndroid²Ù×÷ϵͳ¿ªÊ¼ÔËÐÐǰµÄÒ»¸öС³ÌÐò¡£Òýµ¼³ÌÐòÊÇÔËÐеĵÚÒ»¸ö³ÌÐò£¬Òò´ËËüÊÇÕë¶ÔÌØ¶¨µÄÖ÷°åÓëоƬµÄ¡£Éè±¸ÖÆÔìÉÌҪôʹÓúÜÊÜ»¶ÓµÄÒýµ¼³ÌÐò±ÈÈçredboot¡¢uboot¡¢qi
bootloader»òÕß¿ª·¢×Ô¼ºµÄÒýµ¼³ÌÐò£¬Ëü²»ÊÇAndroid²Ù×÷ϵͳµÄÒ»²¿·Ö¡£Òýµ¼³ÌÐòÊÇOEM³§ÉÌ»òÕßÔËÓªÉ̼ÓËøºÍÏÞÖÆµÄµØ·½¡£
Òýµ¼³ÌÐò·ÖÁ½¸ö½×¶ÎÖ´ÐС£µÚÒ»¸ö½×¶Î£¬¼ì²âÍⲿµÄRAMÒÔ¼°¼ÓÔØ¶ÔµÚ¶þ½×¶ÎÓÐÓõijÌÐò£»µÚ¶þ½×¶Î£¬Òýµ¼³ÌÐòÉèÖÃÍøÂç¡¢ÄÚ´æµÈµÈ¡£ÕâЩ¶ÔÓÚÔËÐÐÄÚºËÊDZØÒªµÄ£¬ÎªÁË´ïµ½ÌØÊâµÄÄ¿±ê£¬Òýµ¼³ÌÐò¿ÉÒÔ¸ù¾ÝÅäÖòÎÊý»òÕßÊäÈëÊý¾ÝÉèÖÃÄںˡ£
AndroidÒýµ¼³ÌÐò¿ÉÒÔÔÚ\bootable\bootloader\legacy\usbloaderÕÒµ½¡£
´«Í³µÄ¼ÓÔØÆ÷°üº¬µÄ¸öÎļþ£¬ÐèÒªÔÚÕâÀï˵Ã÷£º
init.s³õʼ»¯¶ÑÕ»£¬ÇåÁãBBS¶Î£¬µ÷ÓÃmain.cµÄ_main()º¯Êý£»
main.c³õʼ»¯Ó²¼þ£¨ÄÖÖÓ¡¢Ö÷°å¡¢¼üÅÌ¡¢¿ØÖÆÌ¨£©£¬´´½¨linux±êÇ©¡£
¸ü¶à¹ØÓÚAndroidÒýµ¼³ÌÐòµÄ¿ÉÒÔÔÚÕâÀïÁ˽⡣
µÚÈý²½£ºÄÚºË
AndroidÄÚºËÓë×ÀÃælinuxÄÚºËÆô¶¯µÄ·½Ê½²î²»¶à¡£ÄÚºËÆô¶¯Ê±£¬ÉèÖûº´æ¡¢±»±£»¤´æ´¢Æ÷¡¢¼Æ»®ÁÐ±í£¬¼ÓÔØÇý¶¯¡£µ±ÄÚºËÍê³ÉϵͳÉèÖã¬ËüÊ×ÏÈÔÚϵͳÎļþÖÐѰÕÒ¡±init¡±Îļþ£¬È»ºóÆô¶¯root½ø³Ì»òÕßϵͳµÄµÚÒ»¸ö½ø³Ì¡£
µÚËIJ½£ºinit½ø³Ì
initÊǵÚÒ»¸ö½ø³Ì£¬ÎÒÃÇ¿ÉÒÔ˵ËüÊÇroot½ø³Ì»òÕß˵Óнø³ÌµÄ¸¸½ø³Ì¡£init½ø³ÌÓÐÁ½¸öÔðÈΣ¬Ò»ÊǹÒÔØÄ¿Â¼£¬±ÈÈç/sys¡¢/dev¡¢/proc£¬¶þÊÇÔËÐÐinit.rc½Å±¾¡£
init½ø³Ì¿ÉÒÔÔÚ/system/core/initÕÒµ½¡£
init.rcÎļþ¿ÉÒÔÔÚ/system/core/rootdir/init.rcÕÒµ½¡£
readme.txt¿ÉÒÔÔÚ/system/core/init/readme.txtÕÒµ½¡£
¶ÔÓÚinit.rcÎļþ£¬AndroidÖÐÓÐÌØ¶¨µÄ¸ñʽÒÔ¼°¹æÔò¡£ÔÚAndroidÖУ¬ÎÒÃǽÐ×öAndroid³õʼ»¯ÓïÑÔ¡£
Android³õʼ»¯ÓïÑÔÓÉËÄ´óÀàÐ͵ÄÉùÃ÷×é³É£¬¼´Actions£¨¶¯×÷£©¡¢Commands£¨ÃüÁ¡¢Services£¨·þÎñ£©¡¢ÒÔ¼°Options£¨Ñ¡Ï¡£
Action£¨¶¯×÷£©£º¶¯×÷ÊÇÒÔÃüÁîÁ÷³ÌÃüÃûµÄ£¬ÓÐÒ»¸ö´¥·¢Æ÷¾ö¶¨¶¯×÷ÊÇ·ñ·¢Éú¡£
Óï·¨
on <trigger> <command> <command> <command> |
Service£¨·þÎñ£©£º·þÎñÊÇinit½ø³ÌÆô¶¯µÄ³ÌÐò¡¢µ±·þÎñÍ˳öʱinit½ø³Ì»áÊÓÇé¿öÖØÆô·þÎñ¡£
Óï·¨
service <name> <pathname> [<argument>]* <option> <option> ... Options£¨Ñ¡Ï |
Ñ¡ÏîÊǶԷþÎñµÄÃèÊö¡£ËüÃÇÓ°Ïìinit½ø³ÌÈçºÎÒÔ¼°ºÎʱÆô¶¯·þÎñ¡£
ÔÛÃÇÀ´¿´¿´Ä¬ÈϵÄinit.rcÎļþ¡£ÕâÀïÎÒÖ»ÁгöÁËÖ÷ÒªµÄʼþÒÔ¼°·þÎñ¡£
Table Action/Service ÃèÊö on early-init ÉèÖÃinit½ø³ÌÒÔ¼°Ëü´´½¨µÄ×Ó½ø³ÌµÄÓÅÏȼ¶£¬ÉèÖÃinit½ø³ÌµÄ°²È«»·¾³ on init ÉèÖÃÈ«¾Ö»·¾³£¬Îªcpu accounting´´½¨cgroup(×ÊÔ´¿ØÖÆ)¹ÒÔØµã on fs ¹ÒÔØmtd·ÖÇø on post-fs ¸Ä±äϵͳĿ¼µÄ·ÃÎÊȨÏÞ on post-fs-data ¸Ä±ä/dataĿ¼ÒÔ¼°ËüµÄ×ÓĿ¼µÄ·ÃÎÊȨÏÞ on boot »ù±¾ÍøÂçµÄ³õʼ»¯£¬ÄÚ´æ¹ÜÀíµÈµÈ service servicemanager Æô¶¯ÏµÍ³¹ÜÀíÆ÷¹ÜÀíËùÓеı¾µØ·þÎñ£¬±ÈÈçλÖá¢ÒôƵ¡¢Shared preferenceµÈµÈ¡ service zygote Æô¶¯zygote×÷ΪӦÓýø³Ì |
ÔÚÕâ¸ö½×¶ÎÄã¿ÉÒÔÔÚÉ豸µÄÆÁÄ»ÉÏ¿´µ½¡°Android¡±logoÁË¡£
µÚÎå²½
ÔÚJavaÖУ¬ÎÒÃÇÖªµÀ²»Í¬µÄÐéÄâ»úʵÀý»áΪ²»Í¬µÄÓ¦Ó÷ÖÅ䲻ͬµÄÄÚ´æ¡£¼ÙÈçAndroidÓ¦ÓÃÓ¦¸Ã¾¡¿ÉÄÜ¿ìµØÆô¶¯£¬µ«Èç¹ûAndroidϵͳΪÿһ¸öÓ¦ÓÃÆô¶¯²»Í¬µÄDalvikÐéÄâ»úʵÀý£¬¾Í»áÏûºÄ´óÁ¿µÄÄÚ´æÒÔ¼°Ê±¼ä¡£Òò´Ë£¬ÎªÁ˿˷þÕâ¸öÎÊÌ⣬Androidϵͳ´´ÔìÁË¡±Zygote¡±¡£ZygoteÈÃDalvikÐéÄâ»ú¹²Ïí´úÂë¡¢µÍÄÚ´æÕ¼ÓÃÒÔ¼°×îСµÄÆô¶¯Ê±¼ä³ÉΪ¿ÉÄÜ¡£ZygoteÊÇÒ»¸öÐéÄâÆ÷½ø³Ì£¬ÕýÈçÎÒÃÇÔÚǰһ¸ö²½ÖèËù˵µÄÔÚϵͳÒýµ¼µÄʱºòÆô¶¯¡£ZygoteÔ¤¼ÓÔØÒÔ¼°³õʼ»¯ºËÐÄ¿âÀࡣͨ³££¬ÕâЩºËÐÄÀàÒ»°ãÊÇÖ»¶ÁµÄ£¬Ò²ÊÇAndroid
SDK»òÕߺËÐÄ¿ò¼ÜµÄÒ»²¿·Ö¡£ÔÚJavaÐéÄâ»úÖУ¬Ã¿Ò»¸öʵÀý¶¼ÓÐËü×Ô¼ºµÄºËÐÄ¿âÀàÎļþºÍ¶Ñ¶ÔÏóµÄ¿½±´¡£
Zygote¼ÓÔØ½ø³Ì
¼ÓÔØZygoteInitÀ࣬Դ´úÂ룺/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
registerZygoteSocket()ΪzygoteÃüÁîÁ¬½Ó×¢²áÒ»¸ö·þÎñÆ÷Ì×½Ó×Ö¡£
preloadClassed ¡°preloaded-classes¡±ÊÇÒ»¸ö¼òµ¥µÄ°üº¬Ò»ÏµÁÐÐèÒªÔ¤¼ÓÔØÀàµÄÎı¾Îļþ£¬Äã¿ÉÒÔÔÚ<Android
Source>/frameworks/baseÕÒµ½¡°preloaded-classes¡±Îļþ¡£
preloadResources() preloadResourcesÒ²Òâζ×ű¾µØÖ÷Ìâ¡¢²¼¾ÖÒÔ¼°android.RÎļþÖаüº¬µÄËùÓж«Î÷¶¼»áÓÃÕâ¸ö·½·¨¼ÓÔØ¡£
ÔÚÕâ¸ö½×¶Î£¬Äã¿ÉÒÔ¿´µ½Æô¶¯¶¯»¡£µÚÁù²½£ºÏµÍ³·þÎñ»ò·þÎñ
Íê³ÉÁËÉÏÃæ¼¸²½Ö®ºó£¬ÔËÐл·¾³ÇëÇóZygoteÔËÐÐϵͳ·þÎñ¡£ÏµÍ³·þÎñͬʱʹÓÃnativeÒÔ¼°java±àд£¬ÏµÍ³·þÎñ¿ÉÒÔÈÏΪÊÇÒ»¸ö½ø³Ì¡£Í¬Ò»¸öϵͳ·þÎñÔÚAndroid
SDK¿ÉÒÔÒÔSystem ServicesÐÎʽ»ñµÃ¡£ÏµÍ³·þÎñ°üº¬ÁËËùÓеÄSystem Services¡£
Zygote´´½¨ÐµĽø³ÌÈ¥Æô¶¯ÏµÍ³·þÎñ¡£Äã¿ÉÒÔÔÚZygoteInitÀàµÄ¡±startSystemServer¡±·½·¨ÖÐÕÒµ½Ô´´úÂë¡£
ºËÐÄ·þÎñ£º
1.Æô¶¯µçÔ´¹ÜÀíÆ÷£»
2.´´½¨Activity¹ÜÀíÆ÷£»
3.Æô¶¯µç»°×¢²á£»
4.Æô¶¯°ü¹ÜÀíÆ÷£»
5.ÉèÖÃActivity¹ÜÀí·þÎñΪϵͳ½ø³Ì£»
6.Æô¶¯ÉÏÏÂÎĹÜÀíÆ÷£»
7.Æô¶¯ÏµÍ³Context Providers£»
8.Æô¶¯µç³Ø·þÎñ£»
9.Æô¶¯¶¨Ê±¹ÜÀíÆ÷£»
10.Æô¶¯´«¸Ð·þÎñ£»
11.Æô¶¯´°¿Ú¹ÜÀíÆ÷£»
12.Æô¶¯À¶ÑÀ·þÎñ£»
13.Æô¶¯¹ÒÔØ·þÎñ¡£
ÆäËû·þÎñ£º
1.Æô¶¯×´Ì¬À¸·þÎñ£»
2.Æô¶¯Ó²¼þ·þÎñ£»
3.Æô¶¯ÍøÂç״̬·þÎñ£»
4.Æô¶¯ÍøÂçÁ¬½Ó·þÎñ£»
5.Æô¶¯Í¨Öª¹ÜÀíÆ÷£»
6.Æô¶¯É豸´æ´¢¼àÊÓ·þÎñ£»
7.Æô¶¯¶¨Î»¹ÜÀíÆ÷£»
8.Æô¶¯ËÑË÷·þÎñ£»
9.Æô¶¯¼ôÇаå·þÎñ£»
10.Æô¶¯µÇ¼Ç·þÎñ£»
11.Æô¶¯±ÚÖ½·þÎñ£»
12.Æô¶¯ÒôƵ·þÎñ£»
13Æô¶¯¶ú»ú¼àÌý£»
14.Æô¶¯AdbSettingsObserver£¨´¦ÀíadbÃüÁ¡£
µÚÆß²½£ºÒýµ¼Íê³É
Ò»µ©ÏµÍ³·þÎñÔÚÄÚ´æÖÐÅÜÆðÀ´ÁË£¬Android¾ÍÍê³ÉÁËÒýµ¼¹ý³Ì¡£ÔÚÕâ¸öʱºò¡°ACTION_BOOT_COMPLETED¡±¿ª»úÆô¶¯¹ã²¥¾Í»á·¢³öÈ¥¡£
|