日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

MTK6577+Android启动----pre-loader

發布時間:2023/12/16 Android 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MTK6577+Android启动----pre-loader 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分類:?MTK+Android開發?Android Bootloader?1478人閱讀?評論(0)?收藏?舉報

MTK6577+Android啟動----pre-loader

?

備注:

?

META mode:Mobile Engineering Test Architecture,移動工程師測試架構

ATE factory mode:automatic test environment,自動測試環境

ISRAM:internal system RAM

?

Bootloader能夠準備一個至關重要的執行環境和引導linux操作系統及Android框架(framework)。

?

bootloader主要包括設置處理器和內存的頻率、調試信息端口、可引導的存儲設備等等。在可執行環境創建好之后,接下來把software裝載到內存并執行。除了裝載software,一個外部工具也能和bootloader握手(handshake),可指示設備進入不同的操作模式,比如USB下載模式和META模式。就算沒有外部工具的握手,通過外部任何組合或是客戶自定義按鍵,bootloader也能夠進入這些模式。

?

因為bootloader的一部分和系統有關,所以MTK為了不同的應用將它分為兩部分的bootloader:

(1)??第1部分bootloader,也就是MTK內部(in-house)的pre-loader,這部分依賴平臺。

(2)??第2部分bootloader,也就是u-boot,這部分依賴操作系統,負責引導linux操作系統和Android框架。

?

?

1.?????Pre-loader源代碼

?

1.1? 源代碼目錄

?

(1)??Pre-loader的代碼在xxx\mediatek\platform\mt6577\preloader

Pre-loader核心和平臺驅動源碼。

?

(2)??xxx\mediatek\custom\<project>\preloader

依賴于平臺自定義文件的部分(platform dependent customization),比如EMI(external memory interface,外部存儲器接口)設置。

?

Inc文件夾:

1)?????cust_bldr.h

pre-loader的一些定制的特征,比如是從SDMMC還是NAND啟動、調試口選擇(UART1或是UART4)和波特率的配置等宏定義。

?

2)?????cust_msdc.h

MSDC的自定義,比如包括MSDC的時鐘頻率、命令鎖存跳變沿(上升沿或是下降沿)、數據鎖存的跳變沿、高速或是全速模式等等。

?

3)?????cust_nand.h

定義了所支持的NAND FLASH信息,比如FLASH ID、多少塊、一塊多少頁等信息,但這些被注釋掉了,主要定義了默認的訪問時間等

?

4)?????cust_rtc.h

RTC年月日的默認設置。

?

5)?????cust_sec_ctl.h

一些安全設置的定義,比如包括了項目名稱(比如cust)、平臺名稱(MT6577)、S-Boot的一些屬性等。

?

6)?????cust_usb.h.h

USB設置的宏定義,包括USB制造商、USB供應商ID(VID)、USB識別碼ID(PID)等。

?

7)?????custom_emi.h

擴展存儲器接口的寄存器和設置的結構體定義。

?

8)?????custom_MemoryDevice.h

定了采用的內存設備類型,比如H9TP32A4GDMCPR。

?

9)?????mt6577_emi.h

mt6577內存的一些函數原型,如:

extern voidmt6516_set_emi (void);

extern voidmt6516_256M_mem_setting (void);

?

10)? mt6577_emi_reg.h

內存控制寄存器的宏定義。

?

11)? mt6577_memory.h

內存的一些設置,比如用于內存測試的大小、E1和E2內存的大小和一些函數原型。

?

12)? mt6577_nfi.h

nfi是Nand Flash Interface的縮寫,和cust_nand.h內容一樣。

?

(3)??xxx\mediatek\source\preloader

開發工具,例如building、trace32 cmm文件等,pre-loader對象和鏡像二進制輸出文件

?

1.2? 編譯命令

Pre-loader單獨的編譯命令:./mk <$PROJECT> n pl

U-Boot單獨的編譯命令:./mk <$PROJECT> n ub

?

2.?????bootloader的工作流程

?

2.1? bootloader正常的啟動流程

先來看啟動流程圖:


圖1

正常啟動的主要工作如下:

(1)??設備上電后,Boot ROM開始運行。

