TI DM3730 EBOOT分析(一)

EBOOT主函數調用BootLoaderMain();微軟已經固定了,EBoot的開發主要是完善BootLoaderMain調用的幾個函數。

1.relocate globals to RAM
    KernelRelocate (pTOC)


2. Init debug support. We can use OEMWriteDebugString afterward.
    OEMDebugInit ()       

3.initialize platform (clock, drivers, transports, etc)

   OEMPlatformInit ()

 

 4. call OEM specific pre-download function 

  OEMPreDownload


5(1). download image
        if (!DownloadImage (&dwImageStart, &dwImageLength, &dwLaunchAddr))

5(2).final call to launch the image. never returned
        OEMLaunch (dwImageStart, dwImageLength, dwLaunchAddr, (const ROMHDR *)dwpToc);

OEMPlatformInit 初始化平臺,沒什麼可以說的,因爲35系列和37系列BSP是整合在一起的,所以先判斷CPU型號,然後做對應的初始化處理。

 

我們主要看一下OEMPreDownload這個函數,做的前三個工作,稱之爲PreDownload準備A,B,C.

A. BLReserveBootBlocks,查看實現函數,Nothing to do... 太無恥了...咱們繼續

BOOL BLReserveBootBlocks(
    BOOT_CFG *pBootCfg
    )
{
    UNREFERENCED_PARAMETER(pBootCfg);
    // Nothing to do...
    return TRUE;
}

B. BLReadBootCfg(&g_bootCfg),讀取boot的配置參數,如果讀取失敗,則載入默認值,這個不用多說,不熟悉配置信息的可以通過默認值,學習一下了。

C.BLConfigureFlashPartitions(FALSE);這個函數比較重要,咱們進去看看,FMD_Init,BP_Init,BP_OpenPartition,BP_LowLevelFormat,一眼看去都是

熟悉的函數啊,簡單解釋一下,主要獲取閃存分區信息,保留區(boot),OS 區,文件系統區相關信息的獲取,如果沒有相關信息的話,此處會格式化閃存,

生成新的分區信息,此處用的是微軟提供的bootpart來管理閃存,但是萬一某一次讀取MBR信息失敗,都格式化了,呵呵,系統信息都沒了,使用要小心啊。

看來EBoot這塊代碼要重新寫了,還是自己直接管理放心一點,一般啓動代碼這塊使用也比較簡單,所以建議能不用bootpart的方法,還是儘量別用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章