嵌入式系统的BootLoader
- 格式:doc
- 大小:92.50 KB
- 文档页数:11
嵌入式系统中Bootloader 的设计与实现马学文1,朱名日1,2,程小辉1 (1. 桂林工学院电子与计算机系,桂林541004;2.中南大学信息物理工程学院,长沙410083)—97—作者所承研的项目中硬件平台是基于ARM7TDMIRISC 内核的三星公司S3C4510B 微处理器,采用的嵌入式Linux 系统为uCLinux。
系统有64MB SDRAM, 其地址从0x 0800.0000 ~0x0bff.ffff, 还有32MB Flash, 其地址从0x0c00.0000~0x0dff.ffff。
32MB Flash 具体规划如下:从0x0c00.0000 开始的第1 个1MB 放Bootloader,从0x0c10.0000开始的2MB放Linux kernel, 从0x0c30.0000开始的余下部分都给rootdisk。
64MB SDRAM 启动后的具体程序分布示意图如图2 所示。
图2 64MB SDRAM 的程序分布示意图Bootloader 一般有几个文件组成。
先是START.s,也是唯一的一个汇编程序,其余的都是C 语言写成的,START.s主要用来初始化堆栈:_start:ldr r1,=StackInit /* r1 是参数字符串的地址*/ldr sp,[r1]int main().equ StackInitValue,_end_data+0x1000/* 在连结脚本中指定4K __end_data*/StackInit:.long StackInitValue.global JumpToKernelJumpToKernel: /*拷贝内核的代码*/mov pc, r0 /*获得Kernel 地址*/.global JumpToKernel0x /*用来扩展内核*/JumpToKernel0x: /*拷贝获得的扩展内核*/mov r8, r0mov r0, r1mov r1, r2mov r2, r3mov r3, r4mov pc, r8.section“.data.boot”.section“.bss.boot”其中main 函数的C 语言实现过程如下:int main(){U32 *pSource, *pDestin, count;U8 countDown, bootOption;U32 delayCount;U32 fileSize, i;char c;char *pCmdLine;char *pMem;init(); /*初始化Flash 控制器和CPU 时钟*/EUARTinit(); /*串口初始化*/EUARTputString("\n\n Linux Bootloader\n"); /*打印信息*/ EUARTputString((U8 *)cmdLine); /*command_line 支持, 用于定制内核*/EUARTputString("\n\n");用command_line 可以给内核传一些参数,自己定制内核的行为。
文章标题:深入探讨STC8 Bootloader 例程1.引言在嵌入式系统设计和开发中,Bootloader 例程扮演着至关重要的角色。
STC8系列单片机作为一种常用的嵌入式芯片,其Bootloader 例程更是备受关注。
本文将深入探讨STC8 Bootloader 例程,从概念到实践,带您全面了解这一重要的技术。
2. 什么是Bootloader 例程Bootloader 例程,简称Bootloader,是一种在嵌入式系统中用于引导程序和初始化硬件的特殊程序。
在STC8单片机中,Bootloader 例程具有独特的设计和功能,可以实现固件更新、自主程序下载等重要功能。
考虑到STC8单片机在各类应用中广泛应用,Bootloader 例程的设计与应用显得尤为重要。
3. STC8 Bootloader 例程的特点STC8 Bootloader 例程具有以下几个突出的特点:- 稳定可靠:STC8 Bootloader 例程经过严格测试和验证,具有良好的稳定性和可靠性,可以满足各类应用的需求。
- 高度定制:STC8 Bootloader 例程支持用户自定义设置,可以根据具体应用的需求进行灵活配置,满足不同场景的需求。
- 易于集成:STC8 Bootloader 例程提供了完善的API接口和文档说明,方便用户在实际项目中快速集成和应用。
- 安全性保障:STC8 Bootloader 例程采用了多重安全机制,保障固件更新和程序下载的安全性,有效防止恶意攻击和非法篡改。
4. 深入探讨STC8 Bootloader 例程的实现在实际项目中,如何针对STC8 Bootloader 例程进行实现和优化是一个关键问题。
首先需要考虑Bootloader例程的整体架构和设计思路,具体包括Bootloader程序的存储器分配、引导流程设计、固件更新机制等方面。
其次需要考虑如何与应用程序进行有效的通信和数据传输,确保Bootloader 例程与用户程序的无缝衔接。
嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。
这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。
2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。
Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。
3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。
内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。
4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。
在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。
5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。
init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。
6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。
这些服务和应用程序通常运行在用户空间,提供各种功能和服务。
以上是嵌入式Linux系统的基本启动流程,不同的嵌入式系统可能会有一些差异。
同时,一些特定的系统也可以添加其他的启动流程步骤,如初始化设备树、加载设备固件文件等。
式操作系统的镜像,包括使用外设端口如以太网、USB、串口、并口从开发计算机上下载,也可以从本地存储设备如FLASH、CF卡、DOC或硬盘读取镜像并且跳转执行。
在开发调试Windows CE系统的过程中,最常见的方法是通过以太网口从开发计算机下载操作系统镜像到目标设备,这种类型的BootLoader有一个专门的名字叫做Eboot,E就是Ethernet的首字母。
DeviceEmulator的BootLoader就是一个典型的Eboot。
除Eboot外,比较常见的还有使用串口端口、以Serial的首字母命名的Sboot,以及专用于PC原理机型的BiosLoader等。
1.2微软建议Windows CE的BootLoader所应实现的功能微软建议Windwos CE的Bootloader所应实现的功能主要有以下6项。
(1)Windows CE的BootLoader应该存放在嵌入式设备的非可易失的存储设备中,比如Flash存储器。
此外如果硬件支持的话,最好还应该对BootLoader所在的Flash存储块实行加锁(locking)以保护它在运行过程中不被破坏。
(2)BootLoader应该在加载Windows CE操作系统镜像的过程中对加载进度、状态及错误消息等信息进行提示输出,这一般通过一个目标嵌入式设备与开发PC的串口端口连接来实现。
(3)用户在开发Windows CE的BootLoader时,应该尽可能地利用微软所提供的支持库里的功能函数。
这样做不仅可以减小开发的工作量,也是为了保证所开发的BootLoader的软件质量。
(4)Windows CE的BootLoader不仅应该可以加载操作系统的镜像,也应该有能力加载BootLoader自身的镜像文件。
不仅是下载到嵌入式系统的RAM内存,还应该能够将操作系统的或者BootLoader自身的镜像写入系统的非可易失存储器中。
③2④(5)Windows CE的BootLoader应该有能力对所加载的镜像(操作系统的或者BootLoader 自身的)的数据执行校验,并且开发者要注意在校验完全通过之前不得将镜像的任何数据写入系统的非可易失存储器中。
设计与应用计算机测量与控制.2009.17(2) Computer Measurement &Control ・389・中华测控网收稿日期:2008-07-03; 修回日期:2008-08-13。
基金项目:陕西省自然科学基金(2007F29);陕西省科技攻关项目(2007K04-01)。
作者简介:袁 磊(1983-),男,湖南衡阳人,硕士生,主要从事嵌入式系统方向的研究。
朱怡安(1960-),安徽人,教授,博导,主要从事嵌入式计算,移动计算方向的研究。
文章编号:1671-4598(2009)02-0389-03 中图分类号:TP36812 文献标识码:A嵌入式系统BootLoader 设计与实现袁 磊,朱怡安,兰 婧(西北工业大学计算机学院,陕西西安 710072)摘要:如何根据开发板的硬件资源,设计bootloader (引导加载程序)是嵌入式系统设计的重点与难点;通过分析系统的硬件组成,对bootloader 的功能,特点,结构及其主要任务进行了研究,对比分析了intel pxa250和intel pxa270的主要异同,以加载linux 操作系统内核为例,针对intel pxa270&linux 嵌入式系统开发平台,提出了一种利用uboot 实现bootloader 的软件设计与实现的新方法,从而成功引导加载操作系统内核;该设计具有一定的通用性,可广泛地应用到其他的处理器及其应用系统中;同时,详细阐述了uboot 的执行流程及其移植方法。
关键词:引导加载程序;PXA270;嵌入式系统;U -boot ;嵌入式linuxDesign and Implementation of BootLoader in embedded systemYuan Lei ,Zhu Y ian ,Lan Jing(College of Computer Science ,Northwestern Polytechnical University ,Xi πan 710072,China )Abstract :How to develop Bootloader on t he basis of specific hardware platform is a key point and difficulty of embedded system design.The paper do research on t he function ,character ,architecture and main tasks of bootloader t hrough analysing to t he organizition of system hardware.It compares t he main diferences and similarities between intel pxa250and intel pxa270.Taking loading linux operation system kernal as a example ,it introduces a new met hod on how to design and implement bootloader on t he basis of intel pxa270&linux embedded system platform.So as to sucessfully loading t he operation system kernel.The design has some flexibility and can be used to ot her proces 2sors and applications system easily.At t he same time ,it introduces how t he uboot is executed and how to transplant t he U -boot to PXA270in particular.K ey w ords :boot loader ;PXA270;embedded system ;U -boot ;embedded linux0 引言PXA270是Intel 公司生产的一款基于ARM9内核的32位RISC 芯片。
Bootloader的概念和作用(1)Bootloader的概念和作用Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于 PC 机上的 BIOS。
在完成对系统的初始化任务之后,它会将非易失性存储器(通常是 Flash或 DOC 等)中的Linux 内核拷贝到 RAM 中去,然后跳转到内核的第一条指令处继续执行,从而启动 Linux 内核。
由此可见,bootloader 和 Linux 内核有着密不可分的联系,要想清楚的了解 Linux内核的启动过程,我们必须先得认识 bootloader的执行过程,这样才能对嵌入式系统的整个启过程有清晰的掌握。
(2)Bootloader的执行过程不同的处理器上电或复位后执行的第一条指令地址并不相同,对于 ARM 处理器来说,该地址为 0x00000000。
对于一般的嵌入式系统,通常把 Flash 等非易失性存储器映射到这个地址处,而bootloader就位于该存储器的最前端,所以系统上电或复位后执行的第一段程序便是 bootloader。
而因为存储 bootloader的存储器不同,bootloader的执行过程也并不相同,下面将具体分析。
嵌入式系统中广泛采用的非易失性存储器通常是 Flash,而 Flash 又分为 Nor Flash 和Nand Flash 两种。
它们之间的不同在于: Nor Flash 支持芯片内执行(XIP, eXecute In Place),这样代码可以在Flash上直接执行而不必拷贝到RAM中去执行。
而Nand Flash并不支持XIP,所以要想执行 Nand Flash 上的代码,必须先将其拷贝到 RAM中去,然后跳到 RAM 中去执行。
实际应用中的 bootloader根据所需功能的不同可以设计得很复杂,除完成基本的初始化系统和调用 Linux 内核等基本任务外,还可以执行很多用户输入的命令,比如设置 Linux 启动参数,给Flash 分区等;也可以设计得很简单,只完成最基本的功能。
Bootloader学习笔记一.what is bootloader?Bootloader是一种独立的程序,类似于Application程序,尽管体积小,但具备启动代码、中断、主程序(Boot_main函数)和操作系统(可选)等“全部五脏”。
百度百科的词条解释:Bootloader是在加电后执行的第一段代码,完成CPU及相关硬件的初始化后,将操作系统映像或固化的嵌入式应用程序装载到内存,并跳转到操作系统空间启动运行。
下面是学习bootloader的系统路线:1.了解bootloader的定义:Bootloader是嵌入式系统在启动时执行的第一段代码,它完成硬件初始化,加载操作系统或固件。
2.掌握bootloader的工作原理:当系统开机时,CPU执行的是bootloader的代码,它读取存储设备(如硬盘,U盘,SD卡等)中的操作系统镜像或固件,加载到内存中,并进行跳转。
3.了解常见的bootloader的类型:如U-Boot,Grub等,并了解它们的特点和适用场景。
4.学习bootloader的开发:包括硬件初始化,文件系统的读取,代码的跳转等。
5.掌握bootloader的应用:比如系统升级,系统恢复等。
二.为什么需要bootloader?Bootloader是用于启动操作系统的引导程序,它是计算机启动过程中的第一个执行的程序。
需要Bootloader的原因有以下几点:1.引导操作系统:Bootloader负责读取和加载操作系统,并将控制权转交给操作系统。
2.进行硬件初始化:Bootloader初始化计算机硬件,确保操作系统能够正确识别和使用硬件。
3.提供系统恢复选项:Bootloader可以提供系统恢复选项,例如进入安全模式或恢复到原始配置。
4.实现多操作系统启动:Bootloader可以用于启动多个操作系统,例如通过引导菜单选择启动Windows或Linux操作系统。
因此,Bootloader是计算机启动过程中不可或缺的一部分,它起到了重要的辅助作用。
嵌入式系统Boot Loader 技术内幕(3)在boot loader 程序的设计与实现中,没有什么能够比从串口终端正确地收到打印信息能更令人激动了。
此外,向串口终端打印信息也是一个非常重要而又有效的调试手段。
但是,我们经常会碰到串口终端显示乱码或根本没有显示的问题。
造成这个问题主要有两种原因:(1) boot loader 对串口的初始化设置不正确。
(2) 运行在host 端的终端仿真程序对串口的设置不正确,这包括:波特率、奇偶校验、数据位和停止位等方面的设置。
此外,有时也会碰到这样的问题,那就是:在boot loader 的运行过程中我们可以正确地向串口终端输出信息,但当boot loader 启动内核后却无法看到内核的启动输出信息。
对这一问题的原因可以从以下几个方面来考虑:(1) 首先请确认你的内核在编译时配置了对串口终端的支持,并配置了正确的串口驱动程序。
(2) 你的boot loader 对串口的初始化设置可能会和内核对串口的初始化设置不一致。
此外,对于诸如s3c44b0x 这样的CPU,CPU 时钟频率的设置也会影响串口,因此如果boot loader 和内核对其CPU 时钟频率的设置不一致,也会使串口终端无法正确显示信息。
(3) 最后,还要确认boot loader 所用的内核基地址必须和内核映像在编译时所用的运行基地址一致,尤其是对于uClinux 而言。
假设你的内核映像在编译时用的基地址是0xc0008000,但你的boot loader 却将它加载到0xc0010000处去执行,那么内核映像当然不能正确地执行了。
Boot Loader 的设计与实现是一个非常复杂的过程。
如果不能从串口收到那激动人心的uncompressing linux.................. done, booting the kernel 内核启动信息,恐怕谁也不能说:嗨,我的boot loader 已经成功地转起来了!。
paper @ (投稿专用) 2006年第11期Microcontrollers &Embedded Systems 33 3本课题为华南理工大学教学研究支持项目。
在B o o t l o a d e r 中实现嵌入式系统自动升级3■华南理工大学 邵新颜蔡梅琳 摘 要在嵌入式系统中,对内核或文件系统进行升级,一般是将目标板连接到主机,通过J TA G 口、串口或网口来完成升级过程。
本文讨论一种更为方便的升级方法,即在Bootloader 中通过CF 存储卡升级系统。
嵌入式系统中的Bootloader 通常用于引导操作系统,本文描述了如何通过增强Bootloader 的功能,实现对嵌入式系统的自动升级。
关键词Bootloader嵌入式系统CF 存储卡 自动升级 嵌入式系统由硬件和软件两部分组成,软件部分主要包括Bootloader 、内核和文件系统。
Bootloader 是硬件系统加电所运行的第1段软件代码,但在嵌入式系统中一般没有像PC 中的BIOS 那样的固件,因此整个系统的加载过程全部是由Bootloader 来完成的。
系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的Bootloader 。
Bootloader 的主要任务包括:初始化最基本的硬件;将Bootloader 本身拷贝到RAM 中运行;将内核拷贝到RAM 中并调用内核等。
通常在嵌入式系统中,首先通过J T A G 接口将Boot 2loader 烧写到目标板的Flash 中,然后在Bootloader 中,将内核映像文件和文件系统映像文件通过串口和网络下载并烧写到Flash 中。
若需对内核或文件系统升级,则按照上述方法重新烧写新的映像文件,直接覆盖原来的映像文件。
上述方法中,一方面必须将目标板和主机通过串口线和网线相连接,另一方面通过串口或网络下载映像文件,速度很慢。
本实验通过扩充Bootloader 功能,实现了通过CF 存储卡对内核或文件系统映像文件的自动升级,对需要经常为内核或文件系统升级的嵌入式系统来说,克服了传统升级方法的局限,简化了升级方法,提高了升级速度。
bootloader详细介绍Bootloader对于计算机系统来说,从开机上电到操作系统启动需要⼀个引导过程。
嵌⼊式Linux系统同样离不开引导程序,这个引导程序就叫作Bootloader。
6.1.1 Bootloader介绍Bootloader是在操作系统运⾏之前执⾏的⼀段⼩程序。
通过这段⼩程序,我们可以初始化硬件设备、建⽴内存空间的映射表,从⽽建⽴适当的系统软硬件环境,为最终调⽤操作系统内核做好准备。
对于嵌⼊式系统,Bootloader是基于特定硬件平台来实现的。
因此,⼏乎不可能为所有的嵌⼊式系统建⽴⼀个通⽤的Bootloader,不同的处理器架构都有不同的Bootloader。
Bootloader不但依赖于CPU的体系结构,⽽且依赖于嵌⼊式系统板级设备的配置。
对于2块不同的嵌⼊式板⽽⾔,即使它们使⽤同⼀种处理器,要想让运⾏在⼀块板⼦上的Bootloader程序也能运⾏在另⼀块板⼦上,⼀般也都需要修改Bootloader 的源程序。
反过来,⼤部分Bootloader仍然具有很多共性,某些Bootloader也能够⽀持多种体系结构的嵌⼊式系统。
例如,U-Boot就同时⽀持PowerPC、ARM、MIPS和X86等体系结构,⽀持的板⼦有上百种。
通常,它们都能够⾃动从存储介质上启动,都能够引导操作系统启动,并且⼤部分都可以⽀持串⼝和以太⽹接⼝。
本章将对各种Bootloader总结分类,分析它们的共同特点。
以U-Boot为例,详细讨论Bootloader的设计与实现。
6.1.2 Bootloader的启动Linux系统是通过Bootloader引导启动的。
⼀上电,就要执⾏Bootloader来初始化系统。
可以通过第4章的Linux启动过程框图回顾⼀下。
系统加电或复位后,所有CPU都会从某个地址开始执⾏,这是由处理器设计决定的。
⽐如,X86的复位向量在⾼地址端,ARM处理器在复位时从地址0x00000000取第⼀条指令。
嵌入式系统的BootLoader3.1 BootLoader概述一个嵌入式Linux系统从软件的角度看通常分为4个层次:引导加载程序、Linux内核、文件系统、用户应用程序。
引导加载程序是系统加电后运行的第一段代码。
大家熟悉的PC中的引导程序一般由BIOS和位于MBR的操作系统BootLoader(例如LILO或者GRUB)一起组成。
然而在嵌入式系统中通常没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。
在嵌入式Linux中,引导加载程序即等效为BootLoader。
简单地说,BootLoader就是在操作系统内核运行前执行的一段小程序。
通过这段小程序,我们可以初始化必要的硬件设备,创建内核需要的一些信息并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核,真正起到引导和加载内核的作用。
BootLoader是依赖于硬件实现的,特别是在嵌入式系统中。
不同体系结构需求的BootLoader是不同的,除了体系结构,BootLoader还依赖于具体的嵌入式板级设备的配置。
也就是说,对于两块不同的嵌入式板而言,即使它们基于相同的CPU构建,运行在其中一块电路板上的BootLoader,未必能够运行在另一块电路开发板上。
Bootloader的启动过程可以是单阶段的,也可以是多阶段的。
大多数单阶段的BootLoader应用于简单的系统,比如没有操作系统的系统。
通常多阶段的Bo otLoader能提供更为复杂的功能以及更好的可移植性。
从固态存储设备上启动的BootLoader大多数是两阶段的启动过程,也就是启动过程可以分为stage 1和stage 2两部分。
依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。
而stage2则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。
大多数BootLoader都包含两种不同的操作模式:启动加载(Boot loading)模式和下载(Down loading)模式,这种区别仅对于开发人员才有意义。
但从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。
(1)启动加载模式:这种模式也称为自主(Autonomous)模式,即BootLoa der从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程没有用户的介入。
这种模式是BootLoader的正常工作模式。
因此在嵌入式产品发布的时候,BootLoader显然必须工作在这种模式下。
(2)下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机上下载文件,比如下载应用程序、数据文件、内核映像等。
从主机下载的文件通常首先被BootLoader保存到目标机的RAM中然后再被BootLoader写到目标机上的固态存储设备中,BootLoader的这种模式通常在系统更新时使用。
工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口,比如U-Boot、Blob、VIVI等。
3.2 常用的嵌入式Linux BootLoader从上一节的内容可以了解到BootLoader是嵌入式系统中非常重要的一部分,也是系统运行工作的必要组成部分。
在嵌入式系统中常见的BootLoader有以下几种。
3.2.1 U-BootU-Boot是德国DENX小组开发的用于多种嵌入式CPU的BootLoader程序,它可以运行在基于PowerPC、ARM、MIPS等多种嵌入式开发板上。
从http://u-boo /或ftp://ftp.denx. de/pub/u-boot/站点都可以下载U-Bo ot的源代码,U-Boot源代码的主要目录解释如下。
● board目标板相关文件,主要包含SDRAM、Flash驱动;● common独立于处理器体系结构的通用代码,如内存大小探测与故障检测;● cpu与处理器相关的文件,如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;● driver通用设备驱动,如CFI Flash驱动(目前对Intel Flash支持较好);● doc U-Boot的说明文档;● examples可在U-Boot下运行的示例程序,如hello_world.c、timer.c;● include U-Boot头文件,尤其是configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;● lib_xxx处理器体系相关的文件,如lib_ppc、lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;● net与网络功能相关的文件目录,如bootp、nfs、tftp;● post上电自检文件目录,尚有待于进一步完善;● rtc RTC(Real Time Clock,实时时钟)驱动程序;● tools用于创建U-Boot S-RECORD和BIN镜像文件的工具。
3.2.2 VIVIVIVI是由韩国MIZI公司开发的专门用于ARM产品线的一种BootLoader。
因为VIVI 目前只支持使用串口和主机通信,所以必须使用一条串口电缆来连接目标板和主机。
VIVI的源代码下载地址为:/developer/s3c 2410x/download/vivi.html,VIVI一般有如下作用。
(1)把内核(kernel)从Flash复制到RAM,然后启动它;(2)初始化硬件;(3)下载程序并写入Flash;(4)检测目标板。
vivi.tar.bz2源代码包解压后的目录结构如下所示:# tree –L 1.|-- COPYING|-- CVS|-- Documentation|-- Makefile|-- Rules.make|-- arch|-- drivers|-- include|-- init|-- lib|-- scripts|-- test`-- util10 directories, 3 files其中VIVI主要目录介绍如下。
● CVS存放CVS工具相关的文件;● Docu mentation 存放一些使用VIVI的帮助文档;● arch存放一些平台相关的代码文件;● drivers存放VIVI相关的驱动代码;● include存放所有VIVI源码的头文件;● init存放VIVI初始化代码;● lib存放VIVI实现的库函数文件;● scripts存放VIVI脚本配置文件;● test存放一些测试代码文件;● util存放一些NAND Flash烧写image相关的工具实现代码。
3.2.3 BlobBlob是Boot Loader Object的缩写,是一款功能强大的BootLoader。
其源码在http://sourceforge. net/projects/blob上可以获取。
Blob最初是由Ja n-Derk Bakker和Erik Mouw两人为一块名为LART(Linux Advanced Radio Te rminal)的开发板写的,该板使用的处理器是StrongARM SA-1100,现在Blob 已经被成功地移植到许多基于ARM的CPU上。
3.2.4 RedBootRedBoot是一个专门为嵌入式系统定制的引导启动工具,最初由Redhat开发,它是基于eCos(Embedded Configurable Operating System)的硬件抽象层,同时它继承了eCos的高可靠性、简洁性、可配置性和可移植性等特点。
Re dBoot集Bootloader、调试、Flash烧写于一体,支持串口、网络下载,执行嵌入式应用程序。
既可以用在产品的开发阶段(调试功能),也可以用在最终的产品上(Flash更新、网络启动)。
RedBoot支持下载和调试应用程序,开发板可以通过BOOTP/DHCP协议动态配置IP地址,支持跨网段访问。
用户可以通过tft p协议下载应用程序和image,或者通过串口用x-modem/y-modem下载。
RedBoo t支持用GDB(the GNU debugger)通过串口或者网卡调试嵌入式程序,可对gc c编译的程序进行源代码级的调试。
相比于简易jtag调试器,它可靠、高速(C PU的cache打开后,通过网卡tftp下载能达到1Mbps,GDB下载的速度能达到2 Mbps)、稳定,用户可通过串口或网卡,以命令行的形式管理Flash上的image,下载image到Flash。
动态配置RedBoot启动的各种参数、启动脚本,上电后R edBoot可自动从Flash或tftp服务器上下载应用程序执行。
在http://source /redboot站点可以下载RedBoot源码,同时可以了解更多的关于RedB oot的详细信息,它在嵌入式系统应用中非常广泛。
3.2.5 ARMbootARMboot是一个以ARM或StrongARM 为内核CPU的嵌入式系统的BootLoade r固件程序,该软件的主要目标是使新的平台更容易被移植并且尽可能地发挥其强大性能。
它只基于ARM固件,但是它支持多种类型的启动,比如Flash,网络下载通过bootp、dhcp、tftp等。
它也是开源项目,可以从http://www.source /projects/armboot网站获得最新的ARMboot源码和详细资料,它在A RM处理器方面应用非常广泛。
3.2.6 DIYDIY(Do It Yourself),即自己制作。
以上U-Boot、VIVI、Blob、RedBoo t和ARMboot等成熟工具移植起来简单快捷,但同时它们都存在着一定的局限性,首先是因为它们是面向大部分硬件的工具,所以说在功能上要满足大部分硬件的需求,但一般情况下我们只需要与特定的开发板相关的实现代码,其他型号开发板的实现代码对它来说是没有用的,所以通常它们的代码量较大。
其次它们在使用上不够灵活,比如在这些工具上添加自己的特有功能相对比较困难,因为必须熟悉该代码的组织关系,以及了解它的配置编译等文件。
用DIY的方式自己编写针对目标板的BootLoader不但代码量短小,同时灵活性很大,最重要的是将来容易维护。
所以在实际嵌入式产品开发时大都选择DIY的方式编写BootLoader。
3.3 基于S3C2410开发板的BootLoader实现本节将以实例讲述基于S3C2410开发板的BootLoader的具体实现,主要分两个方面进行介绍,一是介绍基于U-Boot的移植,二是介绍DIY方式开发Boot Loader。