(2)??BootROM初始化軟件堆棧(software stack)、通信端口和可引導存儲設備(比如NAND/EMMC)。

(3)??BootROM從存儲器中加載pre-loader到內部SRAM(ISRAM)中,因為這時候還沒有初始化外部的DRAM。

(4)??BootROM跳轉到pre-loader的入口處并執行。

(5)??Pre-loader初始化DRAM和加載U-Boot到RAM中。

(6)??Pre-loader跳轉到U-Boot中并執行,然后U-Boot做一些初始化,比如顯示的初始化等。

(7)??U-Boot從存儲器中加載引導鏡像(boot image),包括linux內核和ramdisk(Android呢?)

(8)??U-Boot跳轉到linux內核并執行。

?

2.2? bootloader正常的下載流程

先來看正常的下載流程圖:


圖2

正常的下載主要工作如下:

(1)??設備上電后,Boot ROM開始運行。

(2)??BootROM初始化軟件堆棧(software stack)、通信端口和可引導存儲設備(比如NAND/EMMC)。

(3)??BootROM通過UART/USB和flash工具握手。

(4)??BootROM通過UART下載pre-loader鏡像到NAND flash/EMMC中,然后重啟。

(5)??BootROM加載pre-loader到內部SRAM匯總,因為DRAM還沒有初始化。

(6)??BootROM跳轉到pre-loader并執行。

(7)??Pre-loader初始化DRAM和通過USB與flash工具握手。

(8)??Pre-loader通過USB下載其余鏡像文件,比如U-Boot、boot image、recovery image、android system image、user data到NAND FLASH/EMMC中。

?

?

2.3? Bootloader備用的下載流程(emergency download procedure)

(1)??設備上電后,Boot ROM開始運行。

(2)??BootROM初始化軟件堆棧(software stack)、通信端口和可引導存儲設備(比如NAND/EMMC)。

(3)??BootROM在emergency DL按鍵按下后,通過USB和flash工具握手。

(4)??BootROM通過USB把指定的鏡像文件下載到NAND FLASH/EMMC中。

?

?

3.?????pre-loader的功能

pre-loader是MTK內置的loader,它的主要功能如下:

(1)??負責在芯片組平臺(chipset platform)上準備好可執行的環境

(2)??如果外部工具有效,它會試圖通過UART或是USB來和外部工具握手。

(3)??從NAND/EMMC加載U-Boot,并跳轉到U-Boot。

(4)??使用工具握手,設備能夠觸發進入下載模式來下載需要的鏡像,或是進入工廠/測試模式,比如META模式和ATE工廠模式,在這些模式下可以測試模塊,或是通過傳遞引導參數給U-Boot和linux內核來校準設備(device calibration)

?

對于安全的執行環境,安全引導程序會檢查(checking)或是查證(verification),這樣能夠保護我們的芯片被攻擊(hacked)。

?

4.?????Bootloader硬件環境

當設備上電后,bootloaders被加載到不同的內存區域并執行,如下圖所示:

?

圖3

Pre-loader在芯片內部系統(chipset’s internal system)RAM的0Xc2010000位置開始執行,U-Boot在外部RAM的0x01E00000處執行。當bootloaders執行時,初始化多種硬件模塊來創建一個可執行的環境,具體是哪些硬件模塊,下面有詳細的描述。

?

4.1? pre-loaders中涉及的硬件部分

當系統啟動時,芯片組(chipset)內部的可引導ROM開始執行,并從可引導存儲設備(NAND/EMMC等等)上拷貝pre-loader。所以,需要通過初始化一些硬件模塊來為軟件創造必要的可執行環境(essential execution environment),所有這些硬件模塊在接下來描述。

(1)??PLL模塊

1)?????PLL模塊用于調整處理器和外部內存的頻率。

2)?????在PLL模塊初始化后,處理器和外部內存的頻率可由26MHZ/26MHZ增加到1GHZ/192MHZ。

(2)??UART模塊

1)?????UART模塊用于調試或是META模式下的握手。

