Monday, February 10, 2014

How to wrok android phone






















ပထမအဆင့်
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 မှာပါတဲ့ အချက်တွေပြန်ပါလာမှာဖြစ်သလို အားလုံးကို တစ်ခုစီပြန်ရှင်းပြမှာဖြစ်တဲ့ အတွက် လက်တလော မရှင်းတာရှိရင် စိတ်မပျက်ပဲ နောက်ရက်တွေ တစ်ခုစီရှင်းပြတာကိုလာဖတ်စေချင်ပါတယ်ခင်ဗျာ၊
အမှားပါတာတွေ့ရင် brightermyanmar@gmail.com ကို စာပို့ပီး အကြောင်းကြားနိုင်ပါတယ်၊

Credit : Brighter Myanmar


Posted From::

ကိုမြတ် (BE-Mechatronics)    http://www.mcmyatkyawthu.blogspot.com/

0 comments:

Post a Comment