mtk手機線刷
mtk手機刷機一般都是使用smart phone flash tool, 以我的mt6582為例,其刷機的界面如下圖1所示

圖1 MT6582刷機界面:
刷機流程如下圖2所示:
圖2 線刷鏡像下載下傳過程:
線刷流程
1、裝置上電後,最先運作的就是BootROM的代碼(BootROM是固化在手機内部晶片中的(應該是一個NOR Flash晶片), 其代碼是無法通過刷機寫進去的,是再出廠的時候就寫好的,這一塊的代碼也沒有在mtk的源碼目錄中出現,目前手中也沒有BootROM的鏡像。),BootROM首先初始化軟體堆棧(software stack),通信端口和可引導儲存設備(如NAND/EMMC) (圖2步驟1)。
2、BootROM通過UART/USB可flash tool實作握手(這時候flash tool的download按鈕應該已經處于按下狀态了),并通過UART/USB下載下傳DA代理(圖2步驟2,3),DA就是Download-Agent,在圖1中第一欄可以看到,這個DA是可以在刷機的時候指定的。在刷機時候,界面下方紅色的進度條代表正在收入DA,如圖:
3、BootROM跳轉到DA執行(圖2步驟4)。
4、DA将其他檔案下載下傳到NAND/EMMC中(圖2步驟5-10),其中下載下傳preloader的時候是紫色的進度條,下載下傳其他檔案的時候是黃色進度條,如圖:
scatter中各個檔案的作用
mtk刷機的時候需要指定一個scatter.txt檔案,這個檔案記錄的是後續的檔案分别複制到NADA/EMMC的什麼位置,下面是從scatter.txt中摘抄的一部分。
- partition_index: SYS0
//顯示的分區名
partition_name: PRELOADER
//檔案名
file_name: preloader.bin
is_download: true
type: SV5_BL_BIN
//在NADA/EMMC中的下載下傳位址
linear_start_addr: 0x0
physical_start_addr: 0x0
//這個檔案的大小
partition_size: 0xc00000
region: EMMC_BOOT_1
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: BOOTLOADERS
reserve: 0x00
- partition_index: SYS10
partition_name: RECOVERY
file_name: recovery.img
is_download: true
type: NORMAL_ROM
//在NADA/EMMC中的下載下傳位址
linear_start_addr: 0x3380000
physical_start_addr: 0x2780000
//檔案大小
partition_size: 0xa00000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
在圖2中可以看到,scatter檔案一共指定要下載下傳12個分區,這些分區的作用如下:
PRELOADER: 核心在啟動前的那一段平台相關的初始化代碼,統稱為bootloader,在mtk平台,PRELOADER和lk分别是bootloader的兩部分,前一部分的PRELOADER主要是平台相關代碼,後一部分LK主要是銜接作業系統的代碼。
MBR/EBR1/EBR2: 可能是分區相關資訊,還不确定???
UBOOT: 就是前面說的lk,botloader的第二部分代碼,這裡可以選擇進入recovery模式,還是正常啟動核心。
BOOTIMG: BOOTIMG是一個鏡像,這個鏡像是由一個目錄打包而成的,這個目錄中包含兩個檔案:
一個是zImage,就是的核心鏡像,這個鏡像是未解壓的,其核心的功能就是decompress_kernel,将真正的核心Image解壓到記憶體的某個位置,然後跳轉執行。在boot.img中搜尋gzip的檔案頭(我這裡zImage和ramdisk是通過gzip壓縮的),第一個搜到的就是壓縮後的Image,如圖,這個位置屬于zImage的區域,往前找找就可以找到zImage的代碼頭部了。
另一個是ramdisk.img,這貨又是個鏡像,在系統啟動的時候,這個ramdisk.img會被解壓到記憶體,作為系統的根目錄檔案系統(可參考initrd實作)。在boot.img中搜尋gzip檔案頭,第二個搜尋到的就是ramdisk.img了,如圖。
RECLVERY: 是recovery模式的核心。
SEC_RO: 不知道是啥????
LOGO: 這貨應該是開機畫面
ANDROID: 是system.img
CACHE: 是cache.img
USRDATA: 是userdata.img 這裡後續補充???????
mtk手機啟動
mtk手機啟動的總體流程如圖3:
BootROM啟動[3]:
BootROM是固化在晶片中的(應該是一個NOR Flash晶片), 其代碼是無法通過刷機寫進去的,應該是出廠的時候就寫好的,這一塊的代碼,也沒有在mtk的源碼目錄中出現。
裝置上電後,最先運作的就是BootROM的代碼(圖3,步驟1)。
BootROM初始化軟體堆棧(software stack),通信端口和可引導儲存設備(如NAND/EMMC)(圖3,步驟2)。
BootROM從存儲器中(上面初始化的NAND/EMMC中)加載preloader到内部SRAM/ISRAM(高速緩存)中,此時DRAM(記憶體)還未初始化(在我這裡preloader.bin大小114KB), 就是刷機圖中的第一行”PRELOADER”哪一行。(圖3,步驟3)
BOOTROM跳轉到preloader入口處執行。(圖3,步驟4)
preloader:
preloader初始化DRAM和加載U-Boot(lk)到DRAM中。(圖3,步驟5)
preloader跳轉到U-Boot執行。(圖3,步驟6)
U-Boot:
U-Boot從NADA/EMMC中加載kernel(Boot image,包括zImage和ramdisk)。(圖3,步驟7,8)
U-Boot跳轉到zImage的入口執行,這裡就可以算是linux kernel正式的入口了(此時還沒執行decompress_kernel)。(圖3,步驟9)
參考資料
[1].http://blog.csdn.net/loongembedded/article/details/38143289
[2].http://blog.csdn.net/mcgrady_tracy/article/details/39340209
[3].http://blog.csdn.net/loongembedded/article/details/38143289
[4].http://yangguangwei1987.lofter.com/
[5].http://bbs.pediy.com/showthread.php?p=1390180
[6].http://www.cnblogs.com/chyl411/p/3573047.html
[7].http://blog.csdn.net/loongembedded/article/details/42808055
原文:https://blog.csdn.net/lidan113lidan/article/details/50127325