2)?????默認情況下,UART4初始化波特率為9216000bps和用于調試信息的輸出,UART1初始化為115200bps和作為UART META魔獸端口。但也可以使用UART1作為調試或是UART META端口。

?

(3)??計時器(timer)模塊

這是個基本的模塊,用來計算硬件模塊所需要的延時或是超時時間。

?

(4)??內存模塊

1)?????Pre-loader由boot ROM加載和在芯片組內部的SRAM中執行,因為外部的DRAM還沒有初始化。

2)?????為了準備軟件整個可執行環境,pre-loader采用內置的內存設置來初始化DRAM(DRAM is initialized upon pre-loader built-inmemory settigns)。這樣,U-Boot就能夠被加載到DRAM中并執行。

?

(5)??GPIO模塊

(6)??PMIC模塊

為了提供一些基本的硬件功能,比如控制外設電源,pre-loader初始化上層模塊(upper modules)。

?

(7)??RTC模塊

1)?????當通過power按鍵開機后,pre-loader拉高RTC的PWBB來保持設備一直有電(keep the device alive)和繼續引導U-Boot。

2)?????RTC鬧鐘(alarm)有可能是設備開機的啟動源,對于這種情況,設備部需要按power按鍵就可自動啟動。

?

(8)??USB模塊

當USB線插入時,它初始化來和外部工具通信,比如用于升級系統的下載工具或是META模式觸發器的META工具。

?

(9)??NAND模塊

(10) MSDC模塊

Pre-loader可以從NAND flash或是EMMC中加載U-Boot,這兩者只能選擇其中一種來啟動。

?

?

4.2? ?

?

5.?????Pre-loader的過程(procedure)和流程(flow)

如下圖:


圖4

具體的源代碼后面再分析了。

?

6.?????Pre-loader的接口

?

主要描述pre-loader用到的主要結構體和接口。

?

6.1? 上電情景(power on scenario)

?

當檢測到按下power按鍵或是USB/充電線插入,pre-loader調用rtc_bbpu_power_on()函數來鎖存RTC的PWBB來保持設備的一直供電,這樣就算是松開power按鍵設備也不會關機。

?

此函數在xxx \mediatek\platform\mt6577\preloader\src\drivers\mt6577_rtc.c文件定義。

?

6.2? 下載過程(download procedure)

Pre-loader檢查下面的條件:

(1)??充電器已連接(charger is connected)

(2)??USB已連接

(3)??Flash工具的握手是否通過

如果滿足上面這幾種要求,pre-loader就會開始下載鏡像。

?

接下來介紹下載的鏡像定義,也允許增加我們要下載的鏡像文件,這涉及的數據結構體和函數如下,在xxx\mediatek\platform\mt6577\preloader\src\core\inc中定義:

(1)??下載鏡像類型定義

