mtk preloader简介

文章详细介绍了MTKpreloader的角色和作用,包括在启动流程中如何从nandflash加载到内部SRAM执行,以及初始化外部DRAM,接着加载lk或uboot。此外,preloader还具备下载功能,负责在下载模式下通过USB将系统镜像下载到nandflash。内容涵盖了计算机系统中ISRAM、NAND和DRAM三种存储器类型及其特性。
摘要由CSDN通过智能技术生成

前言

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


计算机系统中常用的存储器类型

ISRAM、NAND和DRAM都是计算机系统中常用的存储器类型。它们分别是:

ISRAM:即内部SRAM(Internal Static Random Access Memory),是集成在CPU芯片内部的一种高速缓存,因为其离处理器更近,所以访问速度非常快,通常用于存储程序指令、数据等需要快速读写的内容。

NAND:即NAND闪存(Not-And闪存),是一种基于闪存技术的非易失性存储器,也称为闪存磁盘,具有容量大、价格低廉、可靠性高等特点,通常被用于存储操作系统、应用程序、图像、音频、视频等数据。

DRAM:即外部RAM,动态随机访问存储器(Dynamic Random Access Memory)。这是一种高速易失性存储器,用于存储正在运行的程序和数据。由于不断需要刷新存储器电容以维持存储状态,所以相对于SRAM来说,DRAM速度较慢但更加节能。

总的来说,ISRAM和DRAM都是计算机内部用于存储数据和指令的内存,而NAND则是外部用于存储数据和文件的闪存存储器。

1、启动流程

首先需要明确的是preloader、lk、kernel、android这些系统镜像文件是存储在nand flash(闪存)中的,然后每个mtk芯片都有个boot rom。

  1. 在上电时刻,boot rom开始启动代码,boot rom加载preloader到内部的SRAM中,此时内部SRAM的preloader还不存在。(箭头1、2)
  2. 闪存中的preloader加载自身到内部SRAM中。(箭头3)
  3. 加载preloader到内部的SRAM中之后,代码就从boot rom跳转到(内部SRAM)preloader处开始运行。(箭头4)
  4. (内部SRAM)preloader就开始初始化外部RAM。(箭头3、4)
  5. (外部RAM)preloader初始化好之后,preloader将lk(或uboot)加载外部RAM中。(箭头6过程)
  6. 然后跳转到lk(或uboot)中去执行。(箭头6的终点处)
  7. lk(或uboot)紧接着就加载bootimage(包括kernel和ramdisk)到外部RAM中。(箭头7、8)
  8. 然后去执行kernel部分。(箭头9、10)

第一步的时候为什么是加载到内部的SRAM中,而不是外部RAM中呢?

是因为这个时候外部RAM还没有被初始化好。

内部的SRAM和外部RAM都是计算机系统中的两种不同类型的随机访问存储器(RAM)。

1、内部SRAM:内部SRAM(Static Random Access Memory)是集成在CPU芯片内部的一种高速缓存,因为其离处理器更近,所以访问速度非常快,通常用于存储程序指令、数据等需要快速读写的内容。内部SRAM还可以被用于存放寄存器文件,提供给CPU进行运算。

2、外部RAM:外部RAM(Dynamic Random Access Memory)则是位于主板上的一种存储器,通常用于存放大量的数据,如操作系统、应用程序、游戏等。由于距离CPU较远,访问速度相对较慢,但是容量较大,价格相对便宜。

总的来说,内部SRAM是用于提高CPU运算速度的高速缓存,而外部RAM则是用于存储大量数据的低速存储。

启动过程如图所示:

1

2、下载流程

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

1

3、代码组织

preloader主要有三处代码:

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

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

原文链接:https://zhuanlan.zhihu.com/p/420457846

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七qi_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值