mtk preloader

转载自:http://blog.csdn.net/mcgrady_tracy/article/details/39340209


preloader按照mtk的说法是MTK in-house developed loader,也就说是mtk内部开发的一个loader,那么单独编译preloader也是可以的,使用命令./mk project_name n pl。


1. 启动流程
首先需要明确的是preloader、lk、kernel、android这些系统镜像文件是存储在nand flash中的,然后每个mtk芯片都有个boot rom,在上电时刻,boot rom开始启动,boot rom加载preloader到内部的SRAM中,为什么是加载到内部的SRAM中,而不是外部RAM中呢,是因为这个时候外部RAM还没有被初始化好,preloader被加载完成之后,程序就从boot rom跳转到preloader处开始执行,preloader初始化好外部RAM之后,preloader将lk(或uboot)加载外部RAM中,然后跳转到lk(或uboot)中去执行,lk(或uboot)紧接着就加载bootimage(包括kernel和ramdisk)到外部RAM中,然后去执行kernel部分。启动过程如图所示:


2. 下载流程
上面是启动流程,preloader除了具有启动功能之外,他还具有下载功能。首先还是需要明确的是mtk芯片都的有个boot rom,如果没有这个rom那么,那么程序是无法被下载到nand flash中的,然后此时的flash上是为空的,没有任何数据的。系统在上电之后它会检测是启动模式还是下载模式,如果是下载模式,它会初始化一个usb的串口,将preloader加载到内部的SRAM中,跳转到preloader中去执行,初始化好flash和外部RAM之后,依次将preloader、lk、kernel、android下载到nand flash中去。下载过程如图所示:


3. 代码组织
preloader主要有三处代码:
1. mediatek/platform/mt6582/preloader
2. mediatek/custom/mt6582/preloader
3. mediatek/custom/hexing82_wet_jb5/preloader
那么同lk类似,在执行custgen过程中,会将custom目录下的内容生成到out目录中,所以参与preloader编译过程的之后两个目录:
1. mediatek/platform/mt6582/preloader
2. mediatek/custom/out/hexing82_wet_jb5/preloader
编译完成之后在out目录下生成preloader_project_name.bin

注意在mediatek目录下还有个preloader目录,这个目录下主要是一些编译脚本和makefile,最后也会在该目录下生成最终的preloader的bin文件。

以上之处如又不对之处还望大家指正。


参考文档:MTK Alps Build System.ppt、Driver_All_In_One_V1_MT6575_4.0.pdf

猜你喜欢

转载自blog.csdn.net/liangzaiEvil/article/details/78779927
MTK