Thursday, December 8, 2016

MTK Platform Phone တလံုး Power On Boot Sequence ေလးပါ။
Huawei China Phone ကို အေျခခံ ထားျခင္းျဖစ္သည္။

Boot Room
Boot Room ဆိုတာ program တမ်ိဳးပါ ဒီ program က ၾကားခံ platform OS တခုခုေပၚ
အမွီျပဳျပီး Run တာမဟုတ္ပါဘူး ( ၾကာခံ Platform OS ဆိုတာက windroow , Linux, Andrid, .,. )
CPU ကို တိုက္ရိုက္ ခိုင္းေစနိုင္ေသာ machine code အျဖစ္ ေျပာင္းျပီး CPU chip ထုတ္လုပ္ေနစဥ္
( Semiconductor level) မွာ ထည့္သြင္းထားတာပါ။

ဒါ႔ ေၾကာင့္ ဒီ Program code ကို ျပဳျပင္လို႔႔ မရ နိုင္ပါဘူး။ Mediatek CPU model အလိုက္ Boot Room program ေတြလည္း ေျပာင္းလဲနိဳင္ပါတယ္။ CPU ကို သက္ဆိုင္ရာ Power ေပးျပီး
နိဴး လိုက္တာနဲ႔ ေရွးဦးစြာ သူကိုတိုင္ဘာေတြ လုပ္ရမယ္ ဆိုတာ အရင္ဆံုး initializes လုပ္ပါတယ္,
ဆိုလိုတာက အလုပ္လုပ္ရန္ လိုအပ္ခ်က္ လိုအပ္တာေတြ သူကိုယ္တိုင္ ျပင္ဆင္တဲ႔ သေဘာပါ။

ဒီလို ျပင္ဆင္ျပီး တာနဲ႔ Internal SRAM( ISRM) Controller ကို Boot Room တည္ရိွတဲ႔
Address ကို ညႊန္ျပေပးျပီး Boot Room code ကို ISRAM ေပၚဆြဲတင္ကာ
program instruction, ညႊန္ၾကားခ်က္အတိုင္း CPU ကစတင္ေဆာင္ရြက္ပါတယ္။

ဥပမာ UART Module, External Storage ျဖစ္တဲ႔ NAND Flash/ eMMC .... စတာေတြ ကို
initialize ျပဳလုပ္ပါတယ္။ ေနာက္ Host Controller ( PC ) ေတြနဲ႔ ခ်ိပ္ဆက္ျပီး လိုအပ္ လ်ွင္ PC နွင့္
ခ်ိတ္ဆက္ ဖိုလည္း Boot Room ကလုပ္ေဆာင္ေပးပါတယ္။
ထို႔ေနာက္ Pre-Loader ေခၚ first bootloader အပိုင္းကို NAND Flash/ eMMC မွ
ISRAM ေပၚ ဆြဲတင္ျပီး Per-Loader Program အပိုင္းကို CPU အား
ဆက္လက္ လုပ္ေဆာင္ေစပါတယ္။

MTK Phone Boot Process
MTK phone တလံုး Power စဖြင့္တာနဲ႔ ပံုတြင္ျပထားသည္ အတိုင္း ေအာက္ေဖၚျပပါ
လုပ္ေဆာင္ခ်က္ေတြ အဆင့္ဆင့္လုပ္ေဆာင္ပါတယ္။

၁။ CPU ဟာ Boot Room program အား ငွင္းတြင္ပါရိွေသာ ISRAM ေပၚဆြဲတင္ကာ
Boot Room program ကို စတင္ အလုပ္လုပ္ေစပါတယ္။

၂။ Boot Room တြင္ပါဝင္ေသား ညႊန္ၾကားခ်က္ program instructions မ်ားအတိုင္း
UART Communication module, Phone boot စတတ္မဲ႔ external storage device
( NAND Flash / eMMC ) ... အစရိွတာေတြကို initialize ေခၚ စသည့္ device ေတြနဲ႔
ခ်ိပ္ဆက္ လုပ္ လုပ္ေဆာင္ရာတြင္ လိုအပ္ခ်က္မ်ားကို ျပင္ဆင္ေပးပါတယ္။

၃။ ငွင္းေနာက္ Boot Room ဟာ NAND Flash/ eMMC ရဲ႕ Boot partition အပိုင္း
( boot 1, boot 2 ) မွာရိွတဲ႔ Pre-Loader ေခၚ first bootloder ကို ISRAM ေပၚဆြဲတင္ပါတယ္။

၄။ Boot Room ဟာ Pre-Loader ကို ISRAM ေပၚတင္ျပီး တာနဲ႔ ငွင္း program instruction ကို
Pre-Loader program အစပိုင္းကို သြားေရာက္ေစျပီး Pre-Loader program ကို စတင္
အလုပ္လုပ္ ေစပါတယ္။

၅။ Pre-Loader program ဟာ CPU မွာပါ ရိွေသာ Hardware Module ေတြ ကို ပံုမွန္
အလုပ္လုပ္ နိဳင္ရန္ initializes ျပဳလုပ္ပါတယ္။ ဥပမာ PLL Module, UART Module,
Timer Module, Memory Module, GPIO Module, PMIC Module, RTC Module,
USB Module, NAND Module, MSDC Module ... အစရိွ Modules ေတြပါ။
ငွင္းေနာက္ Pre-Loader ဟာ second bootloader ေခၚ U-Boot ကို NAND Flash/ eMMC ရဲ႕
User Area Partition အပိုင္းမွ External DRAM ( APDDR1, LPDDR2, LPDDR3 ) အေပၚဆြဲတင္ပါတယ္။


၆။ Pre-Loader program instruction ကို U-Boot program အစကို သြားေရာက္ေစျပီး
 U-Boot ကို ဆက္လက္ အလုပ္လုပ္ေစပါတယ္။ U-Boot ဟာ phone မွာ တပ္ဆင္ထားတဲ႔
Hardware အပိုင္းေတြကို initializes လုပ္ေပးပါတယ္ ဥပမာ LCD Display အစရိွတာေတြပါ ။


၇။ Initialize အလုပ္ေတြျပီးသြားတဲ႔ အခါ U-Boot ဟာ eMMC ရဲ႕ User Area Partition အပိုင္းမွ
Boot image ကို external DRAM ေပၚ ဆြဲတင္ ေပးပါတယ္, ငွင္း boot image မွာ Linux Kernel နွင္႔
Ramdisk ပါ ဝင္ပါတယ္။


၈။ ငွင္းေနာက္ U-Boot program instruction ကို Linux Kernel program အစကို သြားေရာက္ေစျပီး
Linux Kernel ကို စတင္ အလုပ္လုပ္ ေစတာ ျဖစ္ပါတယ္။


၉။ Linux Kernal မွတဆင္႔ Android OS အပိုင္းျဖစ္တဲ႔ System image ကို eMMC User area partition မွ external memory DRAM ေပၚ ဆြဲ တင္ကာ Android OS ကို စတင္ အလုပ္လုပ္ ေစပါတယ္။

Team and Definitions
CPU = Central Processing Unit
UART = Universal Asynchronous Receiver Transmitter
eMMC = Embedded Multi Media Card
ISRAM = Internal Static Random Access Memory
PLL = Phase Locked Loop
GPIO = General Purpose Input/Output
PMIC = Power Management IC
RTC =Real Time Clock


Credit : Nice Mobile Spare Parts

♦♦♦♦♦♦♦
http://www.butterflymobile.net/

Image