bootloader

来源:互联网 发布:jsocket编程聊天室 编辑:程序博客网 时间:2024/05/18 03:50

Nand flash不能片上执行(page读写 NFB_ReadPhysicalPage, NFB_ProgramPhysicalPage, block擦除 NFB_ErasePhysicalBlock),故需要bootloader.

MTK平台关于bootloader的代码,可参考bl_bootarm.s, bl_main.c, bl_init.c

bl_bootarm.s:

1. 中断向量表, reset handler...

2. disable IRQ&FIQ

3. INT_InitEMIInitCode, Initialize the EMI setting related code regions

4. SetPLLEMI, custom_InitDRAM

5. PreserveExtBootloaderHeader, To remove some information before regionInit, or it will be destroyed

6. GenerateRandomSeed

7. InitRegions

8. Init

9. LoadExtBootloader, VerifyExtBootloader

10. ExtBootloader

 

bl_man.c

ExtBootloader:

1. LoadImageListblock

2. CacheInit

3. BootAndHandOver

   1). LoadPrimariMAUI

   2). RemapCmd

   3). jump_cmd

 

 

MTK代码的加载:

1. Extbootloader是由bootloader加载的, 即bl_bootarm.s中LoadExtBootloader

2. First ROM(及少数secu方面的)是由Extbootloader加载的, 即LoadPrimariMAUI

3. Second ROM(及CUST ROM,STUDY PARA, CUST PARA, SECU等)是由First ROM中的Application_Initialize中的NFB_LoadingSecondaryMAUI加载的      (Nand Flash进度条显示的时候)

4. Third ROM及demand paging是调用到才加载进RAM的(两者机制可能不一样, 留待以后研究)

 

 

INC_Initialize 初始化nucleus各组件(QUI--Queue, SMI--Semaphore, MBI--mail box, PII--pipe, EVI--event group, PMI--partition memory, DMI--dynamic memory, TMI--timer , IOI--io Driver, ERI--error handling, HII--history, TCI---thread control...)

之后Application_Initialize留给客户

最后TCT_Schedule

 

 

原创粉丝点击