嵌入式linux烧写(一)—BootLoader的裁剪和编译
2015-02-04 09:48
253 查看
一、BootLoader的概念
BootLoader是系统加电启运行的第一段软件代码.回忆一下PC的体系结构我们可以知道,PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的引导程序一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的引导程序读到系统的RAM中,然后将控制权交给引导程序。引导程序的主要运行任务就是将内核映象从硬盘上读到RAM中 然后跳转到内核的入口点去运行,也即开始启动操作系统。
而在嵌入式系统中,通常并没有像BIOS那样的固件程序(有的嵌入式系统也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成.比如在一个基于 ARM7TDMI core的嵌入式系统中,系统在上电或复位时都从地址 0x00000000开始执行.而在这个地址处安排的通常就是系统的BootLoader程序。
简单地说BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。对于一个嵌入式系统来说,可能有的包括操作系统,有的小型系统也可以只包括应用程序,但是在这之前都需要BootLoader为它准备一个正确的环境。通常,BootLoader是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的BootLoader是很困难的。
二、Boot Loader的操作模式
大多数BootLoader都包含两种不同的操作模式。“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。
启动加载(Boot loading)模式:这种模式也称为“自主”(Autonomous)模式,也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。因此在嵌入式产品发布的时候,BootLoader显然必须工作在这种模式下.
下载(Down loading)模式:在这种模式下 目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等.从主机下载的文件通常首先被BootLoader保存到目标机的RAM中然后再被BootLoader写到目标机上的固态存储设备中。BootLoader的这种模式通常在系统更新时使用。工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。
三、BootLoader的工作
总体上Bootloader需要完成以下工作。
n 初始化CPU速度;
n 初始化内存,包括启用内存库,初始化内存配置寄存器等;
n 初始化中断控制器,在系统启动时,关闭中断,关闭看门狗;
n 初始化串行端口(如果在目标上有的话);
n 启用指令/数据高速缓存;
n 设置堆栈指针;
n 设置参数区域并构造参数结构和标记(这是重要的一步,因为内核在标识根设备、页面大小、内存大小以及更多内容时要使用引导参数);
n 执行POST(加电自检)来标识存在的设备并报告有何问题;
n 为电源管理提供挂起/恢复支持;
n 传输操作系统内核镜像文件到目标机。也可以将操作系统内核镜像文件事先存放在Flash中,这样就不需要BootLoader和主机传输操作系统内核镜像文件,这通常是在做成产品的情况下使用。而一般在开发过程中,为了调试内核的方便,不将操作系统内核镜像文件固化在Flash中,这就需要主机和目标机进行文件传输;
n 跳转到内核的开始,在此又分为ROM启动和RAM启动。所谓ROM启动就是用XIP技术直接在Flash中执行操作系统镜像文件;所谓RAM启动就是指把内核镜像从Flash复制到RAM中,然后再将PC指针跳转到RAM中的操作系统启动地址。
四、VIVI的剪裁
http://blog.chinaunix.net/uid-9532036-id-2403549.html
Bootloader有很多种,如vivi,uboot,redboot,lilo等等。vivi 是韩国mizi公司专门为三星s3c2410芯片设计的Bootloader。下面我们以它为例讲述一下Bootloader的裁剪和烧写.
首先是上网下载vivi,我的版本是v0.1.4。http://blogimg.chinaunix.net/blog/upfile/071017080947.rar
第一步:解压后进入vivi目录,在终端下输入make distclean命令,清除已生成的目标文件的影像文件;
第二步:输入make menuconfig命令,启动vivi配置GUI程序,如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/05/bce15890a7db7065a01beba6f4d64bfc.png)
第三步:根据自己需要修改选项,*号表示选中,如图中使vivi支持UART1(串口2).修改后关闭配置页面.
第四步:输入make命令,在当前目录下会生成vivi映像文件;
生成的映像文件我们先保存着,以后会用到.
BootLoader是系统加电启运行的第一段软件代码.回忆一下PC的体系结构我们可以知道,PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的引导程序一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的引导程序读到系统的RAM中,然后将控制权交给引导程序。引导程序的主要运行任务就是将内核映象从硬盘上读到RAM中 然后跳转到内核的入口点去运行,也即开始启动操作系统。
而在嵌入式系统中,通常并没有像BIOS那样的固件程序(有的嵌入式系统也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成.比如在一个基于 ARM7TDMI core的嵌入式系统中,系统在上电或复位时都从地址 0x00000000开始执行.而在这个地址处安排的通常就是系统的BootLoader程序。
简单地说BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。对于一个嵌入式系统来说,可能有的包括操作系统,有的小型系统也可以只包括应用程序,但是在这之前都需要BootLoader为它准备一个正确的环境。通常,BootLoader是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的BootLoader是很困难的。
二、Boot Loader的操作模式
大多数BootLoader都包含两种不同的操作模式。“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。
启动加载(Boot loading)模式:这种模式也称为“自主”(Autonomous)模式,也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。因此在嵌入式产品发布的时候,BootLoader显然必须工作在这种模式下.
下载(Down loading)模式:在这种模式下 目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等.从主机下载的文件通常首先被BootLoader保存到目标机的RAM中然后再被BootLoader写到目标机上的固态存储设备中。BootLoader的这种模式通常在系统更新时使用。工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。
三、BootLoader的工作
总体上Bootloader需要完成以下工作。
n 初始化CPU速度;
n 初始化内存,包括启用内存库,初始化内存配置寄存器等;
n 初始化中断控制器,在系统启动时,关闭中断,关闭看门狗;
n 初始化串行端口(如果在目标上有的话);
n 启用指令/数据高速缓存;
n 设置堆栈指针;
n 设置参数区域并构造参数结构和标记(这是重要的一步,因为内核在标识根设备、页面大小、内存大小以及更多内容时要使用引导参数);
n 执行POST(加电自检)来标识存在的设备并报告有何问题;
n 为电源管理提供挂起/恢复支持;
n 传输操作系统内核镜像文件到目标机。也可以将操作系统内核镜像文件事先存放在Flash中,这样就不需要BootLoader和主机传输操作系统内核镜像文件,这通常是在做成产品的情况下使用。而一般在开发过程中,为了调试内核的方便,不将操作系统内核镜像文件固化在Flash中,这就需要主机和目标机进行文件传输;
n 跳转到内核的开始,在此又分为ROM启动和RAM启动。所谓ROM启动就是用XIP技术直接在Flash中执行操作系统镜像文件;所谓RAM启动就是指把内核镜像从Flash复制到RAM中,然后再将PC指针跳转到RAM中的操作系统启动地址。
四、VIVI的剪裁
http://blog.chinaunix.net/uid-9532036-id-2403549.html
Bootloader有很多种,如vivi,uboot,redboot,lilo等等。vivi 是韩国mizi公司专门为三星s3c2410芯片设计的Bootloader。下面我们以它为例讲述一下Bootloader的裁剪和烧写.
首先是上网下载vivi,我的版本是v0.1.4。http://blogimg.chinaunix.net/blog/upfile/071017080947.rar
第一步:解压后进入vivi目录,在终端下输入make distclean命令,清除已生成的目标文件的影像文件;
第二步:输入make menuconfig命令,启动vivi配置GUI程序,如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/05/bce15890a7db7065a01beba6f4d64bfc.png)
第三步:根据自己需要修改选项,*号表示选中,如图中使vivi支持UART1(串口2).修改后关闭配置页面.
第四步:输入make命令,在当前目录下会生成vivi映像文件;
生成的映像文件我们先保存着,以后会用到.
相关文章推荐
- 嵌入式Linux内核配置、裁剪与编译浅析(ARM版)
- 【嵌入式】bootloader,linux,filesystem的烧写
- linux下编译和烧写bootloader/vivi以及kernel的操作步骤
- 【嵌入式】bootloader,linux,filesystem的烧写
- 嵌入式Linux编译系统的设计——Bootloader, 内核,驱动,文件系统,升级镜像等自动化编译打包
- 嵌入式ARM+Linux学习记录(4)-烧写bootloader
- 【嵌入式】bootloader,linux,filesystem的烧写
- 基于ARM的嵌入式linux 内核的裁剪与移植
- 【嵌入式Linux学习七步曲之第三篇 Linux系统bootlaoder移植】U-BOOT全线移植分析系列之一--BOOTLOADER介绍
- 学会做嵌入式Linux操作系统——交叉编译SNMP
- ARM的嵌入式Linux移植体验之BootLoader
- 嵌入式linux系统裁剪
- 嵌入式linux系统裁剪
- 第二课 创建嵌入式Linux开发环境之交叉编译环境
- 关于嵌入式linux下的驱动程序编译问题
- 嵌入式linux启动信息注释之bootloader
- 嵌入式Linux Bootloader在MIPS64上的移植 (转载)
- 嵌入式linux使用交叉编译器编译ACE
- ARM的嵌入式Linux移植体验之BootLoader
- sqlite嵌入式数据库在arm-linux下的编译全攻略