博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Boatloader简介
阅读量:4211 次
发布时间:2019-05-26

本文共 2280 字,大约阅读时间需要 7 分钟。

     前几天写过关于Firmware的文章,关于自己的论文Bootloader是BSP中的一个重要部分,大家都知道BIOS的功能是引导OS,Bootloader,称为引导加载程序,在嵌入式系统中Bootloader的作用也是引导OS,嵌入式系统中OS的启动过程是(加电启动Bootloader—硬件初始化—软件初始化—加载启动OS),通过Bootloader这段代码可以进行软硬件初始化、简历内存空间的映射图,从而能将系统的软硬环境配置到合适的状态加载OS并且启动OS,Bootloader还提供过了对串口、网络、USB等接口的支持,以方便调试嵌入式软件的开发功能。Bootloader在整个嵌入式系统的软件层次位置如下图。

                                                                  

                                                                                                                   图(1)

     在基于ARM的嵌入式系统中,系统在上电或复位时通常都从0x00000000出开始的,而这个地址处安排的通常就是系统的Bootloader。现在Bootloader越来越支持多种体系结构,现在比较成的有vivi,RedBoot和U-Boot。韩国Mizi公司开发的vivi适用于ARM9处理器,RedBoot是一种广泛用于嵌入式系统的独立开放源代码引导/装载器。

    大多数Bootloader都包含两种不同的加载模式:“启动加载模式”和“下载模式”。启动加载模式也称自主(Autonomous)模式,在这种模式下,Bootloader从目标机的摸个固态存储设备上将操作系统加载到RAM中运行,整个过程中没有用户的介入。启动加载模式是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。:下载模式是指目标机上的Bootloader将通过串口或者网络连接(TFTP)等通信手段从宿主机上下载文件,如操作系统的内核映像和根文件系统的影响等。串口通信最容易实现,即使Bootloader程序在执行时也可以利用串口通信进行I/O操作,于外界交换数据和信息。在宿主机上利用TFTP软件可以通过以太网连接来下载文件。

    大多数Bootloader 都分为stage1和stage2两部分,u-boot 也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C 语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移

植性。

1、Stage1 start.S 代码结构

u-boot 的stage1代码通常放在start.S 文件中,他用汇编语言写成,其主要代码部分如

下:

(1)定义入口。由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。

(2)设置异常向量(ExceptionVector)。

(3)设置CPU 的速度、时钟频率及终端控制寄存器。

(4)初始化内存控制器。

(5)将ROM 中的程序复制到RAM 中。

(6)初始化堆栈。

(7)转到RAM 中执行,该工作可使用指令ldr pc 来完成。

2、Stage2 C 语言代码部分lib_arm/board.c 中的start arm boot 是C 语言开始的函数也是整个启动代码中C 语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数只要完成如下操作:

(1)调用一系列的初始化函数。

(2)初始化Flash 设备。

(3)初始化系统内存分配函数。

(4)如果目标系统拥有NAND 设备,则初始化NAND 设备。

(5)如果目标系统有显示设备,则初始化该类设备。

(6)初始化相关网络设备,填写IP、MAC 地址等。

(7)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。

                                                               

                                                                                           图(2)

U-Boot的源码顶层目录说明

目    录                特    性                解 释 说 明
Board                  平台依赖          存放电路板相关的目录文件,
                                                      例如:RPXlite(Mpc8xx)、Smdk2410(Arm920t)、 Sc520_cdp(X86) 等目录

Cpu                    平台依赖            存放CPU相关的目录文

                                                         例如:Mpc8xx、Ppc4xx、   Arm720t、Arm920t、 Xscale、I386等目录

Lib_ppc                平台依赖          存放对PowerPC体系结构通用的文件,

                                                          主要用于实现PowerPC平台通用的函数
Lib_arm                平台依赖           存放对ARM体系结构通用的文件,
                                                          主要用于实现ARM平台通用的函数
Lib_i386               平台依赖           存放对X86体系结构通用的文件,
                                                         主要用于实现X86平台通用的函数
Include                      通用               头文件和开发板配置文件,
                                                         所有开发板的配置文件都在Configs目录下
Common                   通用               通用的多功能函数实现
Lib_generic              通用               通用库函数的实现
Net                         通用                存放网络的程序
Fs                           通用                存放文件系统的程序
Post                       通用                存放上电自检程序
Drivers                   通用                通用的设备驱动程序,主要有以太网接口的驱动
Disk                       通用                硬盘接口程序
Rtc                         通用                RTC的驱动程序
Dtt                          通用                数字温度测量器或者传感器的驱动
Examples               应用例程             一些独立运行的应用程序的例子,例如Helloworld
Tools                      工具                存放制作S-Record或者U-Boot格式的映像等工具,例如Mkimage
Doc                        文档                开发使用文档

  

转载地址:http://cjkmi.baihongyu.com/

你可能感兴趣的文章
mysql中的 skip-name-resolve 问题
查看>>
删除最后一次的备份文件vbs
查看>>
vbs 实现压缩文件夹为zip文件
查看>>
在VBS中,SET的用法
查看>>
组策略合理限制VBS文件
查看>>
VBS不支持跨盘操作
查看>>
MySQl备份恢复策略(完全+增量备份策略)
查看>>
VBS发送邮件
查看>>
锁的兼容性
查看>>
解决mysqldump备份报错:SET OPTION SQL_QUOTE_SHOW_CREATE=1
查看>>
mysqldump参数详细说明
查看>>
mysqldump备份及结合binlog日志恢复的全过程
查看>>
SQL Server 查找占用CUP内存的SQL
查看>>
ms sql server缓存清除与内存释放
查看>>
怎样使用命令来结束进程
查看>>
三款免费实用的本地文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance)
查看>>
查找库中某个表的字段情况
查看>>
CREATE TABLE A LIKE B
查看>>
bs调用另一个vbs的函数
查看>>
mysql的“Got error 28 from storage engine”错误
查看>>