当前位置:
文档之家› 第10章 Bootloader 设计基础
第10章 Bootloader 设计基础
10.2.1 vivi
vivi的第一阶段主要完成了依赖于CPU的体系结 构硬件初始化,包括禁止中断、初始化串口、 复制第二阶段到RAM中等。由于这些代码是和 硬件紧密相关的,因此要求读者在阅读时对照 S3C2410处理器的数据手册,查阅相关的寄存器 的描述,以便更好地理解。这些汇编代码全部 就集中在vivi\arch\s3c2410目录下的head.S这一 个汇编文件中,当然还有相关的头文件。
10.2.1 vivi
第三步:进行内存映射初始化和内存管 理单元(MMU)的初始化工作 第四步:初始化堆,然后内存会发生变 化。在这里,实际上就是实现动态内存 分配策略。
10.2.1 vivi
第五步:初始化mtd设备 第六步:配置参数,主要是init_priv_data 函数。 第七步:提供vivi人机接口的各种命令。 第八步:进入Bootloader的两种模式之一.
10.2.2 U-boot
U-boot文件结构 文件结构 U-boot代码采用了一种高度模块化的编程方式,与移植 树有关的有以下几个目录. board:这个目录存放了所有U-boot支持的目标板的子 目录,如board/smdk2410/*就是我们说关心的.要将Uboot移植到自己的s3c2410x目标板上,必须参考这个目 录下的内容,比如对比Flash以及Flash宽度和大小的定制 邓就要修改其中的flash.c。 common: 独立于处理器体系结构的通用代码,如内 存大小探测与故障检测; cpu:与处理器相关的文件。如mpc8xx子 目录下含串口、网口、LCD驱动及中断初始化等文件;
10.1.1 Bootloader 的作用
初始化CPU速度; 初始化内存,包括启用内存库,初始化内存配置寄存器等; 初始化中断控制器,在系统启动时,关闭中断,关闭看门狗; 初始化串行端口(如果在目标上有的话); 启用指令/数据高速缓存; 设置堆栈指针; 设置参数区域并构造参数结构和标记,即引导参数; 执行POST(上电自检)来标识存在的设备并报告有何问题; 为电源管理提供挂起/恢复支持; 传输操作系统内核镜像文件到目标机。也可以将操作系统内核镜像文件事先存放 在Flash中,这样就不需要Bootloader和主机传输操作系统内核镜像文件,这通常是 在做成产品的情况下使用。而一般在开发过程中,为了调试内核的方便,不将操 作系统内核镜像文件固化在Flash中,这就需要主机和目标机进行文件传输; 跳转到内核的开始,在此又分为ROM启动和RAM启动。所谓ROM启动就是用XIP技 术直接在Flash中执行操作系统镜像文件;所谓RAM启动就是指把内核镜像从Flash 复制到RAM中,然后再将PC指针跳转到RAM中的操作系统启动地址。
10.2.1 vivi
vivi第二阶段的分析 第二阶段的分析 vivi的第二阶段的入口就是init/main.c,按 照源代码的组织流程,根据模块化划分 的原则,共分为8个功能模块即八个步骤, 在源代码的注释中以step非常清晰的给出 了区分。
10.2.1 vivi
第一步:vivi从main()函数开始执行,函 数开始通过 putstr(vivi_bannner)打印出 vivi的版本。 第二步:主要是初始化GPIO,本的思路 和方法就是在把握好整个系统硬件资源 的前提下,根据芯片的数据手册把所有 的初始值设定,在这里利用set_gpios这 个函数就可以完成初始化了。
第10章 Bootloader 设计基础 章
10.1 Bootloader 概述
Bootloader,启动引导程序,又叫引导加载程 序,功能强大的Bootloader也就直接叫做板级 支持包(BSP,Board Support Packet)或者固件 (Firmware)。近年来,为了方便嵌入式产品的 。近年来,为了方便嵌入式产品的 推广,也有些直接将Bootloader叫做BIOS。BIOS 是PC机的“基本输入输出系统”,烧录在电脑 主板上一块专门的芯片中。一般BIOS由主板厂 商或者专门的BIOS生产商提供,不是开源的, 用户不能修改其中的代码进行定制。而嵌入式 系统的开发则离不开Bootloader的开发,它也 是整个系统开发中的难点之一。
1. 2. 3.
4. 5.
初始化本阶段要使用到的硬件设备 检测系统内存映射(memory map) 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中 为内核设置启动参数 调用内核
10.2 S3C2410 平台下 平台下Linux的 的 Bootloader
Vivi U-BOOT
10.1.1 Bootloader 的作用
Bootloader是在嵌入式操作系统内核运行之前运行的一 段小程序,也是系统开机后执行的第一段程序。通过 这段小程序,可以初始化硬件设备、建立内存空间, 从而将系统的软硬件环境设置成一个合适的状态,以 便为最终调用操作系统内核准备好正确的环境。 Bootloader是依赖于底层硬件而实现的,因此建立一个 通用的嵌入式系统Bootloader几乎是不可能的。 在PC机中,主板的BIOS和位于硬盘0磁道上的主引导记 录(Master Boot Record, MBR)中的引导程序(如LILO或 GRUB等),两者一起的作用就相当于Bootloader在嵌入 式系统中的作用,即实现整个系统的启动引导,并最 终能引导操作系统的运行。
10.1.2 Bootloader 的工作模式
启动加载(Boot loading)模式 --正常启动模式 下载(Downloading)模式 --提供给开发人员或者技术支持人员使 用
10.1.3 Bootloader 的启动流程
分为stage1和stage2两个阶段 一般依赖于 CPU 体系结构的代码,比如设 备初始化代码等,都放在stage1中,而且 通常都用汇编语言来实现,以达到短小 精悍且启动快的目的;而 stage2 则通常 用C语言来实现,这样可以实现各种复杂 的功能(比如串口、以太网接口的支持 等)
10.2 S3C2410 平台下 平台下Linux的 的 Bootloader
1. vivi简介 简介 vivi是由韩国mizi公司为ARM处理器系列设计的 一个bootloader。它同样支持启动加载模式和 下载工作模式。 在下载模式下,vivi为用户提供一个命令行人机 接口,通过这个人机接口可以使用vivi提供的一 些命令。如果嵌入式系统没有键盘和显示,那 么可以利用vivi中的串口,将其和宿主机连接起 来,利用宿主机中的制。
10.1.1 Bootloader 的作用
在嵌入式Linux软件系统的开发中,一般将软件分为启动引导程序 (Bootloader)、操作系统内核(OS Kernel)、根文件系统(File System)、 图形窗口系统(GUI)和应用程序(AP)等几个部分,其中前三部分是 一个可运行的嵌入式系统必不可少的, 它们在开发的过程中,被 分别独立地编译链接或打包为一个二进制目标文件,然后下载 (烧录)到嵌入式系统的ROM(一般是Flash)中。后两部分如果 有的话, 通常也是和根文件系统一 起打包后烧录到Flash中。 因此,在Bootloader阶段, 也提供了对Flash设备的分 区格式化的支持,其空间 分配通常如图所示。
10.1.2 Bootloader 的工作模式
对于嵌入式系统的开发人员而言, Bootloader通常包含“启动加载”和 “下载”这两种不同的工作模式。当然, 这两种工作模式的区别一般仅仅对于开 发人员才有意义,而对最终用户来说, Bootloader 的作用就是用来加载操作系 统,从而启动整个嵌入式系统。
Bootloader的第一阶段
1. 硬件设备初始化 2. 为加载 Bootloader 的 stage2 准备 RAM 空 间 3. 拷贝 Bootloader的 stage2 到 RAM 空间中 4. 设置好堆栈 5.跳转到 stage2 的 C 入口点main()函数处
Bootloader的第二阶段
10.2.1 vivi
3. vivi的配置和编译 的配置和编译 vivi的配置和嵌入式Linux内核一样,可以采用 菜单化的形式进行。其步骤主要如下: ① #make distclean。清除一些早先生成的无 用的目标文件。 ② #make menuconfig。然后可以根据菜单中 的信息进行配置。 编译。菜单配置完毕后,保存退出。然后执 行“make”命令开始编译。
10.1.1 Bootloader 的作用
在嵌入式系统中,Bootloader对嵌入式设备中 的主要部件如CPU、SDRAM、FLASH、串口等进 行了初始化,这样可以使用Bootloader通过串 口下载各种文件到设备的SDRAM中或者烧录 Flash,然后将操作系统内核读入到内存中来或 者直接跳转到内核的入口点,从而实现操作系 统的引导。现在有些Bootloader也把对以太网 的支持等功能也加进去了,这样一个功能比较 强大的Bootloader实际上就已经相当于一个微 型的操作系统了。
10.2.1 vivi
vivi常用的命令 Load,Part,bon,Param,Boot,Flash
10.2.1 vivi
vivi文件结构 文件结构 代码包括arch,init,lib,drivers和include等几个 代码包括 , , , 和 等几个 目录, 目录,共200多条文件 多条文件 vivi的配置和编译 的配置和编译 #make distclean。清除一些早先生成的无用 ① 。 的目标文件。 的目标文件。 #make menuconfig。然后可以根据菜单中的 ② 。 信息进行配置。 信息进行配置。 make”命令开始编译 ③ 命令开始编译
10.2.2 U-boot
U-Boot的主要特点有: ① 开放源码; ② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS; ③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS、 XScale; ④ 较高的可靠性和稳定性; ④ 较高的可靠性和稳定性; ⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引 导要求、产品发布等; ⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、 LCD、NVRAM、EEPROM、RTC、键盘等; ⑦ 较为丰富的开发调试文档与强大的网络技术支持;