BootLoader引导程序
- 格式:doc
- 大小:434.00 KB
- 文档页数:10
各类BOOTLOADER的介绍BOOTLOADER是硬件启动的引导程序,是启动OS的全然要进行烧录BOOTLOADER时要从主板的JTAGG口进行烧录,运算机端要用JTAG调试器和应该安装JTAG的驱动程序!在运算机端安装JTAG的驱动方式是:1、将JTAG头接到运算机的并口上2、NBOOT_DEBUG要紧通过网络EBOOT启动的引导第一要将NBOOT_DEBUG通过JTAG烧录到NANDFLASH 的第0块。
具体方式是:1、将JTAG调试器与运算机的并口连接,另外一端与主板的JTAG调试口相连接,这时打开电源。
2、运行NBOOT_DEBUG的目录中的文件3、如图,执行第0项,以后会显现:4、如图,再次执行第0项,以后屏幕会显现:5、现在要选择往FLASH中的什么位置写入文件,目前NBOOT_DEBUG要烧录到FLASH的第0块。
6、这时输入“0”现在在运算机屏幕上会显现EPPPPPPPPP的进度条,当进度条终止时请把电源断电。
7、以后要进行下一步工作,因为每一个BOOTLOADER要与不同的程序相配合,全数烧录完成以后才能够正常启动。
注:每一次烧录一个文件以后最好都从头断电后再次上电以后能够进行下一步工作。
这时要将EBOOT通过JTAG烧录到NANDFLASH 的第2块,这是能够进行WINCE的网络下载测试程序,用来测试PLATFROM BUILDER编辑出来的WINCE是不是能够正常利用。
程序是不是能够利用。
具体方式是:1、将JTAG调试器与运算机的并口连接,另外一端与主板的JTAG调试口相连接,这时打开电源。
2、运行EBOOOT的目录中的文件3、如图,执行第0项,以后会显现:4、如图,再次执行第0项,以后屏幕会显现:5、现在要选择往FLASH中的什么位置写入文件,目前EBOOT要烧录到FLASH的第2块。
6、这时输入“2”现在在运算机屏幕上会显现EPPPPPPPPP的进度条,当进度条终止时请把电源断电。
二级bootloader和一级bootloader是嵌入式系统启动过程中的重要组成部分,它们在系统启动阶段发挥着至关重要的作用。
本文将从二级bootloader和一级bootloader的概念、功能、工作原理以及在嵌入式系统中的应用等方面进行详细介绍,以帮助读者更加深入地了解这两个重要的概念。
一、二级bootloader和一级bootloader的概念1. 一级bootloader一级bootloader是嵌入式系统启动过程中的第一阶段引导程序,它通常存储在芯片的内部ROM或Flash存储器中,负责完成硬件初始化和加载二级bootloader或操作系统内核。
一级bootloader通常由芯片厂商提供,用于初始化系统硬件并加载二级引导程序。
一级bootloader的位置固定,只在系统上电时执行一次。
2. 二级bootloader二级bootloader是一级bootloader加载并执行的第二阶段引导程序,它通常存储在外部Flash存储器或SD卡等存储介质中,负责完成系统初始化、设备驱动加载和加载操作系统内核等工作。
二级bootloader 通常由开发人员进行开发和定制,可以根据具体的硬件评台和应用需求进行灵活定制。
二、二级bootloader和一级bootloader的功能1. 一级bootloader的功能一级bootloader主要负责对系统硬件进行初始化和加载二级bootloader或操作系统内核。
它在系统启动时执行,完成一些基本的硬件初始化工作,如初始化内存控制器、串口、时钟等,并加载二级bootloader或操作系统内核到内存中。
2. 二级bootloader的功能二级bootloader通常负责完成系统的初始化、设备驱动的加载和操作系统内核的加载等工作。
它具有更强的灵活性和扩展性,可以根据具体的硬件评台和应用需求进行定制和扩展。
二级bootloader可以完成对外部存储介质的读取和写入操作,加载操作系统内核并将控制权交给操作系统。
Boot LoaderWindows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统。
在形形色色的嵌入式设备世界里,一款CE系统通常只会针对某一种硬件平台生成。
一般来说,Windows CE的开发过程可以分为:0AL(OEM Abstraction Layer)、驱动、应用程序开发三个步骤。
其中,0AL开发最基本的一步是板级支持包(BSP),而BootLoader 设计则在BSP开发中具有极为关键的地位。
1.什么是BootLoader嵌入式系统的启动代码一般由两部分构成:引导代码和操作系统执行环境的初始化代码。
其中引导代码一般也由两部分构成:第一部分是板级、片级初始化代码,主要功能是通过设置寄存器初始化硬件的工作方式,如设置时钟、中断控制寄存器等,完成内存映射、初始化MMU等。
第二部分是装载程序,将操作系统和应用程序的映像从只读存储器装载或者拷贝到系统的RAM中并执行。
(1)什么是板级BSP?BSP(Board Support Package)是板级支持包,是介于主板硬件和操作系统之间的一层,主要是为了支持操作系统,使之能够更好的运行于硬件主板。
不同的操作系统对应于不同形式的BSP,例如WinCE的BSP和Linux的BSP相对于某CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的。
所以,BSP一定要按照该系统BSP的定义形式来写,这样才能与上层OS保持正确的接口,良好的支持上层OS。
(2)什么是Boot Loader在BSP中有一个重要的组成部分就是BootLoader,它是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好环境。
一般来说,在嵌入式世界里BootLoader 是严重地依赖于硬件的,因此想建立一个通用的 BootLoader 几乎是不可能的。
bootloader通俗解释【实用版】目录1.Bootloader 的通俗解释2.Bootloader 的功能和作用3.Bootloader 的种类和应用正文一、Bootloader 的通俗解释Bootloader,中文俗称“引导程序”,是计算机系统启动时运行的第一个程序。
它可以理解为一个“中介”,负责在操作系统启动前,协调硬件与软件之间的沟通,将操作系统从存储设备加载到内存中,并最终将控制权交给操作系统。
二、Bootloader 的功能和作用1.硬件初始化:Bootloader 负责对计算机硬件进行初始化,包括内存、外设、总线等,为操作系统运行做好准备。
2.加载操作系统:Bootloader 将操作系统从存储设备(如硬盘、U 盘等)中读取到内存中,为操作系统的启动提供支持。
3.设置启动参数:Bootloader 可以根据用户需求,设置不同的启动参数,例如选择不同的操作系统、进入 BIOS 设置等。
4.诊断和自检:Bootloader 可以对计算机硬件进行自检,诊断硬件是否存在问题,并在启动时显示相关信息,方便用户了解系统状态。
三、Bootloader 的种类和应用1.BIOS:BIOS(Basic Input/Output System,基本输入输出系统)是一种最基本的 Bootloader,主要应用于早期的计算机系统。
它主要负责硬件的初始化和操作系统的加载。
2.UEFI:UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)是一种更先进的 Bootloader,主要应用于现代计算机系统。
相较于 BIOS,UEFI 具有更好的兼容性和可扩展性,可以支持更多的硬件设备和操作系统。
3.GRUB:GRUB(GNU GRand Unified Bootloader,GNU 统一引导加载程序)是一种开源的 Bootloader,广泛应用于 Linux 系统。
OpenCore Legacy Patcher是一个针对MacOS系统的引导加载程序(bootloader),它的主要作用是将MacOS安装在x86平台的电脑上,并且可以支持一些较老的硬件设备。
OpenCore Legacy Patcher的原理是通过修改MacOS安装程序的引导加载程序,使其能够识别并引导x86平台上的MacOS系统。
具体来说,它会将MacOS安装程序中的Boot Camp引导程序替换成一个可以识别x86平台的引导程序,然后将MacOS系统文件复制到硬盘上,并将其设置为启动项。
这样,当电脑启动时,就会自动加载这个修改后的引导程序,从而启动MacOS系统。
OpenCore Legacy Patcher的优势在于它可以让较老的硬件设备也能够运行MacOS系统,并且不需要进行太多的硬件配置和软件设置。
不过,由于它是一个第三方的修改版引导程序,使用时需要注意风险和稳定性问题。
U-Boot之一:BootLoader 的概念与功能一般情况下嵌入式Linux 系统中的软件主要分为以下几部分:1) 引导加载程序:其中包括内部ROM 中的固化启动代码和BootLoader 两部分。
内部固化ROM 是厂家在芯片生产时候固化的,作用基本上是引导BootLoader。
有的芯片比较复杂,比如Omap3 在flash 中没有代码的时候有许多启动方式:USB、UART 或以太网等等。
而S3C24x0 则很简单,只有Norboot 和Nandboot。
2) Linux kernel 和drivers。
3) 文件系统。
包括根文件系统和建立于Flash 内存设备之上的文件系统(EXT4、UBI、CRAMFS 等等)。
它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境及载体。
4) 应用程序。
用户自定义的应用程序,存放于文件系统之中。
在Flash 存储器中,他们的分布一般如下:但是以上只是大部分情况下的分布,也有一些可能根文件系统是initramfs,被一起压缩到了内核映像里,或者没有Bootloader 参数区,等等。
1.2 在嵌入式Linux 中BootLoader 的必要性Linux 内核的启动除了内核映像必须在主存的适当位置,CPU 还必须具备一定的条件:但是在CPU 刚上电启动的时候,一般连内存控制器都没有初始化过,根本无法在主存中运行程序,更不可能处在Linux 内核启动环境中。
为了初始化CPU 及其他外设,使得Linux 内核可以在系统主存中运行,并让系统符合Linux 内核启动的必备条件,必须要有一个先于内核运行的程序,他就是所谓的引导加载程序(Boot Loader)。
而BootLoader 并不是Linux 才需要,而是几乎所有运行操作系统的设备都需要。
我们的PC 的BOIS 就是Boot Loader 的一部分(只是前期引导,后面一般还有外存中的各种BootLoader),对于Linux PC 来说,Boot Loader = BIOS + GRUB/LILO。
BootLoader引导程序一、实验目的1.学会配置linux下的minicom和windows下的超级终端2.了解bootloader的基本概念和框架结构3.了解bootloader引导操作系统的过程4.掌握bootloader程序的编译方法5.掌握bootloader程序的使用方法二、实验内容1. 学习x-loader 作用和编译过程2.学习uboot作用和编译过程3.学习bootloader的操作三、实验设备PentiumII以上的PC机, LINUX操作系统四、BOOTLOADER程序说明完整的系统由x-loader、u-boot、kernel(内核)、rootfs(根文件系统)组成,x-loader 是一级引导程序,其作用是初始化CPU,拷贝u-boot到内存,然后把控制权交给u-boot。
当OMAP3530上电时,memory controller(内存控制器)还未初始化,这个任务便由完成的x-loader。
初始化外部RAM控制器,把u-boot读到外部RAM,之后把控制入口交给。
u-boot 是二级引导程序,其作用主要是引导内核,提供映像更新,同用户进行交互。
系统结构图如下:1. BootLoader的作用在嵌入式系统中,BootLoader的作用与PC机上的BIOS类似,其主要作用:(1)初始化硬件设备;(2)建立内存空间的映射图;(3)完成内核的加载,为内核设置启动参数。
通过BootLoader可以完成对系统板上的主要部件如CPU、SDRAM、Flash、串行口等进行初始化,也可以下载文件到系统板上,对Flash进行擦除与编程。
当运行操作系统时,它会在操作系统内核运行之前运行,通过它,可以分配内存空间的映射,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统准备好正确的环境。
通常,BootLoader 是依赖于硬件而实现的,特别是在嵌入式系统中。
因此,在嵌入式系统里建立一个通用的 BootLoader 几乎是不可能的,不同的处理器架构都有不同的BootLoader。
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取第⼀条指令。
Grub参数什么是Grub?Grub(GNU GRand Unified Bootloader)是一个开源的多操作系统引导加载程序。
它是Linux系统中最常用的引导加载程序之一,用于在计算机上启动操作系统。
Grub具有强大的功能和灵活性,可以轻松地管理多个操作系统的启动。
它允许用户选择要启动的操作系统,并提供了各种参数和选项来自定义引导过程。
Grub参数的作用Grub参数是在启动时传递给Grub引导加载程序的配置选项。
通过使用这些参数,用户可以更改引导过程中的各种设置,并影响操作系统的启动方式。
Grub参数可以用于以下目的:1.启动特定内核:通过指定内核映像文件和相应的initrd(initial RAMdisk)文件,可以选择要启动的特定内核版本。
2.修改默认操作系统:通过设置默认项,可以选择在引导时自动选择哪个操作系统启动。
3.设置超时时间:可以设置一个时间段,在该时间段内如果用户未进行任何操作,则自动选择默认操作系统进行启动。
4.修改命令行选项:可以传递额外的命令行选项给内核,以便对其行为进行更精细的控制。
5.加载额外模块:可以加载额外的模块来提供对特定硬件或文件系统的支持。
6.设置图形界面:可以选择使用文本模式还是图形模式进行引导。
常用的Grub参数以下是一些常用的Grub参数及其作用:1.root=:指定根文件系统所在的设备。
例如,root=/dev/sda1表示根文件系统位于第一个硬盘的第一个分区。
2.kernel=:指定内核映像文件的路径。
例如,kernel=/boot/vmlinuz-5.4.0-81-generic指定要启动的内核版本。
3.initrd=:指定initrd文件的路径。
initrd是一个临时文件系统,用于在内核启动之前加载必要的驱动程序和模块。
4.quiet:禁止显示启动过程中的冗长输出信息,使引导过程更加简洁。
5.splash:启用图形界面引导。
需要在Grub配置文件中设置后才能生效。
u-boot 设计文档1. 引言u-boot是bootloader成员中一种应用普遍,功能强大,极具代表意义的引导程序。
在嵌入式开发中起着举足轻重的作用。
U-boot是一段运行于内核之前的代码,为内核的启动初始化硬件环境并提供必需的参数,引导内核运行。
总之,u-boot的基本工作就是能够成功得引导内核运行。
一般情况下u-boot映像,内核和根文件系统映像都存储在Flash上。
也就是说开发板是从Nor Flash启动的。
但考虑到Nor flash容量小,价格高的因素,而Nand Flash 有更高的性价比,增加了从Nand Flash启动的功能。
2. 目标实现初始化开发板硬件环境,为启动内核提供硬件平台参数,引导内核启动的基本功能。
实现Nor/Nand Flash两种启动模式。
3. u-boot启动流程分析为了能够更好的移植u-boot到新的开发板上,有必要掌握u-boot的启动流程。
借助u-boot 启动流程图,简单介绍u-boot的启动过程。
考虑到执行效率和代码的扩展性和灵活性,一般情况把u-boot启动过程分为两个阶段。
第一阶段代码由汇编实现,这是u-boot一开始就执行的操作,其目的是为第二阶段的执行以及随后的kernel 的执行准备好一些基本的硬件环境。
通常包括以下步骤:硬件设备初始化;为加载u-boot第二阶段准备RAM 空间;拷贝u-boot第二阶段代码到RAM空间中;设置好堆栈;跳转到第二阶段的C 入口点。
第二阶段用c语言编写,用以实现复杂的功能。
通常包括以下步骤:初始化本阶段要使用到的硬件设备;检测系统内存映射(memory map);将kernel 映像和根文件系统映像从flash上读到RAM 空间中;为内核设置启动参数;调用内核。
4. u-boot移植U-Boot能够支持多种体系结构的处理器,支持的开发板也越来越多。
因为系统引导程序是完全依赖硬件平台的,所以在新电路板上需要移植U-Boot程序。
1.硬件初始化和系统引导完整的Bootloader引导流程可描述如下:硬件初始化阶段一-> 复制二级Exception Vector Table -> 初始化各种处理器模式-> 复制RO和RW,清零ZI -> (跳转到C代码入口函数) -> 初始化Exception/Interrupt Handler Entry Table -> 初始化Device Drivers -> 硬件初始化阶段二-> 建立人机界面下面对上述各步骤逐一加以说明。
1.1 硬件初始化阶段一板子上电或复位后,程序从位于地址0x0的Reset Exception Vector处开始执行,因此需要在这里放置Bootloader的第一条指令:b ResetHandler,跳转到标号为ResetHandler处进行第一阶段的硬件初始化,主要内容为:关Watchdog Timer,关中断,初始化PLL和时钟,初始化Memory Controller。
比较重要的是PLL的输出频率要算正确,这里把它设置为50MHz;后面在计算SDRAM的Refresh Count和UART的Baud Rate等参数时还要用到。
1.2 复制二级Exception Vector TableException Vector Table是Bootloader与uClinux Kernel发生联系的地方之一(另两处是加载and/or调用Kernel,以及向Kernel传递启动参数)。
ARM7规定Exception Vector T able 的基地址是0x0,所以Flash Memory的基地址也必须是0x0;而S3C44B0X处理器又不支持Memory Remap,这意味着无论运行什么样的上层软件,一旦发生中断,程序就得到Flash Memory中的Exception Vector Table里去打个转(中断Interrupt是异常Exception的一种)。
mbr池工作原理(一)MBR池工作原理什么是MBR池MBR池(Master Boot Record Pool)是计算机操作系统中的一部分,用于存储和管理系统引导程序。
MBR池位于硬盘的第一个扇区,主要用于启动操作系统,并加载操作系统的核心组件。
MBR池的结构MBR池由三个主要组成部分构成:1.引导程序(Bootloader):由计算机硬件启动时加载的代码组成,负责加载操作系统。
它通常位于MBR池的前446个字节。
2.分区表(Partition Table):用于存储硬盘上的分区信息,记录每个分区的起始位置和大小。
分区表位于MBR池的后64个字节。
3.魔数(Magic Number):是MBR池的最后两个字节,用于标识MBR池的有效性。
MBR池的工作过程1.开机启动:计算机开机时,BIOS将加载MBR池的引导程序到内存,并跳转到引导程序的起始位置执行。
2.引导程序加载:引导程序首先会检查MBR池的魔数是否正确,以确保MBR池的有效性。
3.分区选择:引导程序读取分区表,确定要加载的操作系统所在的分区。
4.操作系统加载:引导程序从选择的分区中加载操作系统的核心组件到内存中,然后跳转到操作系统的起始位置执行。
MBR池的优势1.引导速度快:MBR池位于硬盘的第一个扇区,可直接由BIOS加载到内存中执行,启动速度较快。
2.灵活性高:MBR池可容纳各种操作系统引导程序,例如Windows、Linux等,使用户可以根据需要选择和切换操作系统。
MBR池的局限性1.仅支持传统分区:MBR池的分区表只支持传统的主引导分区和扩展分区,无法支持更大容量的磁盘和更多的分区。
2.安全性较低:由于MBR池存储在硬盘的第一个扇区中,容易被病毒或恶意软件攻击,导致系统无法启动。
总结MBR池是计算机操作系统中的重要组成部分,负责存储和管理系统引导程序。
它在计算机启动时起到关键作用,并允许用户选择和切换操作系统。
虽然MBR池在引导速度和灵活性方面具有优势,但其局限性也不可忽视。
计算机引导程序
计算机引导程序,又称为启动程序或引导加载程序(Bootloader),是计算机系统启动过程中的第一个程序。
它通常存放在计算机的主引导扇区(MBR)或EFI系统分区的引导分区中。
计算机引导程序的作用是加载操作系统内核或系统引导加载器(Bootloader Loader),并将控制权转交给它们。
它在计算机系统启动过程中扮演着非常重要的角色。
如果引导程序出现错误或损坏,系统将无法正常启动。
引导程序通常具有以下功能:
1.初始化系统硬件,如处理器、内存、磁盘等。
2.搜索并加载操作系统内核或系统引导加载器到内存中。
3.提供菜单界面,用户可以选择要启动的操作系统或启动参数。
4.处理系统错误和异常情况。
常见的计算机引导程序有GRUB、LILO、Windows Boot Manager等。
其中,GRUB是最流行的引导程序之一,它支持多操作系统的启动,并提供丰富的配置选项。
BootLoader引导程序一、实验目的1.学会配置linux下的minicom和windows下的超级终端2.了解bootloader的基本概念和框架结构3.了解bootloader引导操作系统的过程4.掌握bootloader程序的编译方法5.掌握bootloader程序的使用方法二、实验内容1. 学习x-loader 作用和编译过程2.学习uboot作用和编译过程3.学习bootloader的操作三、实验设备PentiumII以上的PC机, LINUX操作系统四、BOOTLOADER程序说明完整的系统由x-loader、u-boot、kernel(内核)、rootfs(根文件系统)组成,x-loader 是一级引导程序,其作用是初始化CPU,拷贝u-boot到内存,然后把控制权交给u-boot。
当OMAP3530上电时,memory controller(内存控制器)还未初始化,这个任务便由完成的x-loader。
初始化外部RAM控制器,把u-boot读到外部RAM,之后把控制入口交给。
u-boot 是二级引导程序,其作用主要是引导内核,提供映像更新,同用户进行交互。
系统结构图如下:1. BootLoader的作用在嵌入式系统中,BootLoader的作用与PC机上的BIOS类似,其主要作用:(1)初始化硬件设备;(2)建立内存空间的映射图;(3)完成内核的加载,为内核设置启动参数。
通过BootLoader可以完成对系统板上的主要部件如CPU、SDRAM、Flash、串行口等进行初始化,也可以下载文件到系统板上,对Flash进行擦除与编程。
当运行操作系统时,它会在操作系统内核运行之前运行,通过它,可以分配内存空间的映射,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统准备好正确的环境。
通常,BootLoader 是依赖于硬件而实现的,特别是在嵌入式系统中。
因此,在嵌入式系统里建立一个通用的 BootLoader 几乎是不可能的,不同的处理器架构都有不同的BootLoader。
BootLoader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。
对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,一般也都需要修改BootLoader的源程序。
正如前面所述,Boot Loader是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,最后从别处(Flash、以太网、UART)载入内核映像并跳到入口地址。
但是,仍然可以对 BootLoader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。
通常,它们都能够自动从存储介质上启动,都能够引导操作系统,并且大部分都可以支持串口和以太网接口。
因此,正确建立linux的移植的前提条件是具备一个与linux配套、易于使用的Bootloader,它能够正确完成硬件系统的初始化和linux的引导。
为能够实现正确引导linux系统的运行,以及当编译完内核后,快速的下载内核和文件系统,uboot通过网口下载内核和文件系统。
同时,它也具有功能较为完善的命令集,对系统的软硬件资源进行合理的配置与管理。
2. BootLoader程序结构框架嵌入式系统中的bootLoader 的实现完全依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为第一阶段和第二阶段两大部分,依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在阶段1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。
而阶段2 则通常用C语言来实现,这样可以实现一些复杂的功能,而且代码会具有更好的可读性和可移植性。
uboot是功能最多、灵活性最强并且开发最积极的开放源码的bootLoader。
下载得到uboot的源码包,解压就可以得到全部uboot源程序。
在顶层目录下有18个子目录,分别存放和管理不同的源程序。
这些目录中所要存放的文件有一定的规则,可以分为3类。
a)第1类目录与处理器体系结构或者开发板硬件直接相关。
b)第2类目录是一些通用的函数或者驱动程序。
c)第3类目录是uboot的应用程序、工具或者文档。
其各级目录的存放在原则如下表所示:3、bootLoader程序架构分析bootLoader本质上也是一个程序,也需要通过交叉编译工具生成控制性二进制代码。
但是bootLoader和一般C语言程序存在区别。
在Linux操作系统中,一般的c语言可执行程序是依赖于操作系统的。
可执行程序本身的格式一般不是纯粹的二进制代码,而是包含一些头信息的二进制代码(如ELF格式nux 通过文件的头信息运行程序。
一般应用程序中还可能使用C语言基础函数的库,这个库以文件的形式放在linux的文件系统中。
而bootLoader是不依赖操作系统的。
相反,linux内核是由bootloader调用的,从这个角度上看,Linux内核是作为bootloader的一个“应用程序”在执行。
因此,在bootloader中不能依赖于任何环境,包括C语言的函数库。
Bootloader中所有的功能,都需要在其本身的代码中包含。
此外,bootloader编译-链接的结果将是一个目标机的纯二进制代码文件,直接在系统的初始化地址处运行。
由于BootLoader的实现依赖与CPU的体系结构,因此大多数的BootLoader都分为stage1和stage2两个阶段:(1)、BootLoader 的stage1通常主要包括以下步骤:a)硬件设备初始化;b)代码重定位,为加载 Boot Loader 的 stage2 准备 RAM 空间;c)加载bootloaderr 第二阶段代码到RAM空间;d)设置堆栈跳转到第二阶段代码入口。
(2)、BootLoader的stage2通常主要包括以下步骤:a)初始化本阶段要使用到的硬件设备;b)系统内存映射(memory map);c)将kernel映像和根文件系统映像从Flash读到RAM空间中;d)为内核设置启动参数;e)调用内核。
4.omap3530中各个引导程序的特征及作用分析1)、x-loader是一级引导程序,系统上电后由CPU内部ROM自动拷贝内部RAM并执行。
主要作用为初始化CPU,拷贝U-BOOT到内存中,然后把控制权交给U-BOOT(补充x-load源码分析)。
2)、uboot是二级引导程序,主要用于和用户进行交互,提供映像更新,引导内核等功能。
5、bootloader移植1)u-boot烧写Uboot能够支持多种体系结构的处理器,支持的开发板也越来越多。
因此bootloader 完全依赖硬件平台的,所以在新电路板上需要移植uboot程序。
开始移植uboot之前熟悉硬件电路板和处理器。
确认uboot是否已经支持新开发板的处理器和i/o设备。
移植uboot 工作就是添加开发板硬件相关的文件、配置选项,然后配置编译。
开妈移植之前,需要先分析一下uboot已经支持的开发板,比较出硬件配置最接近的开发板。
选择的原则是:首先处理器相同,其次处理器体系结构相同,然后是以太网接口等外接口。
还要验证一下这个参考开发板的uboot,至少能够配置编译通过。
这里我们使用已经编译通过且和实验箱对应的uboot。
u-boot的烧写方法有好几种,这里介绍我们可能会用到的两种方法。
1、从UART3烧写u-boot的方法;2、对已经烧写好了u-boot的目标板进行u-boot更新的方法。
omap35xx大板上用mini-USB端子引出了两个UART接口,其中P9端子对应omap35xx 的UART3,P3端子对应omap35xx的UART1。
说明:Omap35xx可以从UART3启动。
如果需要利用此启动方式把把u-boot下载到目标板,需要使用公司提供的串口线把P9(UART3)和PC机串口连接起来。
UART1一般在调试中使用,调试时使用一根公司提供的串口线连接P3(UART1)和PC机。
烧写步骤:12况来更改)。
3)、打开超级终端,选择端口(和板子的P9端口相连的串口端口号,在这里是com1)操作:设置相应的参数如下,点确定打开:4)、把光盘中,实验目录下的UartBootTool目录拷贝到电脑上,运行应用程序/UartBootTool/Utilities/DownloadUtility.exe如下图在Transport栏选择使用的串口号(和板子的P9端口相连的串口端口号,在这里是com1)在File栏点击open,选择u-boot.bin文件(说明:把事先在虚拟机linux 操作系统中编译好的存放在/home/u-boot-1.3.3/目录下的u-boot.bin文件复制到windouws操作系统的某个位置)。
如下图:点击Download按钮弹出下图所示的确定对话框。
如果提示不能下载是因为存在超级终端上两个按钮的切换。
5)、点击确定按钮,同时板子上电;如果正常,会看到下载进度条在变动。
下载完后回弹出完成对话框。
6)、u-boot.bin下载完后会自动启动。
在刚才打开的超级终端中可以看到u-boot启动后的信息,提示不能显示是因为存在超级终端上两个按钮的切换。
如果是新板子,系统没有配置过,会自动停止在命令行位置(如上图);如果以前烧写过u-boot,由于在FLASH中有配置信息,将会继续启动,需要立即点击键盘使u-boot停下来。
2)添加uboot命令uboot的命令为用户提供了交互功能,并且已经实现了几十个常用命令。
如果需要很特殊的操作,可以添加新的uboot命令。
uboot的每一个命令都是能U_Boot_CMD宏定义的。
这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结构体。
3)uboot的常用命令setenv ipaddr 192.168.3.157 (板子IP,根据实际情况设)setenv serverip 192.168.3.166 (虚拟机的IP,根据实际情况设)setenv netmask 255.255.255.0setenv bootdelay 3setenv ethaddr 00:50:c2:7e:8A:1Dsetenv gatewayip 192.168.3.1 (网关,根据实际情况设)setenv bootargs console=ttyS2,115200n8 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs video=omapfb:mode:8inch_LCDsetenv bootcmd nand read.i 80300000 280000 210000\; bootm 80300000saveenv (保存设置好的参数)Printenv 打印环境变量。