【Bootloader&uBoot】

Bootloader代码是嵌入式系统复位后进入操作系统前执行的一段代码。通过Bootloader的代码初始化初始化处理器的各寄存器以及其他外部设备,建立存储器映射图以及初始化堆栈,为操作系统提供基本的运行环境。

Uboot是最常见且通用的一种Bootloader。

  1. Uboot总体工作流程

U-boot的启动分成stage-1和stage-2两个阶段。

Stage-1阶段使用汇编语言编写,占用空间小且执行速度快。通常与CPU体系密切相关,如处理器初始化和设备初始化代码等,该阶段的代码在start.S里面实现。Stage-1阶段的启动过程如下图所示:

Stage-2阶段一般包括初始化Flash器件、检测系统内存映射、初始化网络设备、进入命令循环,接收用户从串口发送的命令然后进行相应的处理。Stage-2阶段使用C语言编写,用于加载操作系统内核,该阶段主要是board.c里面的start_armboot()函数实现。下图给出了U-boot的Stage-1和Stage-2阶段在Flash和RAM中的分配。从图中可以看出,Uboot在加载到内存后,使用了操作系统空余的内存空间。

  1. Uboot启动流程分析

U-boot支持许多的处理器和开发板,主要是该软件有良好的架构,以ARM处理器的smdk2410开发板为例分析U-boot的启动流程,在其他处理器架构上,U-boot也执行类似的启动流程。下图为U-boot在ARM处理器上的启动步骤。

上图列出了U-Boot在ARM处理器启动过程中的几个关键点,从图中可以看出U-boot的启动代码分布在start.S、low_level_init.S、board.c和main.c文件中。

  1. start.S是U-boot整个程序的入口,该文件使用汇编语言编写,不同体系结构的代码是不同的;
  2. low_level_init.S是特定开发板的设置代码;
  3. board.c包含开发板底层设备驱动;
  4. main.c是一个与平台无关的代码,U-boot应用程序的入口在此文件中。
  1. Uboot移植
    • 、不管是购买的开发板还是自己做的开发板,基本都是参考半导体厂商的 dmeo 板,而半导体厂商会在他们自己的开发板上移植好 uboot、linux kernel 和 rootfs 等,最终制作好 BSP包提供给用户。我们可以在官方提供的 BSP 包的基础上添加我们的板子,也就是俗称的移植。
    • 我们购买的开发板或者自己做的板子一般都不会原封不动的照抄半导体厂商的 demo板,都会根据实际的情况来做修改,既然有修改就必然涉及到 uboot 下驱动的移植。
    • 一般 uboot 中需要解决串口、NAND、EMMC 或 SD 卡、网络和 LCD 驱动,因为 uboot的主要目的就是启动 Linux 内核,所以不需要考虑太多的外设驱动。
    • 在 uboot 中添加自己的板子信息,根据自己板子的实际情况来修改 uboot 中的驱动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值