bootloader学习资料简介
bootloader
引导程序bootloader●在操作系统内核或用户应用程序之前运行的一段小程序;通过这个程序,可以初始化硬件设备、建立内存空间的映射图,从而将目标系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序运行准备好正确的环境●初始化硬件,特别是内存控制器●提供linux内核的启动参数●启动linux内核●存储在targer的ROM或flash中(地址为0),包含第一条可执行指令Run diagnostic programUpdate kernel/dataJump to kernel normal boot 系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。
比如A RM是从地址0x00000000取第一条指令●初始化处理器以及外设的硬件资源配置,CPU片内和片外设备,如SDRAM●初始化I/O芯片,可能有的设备有:串口,报告BOOTLOADER的结果(成功/失败)。
网络或FLASH接口,引导操作系统串口通讯是最简单也是最廉价的一种双机通讯设备,所以在Bootloader中主机和目标机之间常常通过串口建立连接。
Bootloader在执行时会通过串口来进行I/O,比如:输出打印信息到串口,从串口获取用户控制字符等。
当然为了提高效率,也可以网口来建立通讯,这样在Bootloader中就需要启用网口的驱动●执行系统自检,报告检测结果●通过用户命令行提供特定应用程序●使用TFTP协议从网口接收,或者xmodem协议从串口接收操作系统镜像文件到RAM,将文件烧录到FLASH中,重启后负责找到镜像,解压缩到RAM中,并跳转到解压位置处执行,或直接跳转到RAM处执行该镜像●多阶段的Bootloader能提供更为复杂的功能,以便更好的可移植性。
从固态存储设备上(如flash)启动的Bootloader大多都是2阶段的启动过程。
●两种加载模式✓启动加载模式:也称为自主模式(Autonomous),即Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程没有用户的介入—Bootloader的正常工作模式✓下载模式:在这种模式下目标机上的Bootloader将通过串口连接或网络连接等从主机上下载文件,比如:下载应用程序、数据文件、内核映像等。
阐述对BootLoader的理解和分析
阐述对B o o t L o a d e r的理解和分析(总11页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除`物理与电子工程学院《嵌入式系统设计》设计性实验报告题目阐述对BootLoader的理解和分析系别年级专业班级学号学生姓名指导教师实验时间目录课题要求 ..................................................................... 错误!未定义书签。
1.本课题的目的................................................................... 错误!未定义书签。
2.运行环境 ........................................................................... 错误!未定义书签。
正文.............................................................................. 错误!未定义书签。
一.BootLoad简介 ............................................................. 错误!未定义书签。
二.系统设计 ...................................................................... 错误!未定义书签。
三.技术实现问题................................................................. 错误!未定义书签。
四.总结与体会 ..................................................................... 错误!未定义书签。
第三节 Bootloader
第三节BootLoaderUn Re gi st er ed本节目标•深入理解BootLoader 启动过程•掌握uBoot 的定制•了解uBoot 的代码树构成•uBoot 的下载烧写Un Re gi st er edBootloader 定义•Bootloader 是硬件启动的引导程序,是启动操作系统的根本;•是在操作系统内核或用户应用程序运行之前运行的一段小程序。
通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用准备好环境;•在一般典型的系统中,整个系统的加载启动任务就完全由Bootloader 来完成。
Un Re gi st er edBootloader 特点•Bootloader 不属于操作系统内核,采用汇编语言编写,因此针对不同的CPU 体系结构,这一部分代码不具有可移植性;•在移植操作系统时,这部分代码必须加以改写。
•Bootloader 不但依赖于CPU 的体系结构,而且依赖于嵌入式系统板级设备的配置。
Un Re gi st er edBootloader 启动模式•启动加载模式:在这种模式下,Bootloader 从目标机上的某个固态存储设备上将操作系统加载到RAM 中运行,整个过程并没有用户的介入。
•下载模式:在这种模式下,目标机上的Bootloader 将通过串口或网络等通信手段从开发主机(Host )上下载内核映像和根文件系统映像等到RAM 中。
然后可以再被Bootloader 写到目标机上的固态存储媒质中,或者直接进行系统的引导。
Un Re gi st er edBootloader 基本功能•初始化硬件•将操作系统内核从Flash 拷贝到SDRAM 中,如果是压缩格式的内核,还要解压缩•改写系统的内存映射,原先Flash 起始地址映射为0地址,这时需要将RAM 的起始地址映射为0•提供Linux 内核的启动参数•启动Linux 内核•设置堆栈指针并将bss 段清零将来执行C 语言程序和调用子函数时要用到•改变pc 值,使得CPU 开始执行真正的操作系统内核。
BootLoader的理论知识介绍
式操作系统的镜像,包括使用外设端口如以太网、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 自身的)的数据执行校验,并且开发者要注意在校验完全通过之前不得将镜像的任何数据写入系统的非可易失存储器中。
嵌入式系统Bootloader学习笔记
在嵌入式系统学习过程中涉及到了在嵌入式系统学习过程中涉及到了Bootloader,下面讲述了Bootloader的基本作用,在后续的文章中我将对如何编写自己的Bootloader进行介绍。
1. Bootloader的基本概念:简单地说,bootloader就是在操作系统内核运行前运行地一段小程序。
通过这段小程序,可以对硬件设备,如CPU、SDRAM、Flash、串口等进行初始化,也可以下载文件到系统板、对Flash进行擦除和编程,真正起到引导和加载内核镜像的作用,但是随着嵌入式系统的发展,bootloader已经逐渐在基本功能的基础上,进行了扩展,bootloader可以更多地增加对具体系统的板级支持,即增加一些硬件模块功能上的使用支持,以方便开发人员进行开发和调试。
从这个层面上看,功能扩展后bootloader可以虚拟地看成是一个微小的系统级的代码包。
bootloader是依赖于硬件而实现的,特别是在嵌入式系统中。
不同的体系结构需求的bootloader是不同的;除了体系结构,bootloader还依赖于具体的嵌入式板级设备的配置。
也就是说,对于两块不同的嵌入式板而言,即使它们基于相同的CPU构建,运行在其中一块电路板上的bootloader,未必能够运行在另一块电路开发板上。
BootLoader为系统复位或上电后首先运行的代码,一般应写在起始物理地址0x0开始。
Bootloader的启动过程可以是单阶段的,也可以是多阶段的。
通常多阶段的bootloader能提供更为复杂的功能,以及更好的可移植性。
从固态存储设备上启动的bootloader大多数是二阶段的启动过程,也即启动过程可以分为stage 1和stage 2两部分。
2. ARM Bootloader的一般作用对于一个ARM系统来说,本质上,bootloader作为引导与加载内核镜像的“工具”,在实现上,必须提供以下几个功能,更确切地说,必须做到以下几点:(1)初始化RAM(必需):bootloader必须能够初始化RAM,因为将来系统要通过它保存一些Volatile数据,但具体地实现要依赖与具体的CPU以及硬件系统。
bootloader简介
bootloader 简介1.1 Bootloader移植的必要性Bootloader是与系统硬件环境高度相关的初始化软件,它担负着初始化硬件和引导操作系统的双重责任。
一些ARM平台可以共用同一种Bootloader,但是总的说来,每一个特定系统的Bootloader都会有所不同。
Bootloader广泛用于有操作系统的手持终端设备、智能家电及机顶盒等嵌入式设备上,它负责完成硬件初始化、操作系统引导和系统配制等。
Bootloader 移植是在特定硬件平台上操作系统移植至关重要的一步。
1.2 BootLoader所支持的CPU和嵌入式系统板每种不同的CPU体系结构都有不同的BootLoader。
有些BootLoader也支持多种体系结构的CPU,比如U-BOOT就同时支持ARM、MIPS、POWERPC等体系结构。
除了依赖于CPU 的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。
也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,通常也都需要修改BootLoader的源程序。
1.3. Boot Loader的烧录和存储系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。
比如,at91rm9200的CPU在复位时通常都从地址0x00000000取它的第一条指令。
这个地址依据特定的CPU而定。
通常片外启动时,基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(EEPROM或FLASH等,at91rm9200是0x10000000)被映射到这个预先安排的地址上。
因此在系统加电后,CPU将首先执行Boot Loader程序。
bootloader烧写到flash中,对于一个裸板有两种方式:(1)通过片内固化的loader加载bootloader:通常某些CPU内部ROM中固化了一段程序可以用于最初的程序下载,如A T91RM9200。
bootloader学习笔记
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是计算机启动过程中不可或缺的一部分,它起到了重要的辅助作用。
第六章-Bootloader
本地加载模式模式
这种模式也称为“自主” 这种模式也称为“自主”(Autonomous)模 ) 式,即Boot Loader从目标机上的某个固态存储设备 从目标机上的某个固态存储设备 上将操作系统加载到RAM中运行,整个过程并没有 中运行, 上将操作系统加载到 中运行 用户的介入。 用户的介入。 这种模式是Boot Loader的正常工作模式,因此 的正常工作模式, 这种模式是 的正常工作模式 在嵌入式产品发布的时候, 在嵌入式产品发布的时候, Boot Loader必须工作 必须工作 在这种模式下。 在这种模式下。
四、Boot Loader的启动过程 的启动过程
由于 Boot Loader 的实现严重依赖于 CPU 的体系结构, 的体系结构,因此大多数 Boot Loader 的启动都 stage2两大部分 两大部分。 分为 stage1 和 stage2两大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等, 体系结构的代码,比如设备初始化代码等,通常 stage1中 而且通常都用汇编语言来实现, 都放在 stage1中,而且通常都用汇编语言来实现, 以达到短小精悍的目的。 stage2则通常用 则通常用C 以达到短小精悍的目的。而 stage2则通常用C语 言来实现,这样可以实现更复杂的功能, 言来实现,这样可以实现更复杂的功能,而且代 码会具有更好的可读性和可移植性。 码会具有更好的可读性和可移植性。
一个嵌入式 Linux 系统从软件的角度看通常可以分为五 个层次: 个层次:
1. 引导加载程序 代码(可选) 包括固化在固件中的 boot 代码(可选)和Boot Loader 两大部分。 两大部分。 2. Linux 内核 特定于嵌入式板子的定制内核(包括驱动程序)以及内核的启动参数。 特定于嵌入式板子的定制内核(包括驱动程序)以及内核的启动参数。 包括根文件系统和建立于Flash内存设备之上的文件系统, Flash内存设备之上的文件系统 3. 文件系统 包括根文件系统和建立于Flash内存设备之上的文件系统,通 常用RAMDISK做为根文件系统, RAMDISK做为根文件系统 常用RAMDISK做为根文件系统,是提供管理系统的各种配置文件以及系统 执行用户应用程序的良好的运行环境的载体。 执行用户应用程序的良好的运行环境的载体。 驱动程序编写(移植) 4. 驱动程序编写(移植) 5. 用户应用程序 特定于用户的应用程序。 特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会 包括一个嵌入式图形用户界面。 GUI有 QT和 包括一个嵌入式图形用户界面。常用的嵌入式 GUI有:QT和MiniGUI 。
7第五章 bootloader
中国传媒大学 信息工程学院 2010学年秋季 苗方
Bootloader
Bootloader的概念
BootLoader就是在操作系统内核或用户应用程序运行 就是在操作系统内核或用户应用程序运行 之前运行的一段小程序。通过这段小程序, 之前运行的一段小程序。通过这段小程序,我们可以初 始化硬件设备、建立内存空间的映射图, 始化硬件设备、建立内存空间的映射图,从而将系统的 软硬件环境带到一个合适的状态, 软硬件环境带到一个合适的状态,以便为最终调用操作 系统内核或用户应用程序准备好正确的环境。 系统内核或用户应用程序准备好正确的环境。
Bootloader
Bootloader的任务(1)
初始化处理器以及外设的硬件资源配置, 初始化处理器以及外设的硬件资源配置,CPU片内和片 片内和片 外设备,例如正确配置SDRAM控制器 外设备,例如正确配置 控制器 芯片,可能有的设备: 初始化 I/O 芯片,可能有的设备: 串口,报告Bootloader成功 失败 成功/失败 串口,报告 成功 网络或其他接口, 网络或其他接口,准备引导操作系统 执行系统自检, 执行系统自检,报告检测结果 通过用户命令行提供特定应用程序
Bootloader
Bootloader的任务(2)
使用TFTP协议从网口接收 或者 协议从网口接收(或者 使用 协议从网口接收 或者xmodem协议从串口接 协议从串口接 操作系统镜像文件到RAM 收)操作系统镜像文件到 操作系统镜像文件到 将镜像烧写到flash中,重启后负责找到该镜像、解 将镜像烧写到 中 重启后负责找到该镜像、 压到RAM中,并跳转到解压位置处执行 压到 中 直接跳转到RAM处执行该镜像 直接跳转到 处执行该镜像
1、bootloader概述
2、第十三讲bootloader的原理和vivi的移植
有以下几个内容:1、bootloader概述 2、vivi的启动过程分析 3、vivi的配置移植 4、vivi命令详解一个嵌入式Linux系统从软件的角度看通常分为4个层次:1、bootloader 2、Linux内核 3、文件系统 4、用户应用程序 bootloader是系统上电后执行的第一个程序,它用来初始化硬件,引导操作系统,也就是加载Linux内核,让系统跑起来,然后要挂载文件系统,这个用来管理操作系统硬件和应用程序,最后我们要实现特定的应用程序就是用户应用程序,那这些就涵盖了我们后面要讲的所有内容,这个图表示的是Flash设备上的磁盘分区,首先是bootloader,boot Parameters分区是系统的启动参数,它可以存放bootloader向内核kernel传递的命令行参数等等,然后是linux内核kernel、文件系统
1、第五部分嵌入式系统移植之Bootloader
从这一讲开始后面讲的都是和嵌入式操作系统相关的,也都是软件层面的,我们不用关心具体的硬件,因为我们的开发板已经做好了完善的硬件平台,我们现在要做的就是在这个硬件平台上跑操作系统,运行应用程序,所以现在大家要转变一下思想,不能像以前学习单片机那样纯粹的操作硬件,一定要把重点放在嵌入式操作系统和应用程序的开发上,不要以为操作系统对你来说不重要,如果给你台电脑,上面没有操作系统,只有一些硬件程序,那你会用吗,嵌入式也是一样,操作系统是它的核心,嵌入式的操作系统不像在PC机上安装Windows那样简单,是通过一点一点的配置、修改移植过来的,嵌入式移植有三部分,这一部分主要讲解bootloader
4、bootloader的操作模式
大多数bootloader都包含两种不同的操作模式,即启动加载模式和下载模式,二者的区别仅对开发人员才有意义,从最终用户的角度看,bootloader的作用就是加载操作系统,这就像我们使用的uboot一样,在开发板上电时会先运行uboot,那如果在几秒钟内,我在串口终端里按下了空格键,那么就会进入下载模式,我们可以下载内核和文件系统,或做一些其它的事,但这些都是我们开发人员需要做的,那用户需要用的是一个产品,是我们已经开发好的,就不需要用下载的功能,他们只需要系统上电后自动运行操作系统和应用程序,那也就是启动加载模式,通常bootloader对于硬件的依赖性非常强,建立一个通用的bootloader几乎是不可能的,它除了依赖于CPU的体系结构外,还依赖于嵌入式的硬件配置,所以不可能有一个bootloader支持所有的CPU和电路板
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取第⼀条指令。
深入理解BootLoader
4.1数据处理
1
指令
2
4.2分支指令
3 4.3软中断指
令
4 4.4程序状态
寄存器指令
5 4.5协处理器
指令
4.6加载常量 的伪指令
4.7本章小结
5.1寻址模式1—— 数据处理指令的寻址
模式
5.2寻址模式2—— 字或无符号字节的 load/store指令
5.3寻址模式3—— 杂类load/store指 令的寻址方式
读书笔记实在读不下去了,很像是上面复制粘贴下来的,可以当做工具书,但是并不能做到引领读者深入理解。 对初学者来说,可以补充下基础知识。 至少多介绍点其他的bootloader。 真正的干货就三章,作者东拉西扯弄了10章出来,诚意不够,字数来凑[流汗]。 很适合对Linux编程完全不懂的新手,最近在学习清华的操作系统课程,如果你也一样,那这本书挺合适你 用来做lab1的参考。 非常棒,作者很有底蕴!这本书的名字应该是:《从指令、寻址、编译、链接到bootloader》对底层一遍通 讲,非常棒!。 硬生生地把一章的内容扩展到了一本书,真是够勉强的。 全文内容过于浅显,与书名不搭噶。 前边铺垫太多,而且都是老生常谈,最后Bootloader却是一个小话题,用途也不广泛,作为嵌入式开发相关 书籍的一个章节更合适。
2.2.1 GCC的编译流程 2.2.2 GCC的常用编译选项 2.2.3交叉编译器
2.3.1 find命令 2.3.2 grep命令 2.3.3管道与重定向
2.4.1 Make和Makefile 2.4.2 Makefile中的变量 2.4.3自动推导规则 2.4.4嵌的Makefile 2.4.5 Make伪目标 2.4.6自动化变量 2.4.7 Make的内嵌函数
Bootloader过程简介
Bootloader过程简介
应用层 OS层 驱动层
电源管理
Flash
EEPROM
内
SDRAM SRAM
存
看门狗及复 位电路
应用程序 文件系统/图形用户应用程序接口
实时操作系统(RTOS) 设备驱动程序、HAL、BSP
SOC/SOPC
GPIO IIS USB LCD
ADC/DAC
back
Bootloader过程简介
3.3 Bootloader操作模式
大多数Bootloader都
有两种不同的操作模式:
loader
“启动加载”模式和“下
载”模式。其区别对于开
发人员才有意义。
从最终用户的角度看, Bootloader的作用就是用 flash 来加载操作系统,而并不 bits
存在所谓的启动加载模式
Bootloader过程简介
2、下载(Downloading)模式 下载方式:在这种模式下,目标机上的 Bootloader将通过串口连接或网络连接等通信手段 从主机下载文件。 下载内容及存储:主要是下载内核映像和根文件 系统映像等。从主机下载的文件通常首先被 Bootloader保存到目标机的RAM中,然后再被 Bootloader写到目标机上的FLASH 类固态存储设备 中。
Bootloader过程简介
1、vivi
vivi是韩国Mizi公司开发的Bootloader,适用于
ARM9处理器。
2、RedBoot RedBoot即红帽(Red Hat)嵌入式调试引导程序, 是一种用于嵌入式系统的独立开放源代码引导/装载器。
3、U-Boot U-Boot(Universal Bootloader)由德国DENX小组 开发,是一款目前功能较为强大的开源Bootloader程序,它支 持多种处理器平台,包括ARM、PowerPC、MIPS等。
第七章-BootLoader实例剖析
第七章BootLoader实例剖析7.1 BootLoader概述BootLoader:引导加载程序,就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
BootLoader包括固化在固件(firmware)中的boot 代码(可选)和外部的BootLoader 两大部分。
大多数BootLoader 都包含两种不同的操作模式:"启动加载"模式和"下载"模式,这种区别仅对于开发人员才有意义。
但从最终用户的角度看,Boot Loader 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。
启动加载(Boot loading)模式:这种模式也称为"自主"(Autonomous)模式。
也即Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到RAM 中运行,整个过程并没有用户的介入。
这种模式是Boot Loader 的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader 显然必须工作在这种模式下。
下载(Downloading)模式:在这种模式下,目标机上的BootLoader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。
从主机下载的文件通常首先被BootLoader 保存到目标机的RAM 中,然后再被Boot Loader 写到目标机上的FLASH 类固态存储设备中。
BootLoader 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用BootLoader 的这种工作模式。
工作于这种模式下的Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。
7.2 ARM7教学平台BIOS剖析7.2.1 简介ARM7教学平台BIOS就是FS44B0Xbios--BIOS FOR FS44B0X,是优龙公司专门为FS44B0X开发板提供的。
第5章_Bootloader
Bootloader的启动过程
2.BootLoader的启动过程 从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。 BootLoader的启动过程大多数分为阶段1和阶段2。阶段1主要包含依赖于CPU体系结构 的硬件初始化代码,而且通常都是用汇编语言来实现的,以达到短小精悍的目的。这个 阶段通常包括以下步骤: (1)硬件设备初始化。这是BootLoader开始就执行的操作,其目的是为阶段2的执 行,以及随后内核的执行准备好基本的硬件环境。 (2)为加载BootLoader的阶段2准备RAM空间。为了获得更快的执行速度,通常把 阶段2加载到RAM空间来执行。 (3)拷贝BootLoader阶段2的代码到RAM空间中。 (4)设置好堆栈。 (5)跳转到阶段2的C程序入口点。 BootLoader的阶段2通常用C语言来实现,这样可以实现更复杂的功能,而且代码会 具有更好的可读性和可移植性。通常包括以下步骤: (1)初始化本阶段要使用到的硬件设备。 (2)检测系统内存映射。 (3)将内核映像和根文件系统映像从Flash上读到RAM空间中。 (4)为内核设置启动参数。 (5)调用内核。
常见bootloader介绍
常见bootloader介绍一、BootLoader简介在专用的嵌入式板子运行操作系统已经变得越来越流行。
一个嵌入式系统从软件的角度看通常可以分为三个层次:1、引导加载程序。
包括固化在固件(firmware)中的Booter代码(可选),和Loader两大部分。
2、操作系统。
特定于嵌入式板子的定制内核以及内核的启动参数;以及在内核和应用程序之间可能还会包括一个嵌入式图形用户界面,常用的嵌入式GUI有:MicroWindows和MiniGUI等。
3、用户应用程序。
特定于用户的应用程序。
引导加载程序是系统加电后运行的第一段软件代码,称之为Bootloader。
BootLoader是Booter和Loader的合写:前者意味着要初始化嵌入式系统硬件使之运行起来,至少是部分运行起来,与PC 机中的BIOS作用相似;后者意味着将嵌入式操作系统映像加载到内存中,并跳转过去运行。
如PC机中MBR上的BootLoader(PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。
BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。
BootLoader的主要运行任务就是将内核映象从硬盘上读到RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
)而在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。
比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。
BOOTLOADER开发基础
3. Boot Loader 的安装媒介
系统加电或复位后,所有的处理器通常都从某 个预先安排的地址上取指令。比如,ARM在 复位时从地址0x0取指。 嵌入式系统中通常都有某种类型的固态存储设 备(比如:ROM、EEPROM 或 FLASH 等) 被映射到这个预先安排的地址上。因此在系统 加电后,处理器将首先执行 Boot Loader 程序 Bootloader是最先被系统执行的程序
从主机下载的文件通常首先被 Boot Loader 保存到 目标机的 RAM 中,然后再被 Boot Loader 写到目 标机上的FLASH 类固态存储设备中。
这种模式通常在第一次安装内核与根文件系统 时被使用;此外,以后的系统更新也会使用 Boot Loader 的这种工作模式。 工作于这种模式下的 Boot Loader 通常都会向 它的终端用户提供一个简单的命令行接口。
U-Boot的移植
简单流程见课本144页。
BootLoader的烧写
通过jtag烧写
通过网口烧写
1. 通过JTAG下载烧写
【目标板】
运行 Linux 的 PC【宿主机】
JTAG工具软件 A) 初始化CPU B) 初始化SDRAM C) 初始化FLASH片选 D) 一个简单的SHELL
下载
BootLoader的操作模式
1. 操作模式: 大多数 Boot Loader 都包含两种不同的操作模 式:
启动加载模式 下载模式
最终用户的角度看,Boot Loader 的作用就是 用来加载操作系统,而并不存在所谓的启动加 载模式与下载工作模式的区别
启动加载模式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 等待10秒钟,看用户是否按了键。按键通过串口 读入。如果没有键按下,每过一秒钟输出一个小 数点。
• for(i = 0; i < 10; i++) •{ • serial_write('.'); • retval = SerialInputBlock(commandline, 1, 1); • if(retval > 0) • break; •}
• ldr r0, BLOB_START
• mov pc, r0
第二阶段开始
• 入口程序trampoline.S
• .text
• .globl _trampoline
• _trampoline:
•
……/*全局数据区清0*/
•
ldr r0, stack_end
•
sub sp, r0, #4
• 设置堆栈指针为堆栈段的最后一个地址,也即堆栈向低地 址生长。
• 如果时间结束还没有键按下,则引导操作 系统内核。
• if(retval == 0) •{ • commandline[0] = '\0'; • parse_command("boot"); •}
• 如果有键按下,则进入命令行模式,等待用户输 入命令。每个命令等待输入10分钟。
• for(;;) •{ • DisplayPrompt(NULL);
prefetch_abort
/* 0x0000000C */
data_abort
/* 0x00000010 */
unused
/* 0x00000014 */
fiq
/* 0x0000001C */
irq
/* 0x00000018 */
• BLOB_START:
.word BLOB_ABS_BASE_ADDR
• ldmia r0! ,
*/
{r3-r10} /* r0 = source address
• stmia r1! ,
*/
{r3-r10} /* r1 = target address
• cmp r0 , r2
address*/
/* r2 = source end
• ble copy_loop
• 将BLOB_START中的数据,即Stage 2的第 一条指令加载到程序计数器PC中,跳转到 Stage 2。
•
bl main
•
b _trampoline
•
调用主函数main,当主函数异常返回时,则继续调用。
• 主函数main.c
• int main(void)
•{
• 初始化子系统,包括串口,flash,定时器,命令 模块等。
•
init_subsystems();
• 利用串口打印GNU GPL(General Public License)的一些字符串。如作者,自由软件声明 等。
• numRead = GetCommand ( commandline , MAX_COMMANDLINE_LENGTH , 600 );
• if(numRead > 0) •{ • if((retval = parse_command(commandline)) < 0 ) • ……/*error*/ •} •}
•
SerialOutputString(“…”);
• 获得内存的在地址空间的分布情况;
• 将blob、操作系统内核、根文件系统从 FLASH中下载到内存里,为启动做准备。
• do_reload("blob");/*复制blob*/ • do_reload("kernel");/*复制内核*/
Bootloader
blob 简介
blob 分为两个阶段:
第一阶段:
初始化硬件,将第二阶段的代码复制到内 存中,并跳转到第二阶段的程序入口地址, 这个部分使用汇编语言。
第二阶段:
基本是用C语言编写,主要功能是从FLASH 存储器中引导操作系统或重新下载操作系 统内核和根文件到FLASH存储器中。
blob第一阶段
• adr r0, _start 0x00000000 */
/*_start =
• add r2, r0, #(64 * 1024) KB*/
/* size 64
• add r0, r0, #0x400
• ldr r1, BLOB_START
将第二阶段的代码复制到内存中 :
• copy_loop:
• 关闭Watch Dog 定时器。
• 设置SYSCFG寄存器。关闭Cache , blob运 行时不需要Cache。
• 设置I/O端口,以使能控制外设。 S3C44B0X 有71个多功能的I/O引脚,分为 A、B、C、D、E、F、G 7个I/O端口。这7 个端口的设置,包括控制寄存器,数据寄 存器和上拉电阻寄存器的设置,以开发板 的电路接线图为依据。
• 入口程序 start.S :
• .text
• .globl _start
• _start:
b
•
b
•
b
•
b
•
b
•
b
•
b
•
b
reset
/* 0x00000000 */
undefined_instruction /* 0x00000004 */
software_interrupt /* 0x00000008 */
OVER!
• 设置外部中断的请求方式。 • 屏蔽所有中断。 • 设置CPU的时钟频率。 • Fpllo = [( m * Fin)/( p * 2^s )]。 • 设置I/O端口,串口等的时钟输入为系统主
时钟。
• 设置LOCKTIME寄存器。
• 初始化存储控制器。
• 将第二阶段的代码复制到内存中。
• relocate: