Friday, July 17, 2015

ANDROID သံုး ဖုန္း POWER စဖြင့္တာနဲ႔ အဆင့္ဆင့္ ဘယ္လို အလုပ္လုပ္သလဲ

ပထမအဆင့္
Power စဖြင့္တာနဲ႔ ROM ထဲမွာရွိတဲ့ Boot ROM Code က စပီးအလုပ္လုပ္ပါတယ္၊ Boot ROM Code လုပ္တဲ့အလုပ္က Bootlaoder ကို RAM ထဲကို ၀န္တင္တယ္၊ RAM ထဲေရာက္တဲ့ Bootloader စတင္အလုပ္လုပ္တယ္၊

ဒုတိယ အဆင့္
Bootloader ဆိုတာ Software Program ေသးေသးေလးပါ၊ သူ႔ထဲမွာ ကုတ္ေတြေရးထားတယ္၊ အဲ့ဒီ့ကုတ္ေတြက Bootloader လုပ္မယ့္ အလုပ္ျဖစ္တဲ့ ညြန္ၾကားခ်က္ေတြပါ၊ Bootloader စတင္အလုပ္လုပ္တဲ့ အခါမွာ အဆင့္ ႏွစ္ဆင့္ နဲ႔ အလုပ္လုပ္ပါတယ္၊ ပထမအဆင့္က Network, Memory တို႔လို လိုအပ္သမွ် Program ေတြ အားလံုးကို External RAM ထဲကို ၀န္တင္ပါတယ္၊ ဒုတိယ အဆင့္မွာေတာ့ Kernel စတင္ အလုပ္လုပ္ဖို႔လိုအပ္တဲ့ Network နဲ႔ Memory တို႔ကို စတင္ေစပါတယ္၊ ဒီဆင့္ကဲျဖစ္စဥ္ႏွစ္ခုကို ျဖစ္ေပၚေစတာက init.S ဆိုတဲ့ Stack ေတြခြဲျခားတဲ့ဖိုင္ပါ၊ သူက Stacks ေတြကို ခြဲထုတ္ပီး BSS Segments ေတြကို 0 ကေနစတင္ေစတယ္၊ ပီးေတာ့ main.c ဖိုင္ထဲက _main() funciton ကိုေခၚတယ္၊ _main() Function က Hardware အစိတ္အပိုင္းေတြျဖစ္တဲ့ Clock,borad,keyboard,console တို႔ကို စတင္တယ္ အဓိက ျဖစ္တဲ့ Linux Tag ကိုဖန္တီးတယ္၊ Linux Tag က linux kernel image ကို RAM ေပၚမွာ ၀င္တင္ပီးေတာ့ စတင္အလုပ္လုပ္ေစတယ္၊

တတိယအဆင့္
Kenel စတင္အလုပ္လုပ္ပီဆိုတာနဲ႔ System စတင္တဲ့အလုပ္ေတြျဖစ္တဲ့ cache, protected memory, scheduling နဲ႔ Drivers ၀င္တင္ျခင္းေတြကိုစလုပ္တယ္၊ ပီးရင္ System File ထဲက 'init' ဖိုင္ကိုရွာပီး System စတင္ဖို႔အတြက္ root process ကိုစတင္တယ္၊

စတုထၳအဆင့္
init process က System process အားလံုးရဲ့ မိခင္ပါပဲ သူက အားလံုးရဲ့ အရင္ စလို႔ပါ၊ init process က အလုပ္ႏွစ္ခုကိုလုပ္ပါတယ္၊ ၁. /sys, /dev, /proc တို႔ကို စတင္ျခင္း၊ ၂. init.rc file ကိုစ Run ေစျခင္းပါ၊

init process ကို init ရဲ့: android source/system/core/init မွာရွာေတြ႔ႏိုင္ပါတယ္၊
init.rc ကို android source/system/core/rootdir/init.rc မွာရွာေတြ႔ႏိုင္ပါတယ္၊
readme.txt ကို andorid source/system/core/init/readme.txt

init ဖိုင္ အလုပ္စလုပ္မယ္၊ လုပ္တဲ့ အလုပ္ေတြနဲ႔ services ေတြက အမ်ားႀကီးပါပဲ၊

init နဲ႔ oom_adj တို႔ကို ေနရာခ်ျခင္း. the init process အတြက္ security context ကို ေနရာခ်ျခင္း
Global environment Setting ခ်တယ္၊ cpu အတြက္ cgroup ကိုတည္ေဆာက္ပီးအလုပ္လုပ္ေစတယ္
mtd အပိုင္းကို စတင္တယ္၊
System directories ရဲ့ permissions ကို ေျပာင္းတယ္
data folders နဲ႔ sub folders ေတြရဲ့ Permission ကိုေျပာင္းတယ္၊
Network ကိုစတင္တယ္၊ ,Memory Management စလုပ္တယ္၊
location, audio နဲ႔ စိတ္ႀကိဳက္ Share လုပ္မယ့္ ၀န္ေဆာင္မွဴေတြကို စီစဥ္ဖို႔အတြက္ System Manager ကိုစတင္တယ္၊
zygote ကို app_process တစ္ခုအေနနဲ႔ စတင္ပါပီ၊ ဒီအဆင့္မွာေတာ့ Android Logo ကို ဖုန္းမ်က္ႏွာျပင္မွာ စတင္ျမင္ေတြ႔ရပါပီ၊

ပဥၥမအဆင့္
Zygote နဲ႔ Dalvik Java မွာ Virtual Machine ရဲ့ Instance တစ္ခုစီက Applications တစ္ခုစီအတြက္ Memory မွာ ေနရာယူထားပါတယ္၊ အကယ္၍ Virtual Machine ထဲက Instance ေတြအမ်ား ႀကီးရွိေနခဲ့မယ္ဆိုရင္ Instance တစ္ခုစီအတြက္ memory မွာ ေနရာေတြအမ်ားႀကီးေပးရမွာျဖစ္တဲ့ အတြက္ အခ်ိန္နဲ႔ memory ေနရာ အေတာ္မ်ားမ်ားကို ယူသြားပါလိမ့္မယ္၊ ဒီျပသနာကိုရွင္းဖို႔အတြက္ Zygote က ကူညီေပးပါတယ္၊
Zygote က Shared Code ေတြကို Dalvik VM က တစ္ဆင့္ အသံုးျပဳႏိုင္ေအာင္စီစဥ္ေပးပါတယ္၊ ဒီ့အတြက္ေၾကာင့္ Memory အသံုးျပဳမူ နည္းသြားပီး Application Run မယ့္ အခ်ိန္ကိုလဲ ခ်ံဳ႕ေပးသြားပါတယ္၊ Zygote က Core library ကို ကို System Boot စတင္ကတည္းက ၀န္တင္ထားပါတယ္၊ Core Classes က Read-Only ျဖစ္ပီး Android Software Development Kid ရဲ့ အစိတ္အပိုင္းတစ္ခုသာလွ်င္ျဖစ္ပါတယ္၊ Java Virtual Machine ထဲက instance တစ္ခုစီမွာ ကိုယ္ပိုင္ Cole Library Class File ေတြရွိပီး Objects ေတြလဲ အမ်ားႀကီးပါ၀င္ပါတယ္၊

Zygote အလုပ္စတင္ပီဆိုတာနဲ႔ ZygoteInit class ကို၀င္တင္တယ္၊
Zygote Class ကို ေအာက္က လင့္မွာ ရွာႏိုင္ပါတယ္၊
Android Source/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

Zygote Class ေတြရဲ့ အလုပ္လုပ္မွဴမွာ
registerZygoteSocket() - server socket မွာ Zygote Command Connection အတြက္ Registers လုပ္တယ္၊
preloadClasses() - ႀကိဳတင္၀န္တင္ဖို႔လိုအပ္တဲ့ Classes ေတြအားလံုးကို စာရင္းလုပ္ထားတဲ့ text File ကို တင္ အလုပ္လုပ္ေစတယ္၊
“preloaded-classes” ဖိုင္ကို <Android Source>/frameworks/base မွာရွာႏိုင္ပါတယ္၊
preloadResources() - preloadReaources ဆိုတာကေတာ့ native themes and layouts, နဲ႔ androd.R ဖိုင္မွာပါသမွ် Methods ေတြကို ၀န္တင္ျခင္းပါ၊
ဒီအဆင့္မွာေတာ့ bootanimation ကိုစတင္ျမင္ႏိုင္ပါပီ၊

ဆ႒မ အဆင့္
System Service or Services
အထက္က အဆင့္ေတြအားလံုပီးသြားေတာ့ runtime က Zygote ကို System Servers ကိုစတင္ဖို႔ လွမ္းေျပာမယ္၊ System Servers ကို Assembler နဲ႔ Java ကုတ္ေတြ သံုးပီးေရးပါတယ္၊ System Server မွာ System Service ေတြ အားလံုးပါပါတယ္၊ Zygote က မူရင္းလုပ္ေနတဲ့ အလုပ္ေတြအျမင္ အျခား အလုပ္တစ္ခုအျဖစ္ System Services ကိုစတင္ ဖို႔အတြက္ startSystemServer Method ကိုေခၚတယ္၊ startSystemServer မွာ ေအာက္ပါ အလုပ္ေတြပါ၀င္တယ္၊

1. Power Manager စတင္ျခင္း
2. Activity Manager ဖန္တီးျခင္း
3. Telephony Registry စတင္ျခင္း
4. Package Manager စတင္ျခင္း
5. System Process အျဖစ္ Activity Manager Service ေနရာခ်ျခင္း
6. Context Manager စတင္ျခင္း
7. System Context Providers စတင္ျခင္း
8. Battery Service စတင္ျခင္း
9. Alarm Manager စတင္ျခင္း
10. Sensor Service စတင္ျခင္း
11. Window Manager စတင္ျခင္း
12. Bluetooth Service စတင္ျခင္း
13. Mount Service စတင္ျခင္း

အျခား ၀န္ေဆာင္မွဴမ်ား

1. Status Bar Service စတင္ျခင္း
2. Hardware Service စတင္ျခင္း
3. NetStat Service စတင္ျခင္း
4. Connectivity Service စတင္ျခင္း
5. Notification Manager စတင္ျခင္း
6. DeviceStorageMonitor Service စတင္ျခင္း
7. Location Manager စတင္ျခင္း
8. Search Service စတင္ျခင္း
9. Clipboard Service စတင္ျခင္း
10. Service မ်ားစစ္ေဆးျခင္း
11. Wallpaper Service စတင္ျခင္း
12. Audio Service စတင္ျခင္း
13. HeadsetObserver စတင္ျခင္း
14. AdbSettingsObserver စတင္ျခင္း

သတၱမဆင့္
Memory ထဲမွာ System Services စတင္ အလုပ္လုပ္ပီဆိုရင္ေတာ့ Booting process ပီးဆံုးသြားပါပီ၊ ACTION_BOOT_COMPLETED ျဖစ္တဲ့ အတြက္ Broadcase Action စတင္ပါပီ၊

ဒီမွာရွင္းျပထားတာ ေတြက နားမလည္မွဴေတြ ရွိေနႏိုင္ပါတယ္၊ ဒီ့အတြက္ ကၽြန္ေတာ္တို႔ ေန႔စဥ္ က႑ တစ္ခုစီအေနနဲ႔ အရွင္းဆံုးပံုနဲ႔ ျပန္ရွင္းျပသြားမွာပါ၊ System File Pratition နဲ႔ ပက္သက္သမွ် ကို ရွင္းရာမွာ အထက္က Boot Process မွာပါတဲ့ အခ်က္ေတြျပန္ပါလာမွာျဖစ္သလို အားလံုးကို တစ္ခုစီျပန္ရွင္းျပမွာျဖစ္တဲ့ အတြက္ လက္တေလာ မရွင္းတာရွိရင္ စိတ္မပ်က္ပဲ ေနာက္ရက္ေတြ တစ္ခုစီရွင္းျပတာကိုလာဖတ္ေစခ်င္ပါတယ္ခင္ဗ်ာ

Credit to mobile it new


1 comments:

Ko Moe said...

ေက်းေက်း