bootloader-我是bootloader设计师

一、bootloader设计蓝图

1、什么是bootloader

如果说系统内核是航天飞机的话,那么bootloader就是助推器,它带动了内核。在内核启动之前它要做许多硬件的初始化操作,来适合系统的安全启动。

2、bootloader设计方法-模仿

90%的设计从模仿开始,模仿加入自己的想法就是设计。bootloader的模仿我们一般会参照行业老大uboot。

3、uboot简介

uboot可以支持多种嵌入式cpu,例如X86、ARM、MIPS

还可以支持多种嵌入式操作系统,例如wince、linux、vxworks、QNX

uboot分为自主模式和开发模式:自主模式下,uboot的运行不需要人的参与,这往往也是产品模式。

开发模式是供开发人员使用,对uboot进行修改,来适应自己的需要。

4、uboot的查看

我们一般会使用sourceinsight来查看相对比较大的程序,它可以自动定位函数位置。这方便了我们的查找。

二、ARM的启动流程

为什么要关心ARM的启动流程

这是因为软件的设计要遵循硬件的要求。满足硬件的一些要求。

主要从三个方面进行介绍:1、启动方式  2、地址布局  3、启动流程

几点说明:一上电,处理器会从0地址开始读取指令并执行。  Nandflash不参与统一编址。

2440:

1、启动方式:Norflash   Nandflash

2、内存地址从00x30000000开始

3、启动流程(来自手册):s3c2440A boot code can be executed on an external NAND flash memory. In order to support nand flash bootloader, the s3c2440A is equipped with an internal SRAM buffer called "steppingstone". When booting, the first 4 KBytes of the NAND flash memory will be loaded into steppingstone and the boot code loaded into stippingstone will be executed.

Generally, the boot code will copy NAND flash content to SDRAM. the main program will be executed on the SDRAM.

6410: 

1、启动方式:SROM、OneNAND、MODEM、IROM(NAND、SD)

2、bootloader的起始地址0x0C000000, 之前的为internal ROM。0地址处为映像区。DRAM起始地址为0x50000000.

3、a、iROM supports initial boot up : initialize system clock, D-TCM, device specific controller and booting device.

b、iROM boot codes can load 4KB of bootloader tostepping stone. The8 KBbootloader is called BL1.

c、BL1:BL1 can initialize system clock, UART, and SDRAM for user. After initializing, BL1 will load remaining boot loader which is calledBL2on theSDRAM

d、Finally, jump to start address of BL2. That will make good environment to use system.

210:

1、启动方式:同6410

2、地址布局:0地址处为Boot area,内存地址从0x20000000开始。

3、启动流程:a、iROM can do initial boot up : initialize system clock, device specific controller and booting device.

b、b、iROM boot codes can load boot-loader to SRAM. The boot-loader is called BL1. then iROM verify integrity of BL1 in case of secure boot mode.

c、BL1 will be executed: BL1 will load remained boot loader which is called BL2 on the SRAM then BL1 verify integrity of BL2 in case of secure boot mode.

d、BL2 will be executed: BL2 initialize DRAM controller then load OS data to SDRAM

e、finally, jump to start address of OS. that will make good environment to use system.

三、Uboot 工作流程分析

1、程序入口

2、第一阶段程序分析

3、第二阶段程序分析

也就是上面谈到的BL1和BL2,这两部分也是要我们自己来编写的部分。BL0厂家已固化在硬件中,就不需要我们自己编写了。

2440

1、查看两个文件

1、uboot下的Makefile

  2、uboot/board/samsung/smdk2440/uboot.lds下查看代码段首文件,ENTRY标明程序入口(链接器脚本),start.S(cup/s3c24XX/start.o(.text))。

2、BL1分析(入口start.S 中 _start)

使用source Insight

分析/cpu/s3c24XX/start.S

提示:start.S中设置堆栈为c语言做铺垫。

1、设置中断向量表

2、设置处理器为SVC模式

3、刷新I/D cache

4、关闭mmu和cache

5、初始化系统时钟

6、初始化串口

7、简单初始化nand flash

8、进行内存初始化

9、复制nand flash中的bl到内存

10、设置堆栈

11、清除bss段

3、BL2分析(入口start_armboot)

1、初始化串口

2、LCD初始化

3、初始化网卡

4、初始化LED

5、执行用户输入命令(死循环,一直等待用户的使用)

6410同2440几乎有同样的工作,不过执行的先后顺序和方式不同。而210是新版本的U-boot,它的BL1、BL2分别产生了两个.bin文件。它有厂家固化的irom,BL1被复制到iram中,BL2被复制到内存中。    

三、Bootloader架构设计

在进行设计之前,我们遵循的原则:尽量归类整理,分阶段去完成。还就是要尽早的使用c语言这样编程比较简单些。下面是思维导图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值