[原创] Helper2416扫盲篇之Bootloader那些事

leijiayou   2014-7-2 23:26 楼主
BootLoader那些事    参与Helper2416开发板助学计划心得 目录: 1、BootLoader的功能及用途 2、BootLoader常用种类 3、BootLoader与启动文件的关系 4、从M3过度到arm9需要转变的理念 5、BootLoader的疑问及解析    前言:   从51到M3,一般下载程序都是IDE直接下载到芯片就可以运行。只知道有个启动文件,做了一些如堆栈,向量表等等的初始化。然后就跳转到main函数执行用户app。 那么像arm9级别的为啥要先加载一个bootloader代码,然后再下载app呢 请看下面一一说明。 1、介绍BootLoarder的功能及用途: Bootloader是在加电后执行嵌入式系统的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。即有如下操作: 第一阶段: 1.初始化基本硬件; 2.把bootloader自动搬运到内存中; 3.设置堆栈指针并将bss段清零。为后续执行代码做准备; 第二阶段: 1.初始化本阶段要用到的硬件; 2.读取环境变量; 3.启动: 也就是如果我们要运行自己写的应用程序之前,要先下载bootloader到flash或者sd卡中(可配置启动方式),然后再下载应用程序到指定的flash地址中,运行时bootloader再到flash指定的地址搬运到内存中,执行app。 那么bootloader的功能类似与PC上上电的BIOS,对硬件非常依赖。运行bootloader后就对相应的硬件初始化,然后才可加载OS镜像,应用程序等等。 所以说bootloader是芯片正确运行代码的第一步。不同的cpu会有不同的bootloader,所以要做相应的移植、改动。 所以我们要在helper2416上运行自己写的代码之前,先要加载一个bootloader,或者做个类似bootloader功能的初始化代码执行,然后才能下载应用程序测试运行。 这一点是与玩51和M3不同的。 51,M3其实也是需要芯片上电做一些初始化的,只不过都在执行启动文件时完成了初始化,所以用户不需去做进一步的boot程序。 2、BootLoader常用种类 Arm9以上级别的bootloader要做到统一很麻烦,所以基本都要通过相应的移植,从而满足需要。 以下是一些常见的bootloader:Redboot、ARMboot、U-Boot、Blob、Bootldr、vivi等等 重点介绍一下U-Boot与vivi。 U-Boot是由开源项目PPCBoot发展起来的,ARMboot并入了PPCBoot,和其他一些arch的Loader合称U-Boot。2002年12月17日第一个版本U-Boot-0.2.0发布,同时PPCBoot和ARMboot停止维护。 U-Boot自发布以后已更新6次,最新版本为U-Boot-1.1.1,U-Boot的支持是持续性的。 U-Boot支持的处理器构架包括PowerPC (MPC5xx,MPC8xx,MPC82xx,MPC7xx,MPC74xx,4xx), ARM (ARM7,ARM9,StrongARM,Xscale),MIPS (4Kc,5Kc),x86等等, U-Boot(Universal Bootloader)从名字就可以看出,它是在GPL下资源代码最完整的一个通用Boot Loader。 U-Boot提供两种操作模式:启动加载(Boot loading)模式和下载(Downloading)模式,并具有大型Boot Loader的全部功能。 vivi是韩国mizi 公司开发的bootloader, 适用于ARM9处理器。Vivi有两种工作模式:启动加载模式和下载模式。启动加载模式可以在一段时间后(这个时间可更改)自行启动linux内核,这是vivi的默认模式。在下载模式下,vivi为用户提供一个命令行接口,通过接口可以使用vivi提供的一些命令 启动加载模式,如加载OS镜像 这就是加载模式 下载模式,如下载应用程序等 就是下载模式 个人理解,加载模式就直接用flash等设备加载运行,下载模式就是通过串口,jlink等方式下载固件到flash等设备 (个人理解,如有错请指出。) 3、BootLoader与启动文件的关系 通过上述应该都比较了解bootloader的功能了,那么启动文件是什么作用呢。 在使用M3的时候,建立MDK工程都会随之有一个start.S的文件,这个就是启动文件。 启动文件主要干的事情就是初始化堆栈,向量表,中断等等 那么在2416中有了启动文件,为啥还要有bootloader呢 因为启动文件做的初始化只是初始化一些基本的东西,如堆栈,向量表 然而2416要加载镜像,应用程序,这就需要启动的时候初始化更多的硬件功能。 所以说bootloader与启动文件的关系是,bootloader是依附与启动文件,且在此基础上进一步初始化系统相关硬件,从而达到可以加载,下载程序等等。 4、从M3过度到arm9需要转变的理念 通过上面的描述,可以了解到在helper2416上要点亮一个灯,是需要如下步骤:第一,下载bootloader 或者有相关初始化启动文件 第二,下载应用程序(分配好地址) 与我们开发M3相比多了一步,即下载bootloader,然后由bootloader加载应用程序。 可以知道M3过渡到裸奔或者rtos上来,是比较容易的 相当于用rtos在一个高级的单片机上跑 暂时不用去管linux相关的各种工具,开发环境,一开始去搞这个很容易搞混。 5、BootLoader的疑问及解析 到这里,基本了解了在helper2416上跑个程序的流程了 当然对于芯片什么都没有的时候,把uboot下载到flash或者SD卡,芯片启动怎么就能读取flash或者sd卡里面的uboot代码呢?? 经过相关咨询,原来是在芯片启动的固化代码中,会有flash或者sd卡驱动,去支持加载uboot。 Uboot加载执行,后面的一切都好理解了 但是还有个疑问,nandflash和sd卡 驱动都是比较复杂的时序,固化代码那么小,居然功能这么强大,比较好奇。。。。 期待进一步了解或者高手解答。 上述理解,纯属个人,如有错误,请谅解。 论坛ID:leijiayou    发表时间:2014-07-02    本帖最后由 leijiayou 于 2014-7-2 23:34 编辑

回复评论 (2)

占个沙发,顶一下!
点赞  2014-7-2 23:38
板凳
点赞  2014-7-3 09:08
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复