位置:51电子网 » 技术资料 » 嵌入式系统

Boot-loader原理

发布时间:2009/1/4 0:00:00 访问次数:741

  在linux内核移植到arm处理器时,有一个问题不能忽视,那就是移植boot-loader,linux内核启动部分的代码需要判断从boot-loader传递过来的寄存器值。

  为什么需要boot-loader呢?这与硬件本身的启动方式有关,有了boot-loader可以方便系统的开发。通过这段boot-loader小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

  (1)boot-loader所支持的cpu和嵌入式板

  每种不同的cpu体系结构都有不同的boot-loader,有些boot-loader也支持多种体系结构的cpu,如u-boot。除了依赖于cpu的体系结构外,boot-loader实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种cpu而构建的,要想让运行在一块板子上的boot-loader程序也能运行在另一块板子上,通常也都需要修改boot-loader的源程序。

  (2)boot-loader的安装媒介

  系统加电或复位后,所有的cpu通常都从某个预先安排的地址上取指令。比如,基于arm内核的cpu在复位时通常都从地址ox00000000取它的第一条指令。而基于cpu构建的嵌入式系统通常都有某种类型的固态存储设备(比如:rom、eeprom或hash等)被映射到这个预先安排的地址上。因此在系统加电后,cpu将首先执行boot-loader程序。如图所示就是一个同时装有boot-loader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。

  图 固态存储设备的典型空间分配结构

  (3)用来控制boot-loader的设备或机制

  主机和目标机之间一般通过串口建立连接,boot-loader软件在执行时通常会通过串口来进行i/o,比如:输出打印信息到串口,从串口读取用户控制字符等。

  (4)boot-loader的启动过程是单阶段还是多阶段

  通常多阶段的boot-loader能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的boot-loader大多都是2阶段的启动过程,即启动过程可以分为stage 1和stage2两部分。

  (5)boot-loader的操作模式

  大多数boot-loader都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这两种区别不是很大。从最终用户的角度看,boot-loader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。

  启动加载模式:这种模式也称为“自主”模式。即boot-loader从目标机上的某个固态存储设备上将操作系统加载到sdram中运行,整个过程并没有用户的介入。这种模式是boot-loader的正常工作模式,因此在嵌入式产品发布时,boot-loader必须工作在这种模式下。

  下载模式:在这种模式下,目标机上的boot-loader将通过串口连接或网络连接等通信手段从主机(host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被boot-loader保存到目标板的sdram中,然后再被boot-loader写到目标板上的hash类固态存储设备中。boot-loader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用boot-loader的这种工作模式。工作于这种模式下的boot-loader通常都会向它的终端用户提供一个简单的命令行接口。

  (6)boot-loader与主机之间进行文件传输所用的通信设备及协议

  最常见的情况就是,目标机上的boot-loader通过串口与主机之间进行文件传输,传输协议通常是xmodem / ymodem / zmodem协议中的一种。但是,串口传输的速度是有限的,因此通过以太网连接并借助tftp协议来下载文件是个更好的选择。此外,主机方所用的软件也要考虑。比如,在通过以太网连接和tftp协议来下载文件时,主机方必须有一个软件用来提供tftp服务。

  (7)boot-loader的主要任务与典型结构框架

  首先做一个假定:假定内核映像与根文件系统映像都被加载到sdram中运行。因为,在嵌入式系统中内核映像与根文件系统映像也可以直接在rom或∏ash这样的固态存储设备中直接运行,但这种做法无疑是以运行速度的牺牲为代价的。从操作系统的角度看,boot-loader的总目标就是正确地调用内核来执行。

  另外,由于boot-loader依赖于cpu的体系结构,因此大多数boot-loader都分为stage 1和stage 2两大部分。依赖于cpu体系结构的代码,比如设各初始化代码等,通常都放在stage1中,而且通常都用arm汇编语言来实现,以达到短小精悍的目的。而stage 2则通常用c语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。

  boot-loader的stage 1和stage 2通常包括如表所示的5个步骤(以执行的先后顺序列出)。

  在linux内核移植到arm处理器时,有一个问题不能忽视,那就是移植boot-loader,linux内核启动部分的代码需要判断从boot-loader传递过来的寄存器值。

  为什么需要boot-loader呢?这与硬件本身的启动方式有关,有了boot-loader可以方便系统的开发。通过这段boot-loader小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

  (1)boot-loader所支持的cpu和嵌入式板

  每种不同的cpu体系结构都有不同的boot-loader,有些boot-loader也支持多种体系结构的cpu,如u-boot。除了依赖于cpu的体系结构外,boot-loader实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种cpu而构建的,要想让运行在一块板子上的boot-loader程序也能运行在另一块板子上,通常也都需要修改boot-loader的源程序。

  (2)boot-loader的安装媒介

  系统加电或复位后,所有的cpu通常都从某个预先安排的地址上取指令。比如,基于arm内核的cpu在复位时通常都从地址ox00000000取它的第一条指令。而基于cpu构建的嵌入式系统通常都有某种类型的固态存储设备(比如:rom、eeprom或hash等)被映射到这个预先安排的地址上。因此在系统加电后,cpu将首先执行boot-loader程序。如图所示就是一个同时装有boot-loader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。

  图 固态存储设备的典型空间分配结构

  (3)用来控制boot-loader的设备或机制

  主机和目标机之间一般通过串口建立连接,boot-loader软件在执行时通常会通过串口来进行i/o,比如:输出打印信息到串口,从串口读取用户控制字符等。

  (4)boot-loader的启动过程是单阶段还是多阶段

  通常多阶段的boot-loader能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的boot-loader大多都是2阶段的启动过程,即启动过程可以分为stage 1和stage2两部分。

  (5)boot-loader的操作模式

  大多数boot-loader都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这两种区别不是很大。从最终用户的角度看,boot-loader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。

  启动加载模式:这种模式也称为“自主”模式。即boot-loader从目标机上的某个固态存储设备上将操作系统加载到sdram中运行,整个过程并没有用户的介入。这种模式是boot-loader的正常工作模式,因此在嵌入式产品发布时,boot-loader必须工作在这种模式下。

  下载模式:在这种模式下,目标机上的boot-loader将通过串口连接或网络连接等通信手段从主机(host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被boot-loader保存到目标板的sdram中,然后再被boot-loader写到目标板上的hash类固态存储设备中。boot-loader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用boot-loader的这种工作模式。工作于这种模式下的boot-loader通常都会向它的终端用户提供一个简单的命令行接口。

  (6)boot-loader与主机之间进行文件传输所用的通信设备及协议

  最常见的情况就是,目标机上的boot-loader通过串口与主机之间进行文件传输,传输协议通常是xmodem / ymodem / zmodem协议中的一种。但是,串口传输的速度是有限的,因此通过以太网连接并借助tftp协议来下载文件是个更好的选择。此外,主机方所用的软件也要考虑。比如,在通过以太网连接和tftp协议来下载文件时,主机方必须有一个软件用来提供tftp服务。

  (7)boot-loader的主要任务与典型结构框架

  首先做一个假定:假定内核映像与根文件系统映像都被加载到sdram中运行。因为,在嵌入式系统中内核映像与根文件系统映像也可以直接在rom或∏ash这样的固态存储设备中直接运行,但这种做法无疑是以运行速度的牺牲为代价的。从操作系统的角度看,boot-loader的总目标就是正确地调用内核来执行。

  另外,由于boot-loader依赖于cpu的体系结构,因此大多数boot-loader都分为stage 1和stage 2两大部分。依赖于cpu体系结构的代码,比如设各初始化代码等,通常都放在stage1中,而且通常都用arm汇编语言来实现,以达到短小精悍的目的。而stage 2则通常用c语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。

  boot-loader的stage 1和stage 2通常包括如表所示的5个步骤(以执行的先后顺序列出)。

相关IC型号
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!