[cpp]?view plaincopy
  • typedef?enum??
  • {??
  • ????DM_IMG_FORMAT_FAT?=?0,??
  • ????DM_IMG_FORMAT_YAFFS2?=?1,??
  • ????DM_IMG_FORMAT_UNKNOWN?=?0xFFFFFFFF??
  • }?DM_IMG_FORMAT;??


  • (2)??下載鏡像枚舉定義

    [cpp]?view plaincopy
  • /**************************************************************************?
  • *??PARTITION?PART?
  • *??:?Tool?team?also?refers?to?this?datastructure?
  • *??:?So,?DO?NOT?modify?the?image?type?!!?
  • **************************************************************************/??
  • typedef?enum??
  • {??
  • ????DM_IMG_TYPE_LOGO????????????????=?0,??
  • ????DM_IMG_TYPE_BOOTIMG?????????????=?1,??
  • ????DM_IMG_TYPE_ANDROID?????????????=?2,??
  • ????DM_IMG_TYPE_USRDATA?????????????=?3,??
  • ????DM_IMG_TYPE_RECOVERY????????????=?4,??
  • ????DM_IMG_TYPE_UBOOT???????????????=?5,??
  • ????DM_IMG_TYPE_AUTHEN_FILE?????????=?6,??
  • ????DM_IMG_TYPE_SECSTATIC???????????=?7,??
  • ????DM_IMG_TYPE_EU_FT_INFORM????????=?8,??
  • ????DM_IMG_TYPE_FT_LOCK_INFORM??????=?9,??
  • ????DM_IMG_TYPE_PT_TABLE_INFORM?????=?10,??
  • ???
  • ????//cust?pack?image??
  • ????DM_IMG_TYPE_CUST_IMAGE1?????????=?100,??
  • ????DM_IMG_TYPE_CUST_IMAGE2?????????=?101,???
  • ????DM_IMG_TYPE_CUST_IMAGE3?????????=?102,???
  • ????DM_IMG_TYPE_CUST_IMAGE4?????????=?103,??
  • ???
  • ????DM_IMG_TYPE_UNKNOWN?????????????=?0xFFFFFFFF??
  • }?DM_IMG_TYPE;??


  • ?

    (3)??下載鏡像的主函數download_handler

    Pre-loader接收到從flash工具傳遞進來的“DOWNLOAD”字符串時,download_handler函數開始下載鏡像:


    圖5

    此函數在xxx\mediatek\platform\mt6577\preloader\src\core\download_legacy.c定義。

    總結

    以上是生活随笔為你收集整理的MTK6577+Android启动----pre-loader的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本一区二区在线观看视频 | 国产精品国色综合久久 | 青青操在线观看 | 黄色小视频链接 | 久久99精品久久久久久三级 | 夜间福利在线观看 | 欧美激情另类 | 成 人 黄 色 片 在线播放 | 激情另类视频 | 一区二区在线播放视频 | 黄色aa毛片 | 成人毛片18女人毛片 | 91夫妻视频 | 天天做天天摸天天爽天天爱 | 免费av一区二区 | 日本a级一区 | 日韩午夜剧场 | 久久精品亚洲a | 成人免费视频网 | 综合一区 | 欧美精品片| 日韩一区二区三区四区在线 | 亚洲4区| 国内精品福利视频 | 中文字幕不卡在线观看 | 日韩一级免费片 | 日韩av一卡 | 精品成在人线av无码免费看 | 色多多入口 | 91精品视频免费看 | 美日韩精品视频 | 国产在线色 | 精品一区中文字幕 | 日韩电影一二三区 | 欧美一区二区三区久久综合 | 女人叫床很黄很污句子 | av成人在线免费观看 | 日韩激情视频网站 | 国产高潮av | 久久久亚洲精品视频 | 国产成人+综合亚洲+天堂 | 亚洲人成在线播放 | 久热最新视频 | 不卡中文字幕在线观看 | 18久久 | 伊人影院在线观看视频 | 少妇久久久久久久久久 | 亚洲日本在线播放 | 欧美大尺度做爰啪啪床戏明星 | 亚洲国产系列 | 美女隐私免费网站 | 麻豆精品在线观看 | 黄色小视频网 | 九九热精品在线 | 草草视频在线观看 | 青青草www | eeuss一区二区| 成人爽爽爽 | 日本3级网站 | 免费日韩视频 | 国产电影免费观看高清完整版视频 | 成人黄色国产 | 菠萝菠萝蜜网站 | 蜜乳av中文字幕 | 久久久91视频 | 国产精品成人69xxx免费视频 | 夜夜嗨av一区二区三区四区 | 国产精品免费av一区二区三区 | 日日射影院 | 久久精品国产亚洲AV成人雅虎 | av视觉盛宴| 成人免费观看在线视频 | 亚洲天堂影院 | 欧美日皮视频 | 日韩h在线观看 | 91动态图 | 无码h黄肉3d动漫在线观看 | 国产精品自拍小视频 | 国产乡下妇女做爰毛片 | 黄色com | 亚洲女人天堂 | 男人天堂2021 | 色婷婷狠 | 成人av综合网 | 可以免费看的毛片 | 国产一区二区三区久久 | 久草精品视频在线观看 | 国产美女精品人人做人人爽 | 日日草日日干 | 在线看片日韩 | 99999精品视频| 亚洲色图18p| 五月香蕉网 | 伊人黄| 亚洲激情三区 | 国产美女精品人人做人人爽 | 欧美麻豆| 国产男男gay体育生白袜 | 美女毛片 |