7 bootloader程序设计(2)
第三节 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 开始执行真正的操作系统内核。
基于ARM7&uCLinux的BootLoader设计
韧化 ・ 砰 l{ F 始 子嘞 设 地 虹 网 t碍等 1 络定 I 址、 I
I 脯,n l . . 1 —
●
搬P ln I ~l 戴服 ^动 一 f器 T 务 s 上 H E
。
NLr e
f 月L fⅢ F ^
科技信息
计 算机 与 网络
基 孑 AR &u Ln x的 B o L a e 设计 M7 C iu o to d r
山 东理 工 大学计算机 科 学与技 术学 院 田 同真 曹纯子
[ 摘 要】 本文介绍 了一种 基于嵌入 式微 内核 UC/ —I的 B oL ae 的设 计方法, OS I o todr 利用 UC/ — I OS I 的微 内核及其支持多任 务的特 性 实现 了以 P C机 超 级 终端 作 为 目标机 用 ?g  ̄ , - i通过 NE T在 线 高速 下 载 UCLn x内核 和 文件 系统 , 于 UCLn x内核在 线 下载 与 iu 便 iu 基 于 UC iu Lnx应 用程序 的 调 试 , 实现 了将 内核 与根 文 件 系统 从 Fah中加 载 到 A 且 l s RM 中这 一 Botod r oL ae 引导操 作 系统 的基 本 功能 。 [ 关键词 ]o tod r 嵌入式 系统 操作 系统 u Ln x UC OS I B oL ae C iu / —I
图。
』L
下u N桓 j命接解程 c{{ 载c l 块 令收析序 }' u】 【 =
UOl 口
s L —
冉核 、 — r ’
U
f 蓥 口暖 器 文 秉 件 蛲
fT ^ 服务 加羲 5 瀚 程 f路 l 岸
bootloader压缩算法
一、引言bootloader是计算机系统中用于引导操作系统的程序,它负责将操作系统从存储设备中加载到计算机内存中并执行。
由于存储设备的容量有限,bootloader的体积通常也需要尽可能小,这就需要使用一种高效的压缩算法对bootloader进行压缩,以节省存储空间并提高启动速度。
本文将介绍bootloader压缩算法的原理、常用的压缩算法以及在实际应用中的优缺点。
二、bootloader压缩算法的原理1. bootloader的特点bootloader通常具有体积小、启动速度快的特点,因此对于其压缩算法的要求也较为特殊。
传统的通用压缩算法通常无法满足bootloader 的需求,因此需要专门针对bootloader设计压缩算法。
2. 压缩算法的选择在选择bootloader压缩算法时,需要考虑压缩速度、压缩比、解压速度和适应性等因素。
常用的bootloader压缩算法包括LZMA、LZO、LZ4等。
三、常用的bootloader压缩算法1. LZMALZMA是一种基于LZ77算法的压缩算法,它具有较高的压缩比和较小的解压时间。
但是,由于其压缩速度较慢,适用于对压缩比要求较高的bootloader。
2. LZOLZO是一种快速的压缩算法,它具有较快的压缩速度和解压速度,适用于对启动速度要求较高的bootloader。
3. LZ4LZ4是一种专门为快速解压而设计的压缩算法,它具有优秀的解压速度和适应性,适用于对启动速度和压缩比都有要求的bootloader。
四、bootloader压缩算法的优缺点1. LZMA的优缺点优点:较高的压缩比和较小的解压时间。
缺点:压缩速度较慢,适用于对压缩比要求较高的bootloader。
2. LZO的优缺点优点:较快的压缩速度和解压速度。
缺点:压缩比较低,适用于对启动速度要求较高的bootloader。
3. LZ4的优缺点优点:优秀的解压速度和适应性。
缺点:压缩比较低,适用于对启动速度和压缩比都有要求的bootloader。
Bootloader中MMC驱动程序设计与实现
第30卷 第2期2007年4月电子器件Ch inese Jou r nal Of Elect ro n DevicesVol.30 No.2Ap r.2007Design of MMC Dr iver in B ootloa derS H E N Qi ,Z H A N G Zhe ,H U Chen(AS I C Eng ineeri ng Cent er ,Dep art ment o f Elect roni c En gi neeri ng ,Sout heast Uni vers it y ,Nanj i n g 210096,C hi na)Abstract :Most of bootloader download the OS image to t he target device t hrough Universal Serial Bus (USB),Ethernet and so on in embedded system.But the way is suitable for system debug.I t i s inconvenience in product manufacture ,so a way of t ransfer OS image t hrough MMC card is presented.Based on X Scale platform ,t he OS i m 2age can be downloaded to target device t hrough realiz i ng MMC driver in boot loader.Now t he met hod has been ap 2plied to product s.The result of t he met hod shows t he stabilization and practicabilit y of t his design.C onsumer can use it to updat e system.K ey w or ds :em bedded syst em ;bootloader ;MMC ;Int el PXA255EEACC :1265BBootloader 中M MC 驱动程序设计与实现沈 祺,张 哲,胡 晨(东南大学电子工程系ASIC 工程中心,南京210096)收稿日期622作者简介沈 祺(82),男,硕士研究生,研究方向为电路与系统,j _q @摘 要:嵌入式系统中,多数bootloader 通过USB 、网卡等方式下载系统镜像到目标平台上,但是这些方式更适合开发调试使用,在产品的生产中显得十分不便,故提出使用MMC 卡更新镜像的方法.在基于XSacle 的平台下,通过在bootloader 中实现MMC 驱动程序,系统镜像可以方便地使用MMC 卡下载到目标平台上.目前该方法已经应用到实际产品中,结果表明该方法稳定可靠,可以面向用户升级使用,具有很强的实用性.关键词:嵌入式系统;bootloade r ;MMC ;Intel PXA255中图分类号:TP316.2 文献标识码:A 文章编号:100529490(2007)022******* MMC 卡(Multi MediaCa rd 多媒体存储卡)是的一种多功能便携式存储卡,广泛用于数码相机、手机和一些PDA 产品上.在嵌入式系统中,boot loader [1]是一段单独的程序代码,它存放于目标平台的非易失存储介质中,主要用于启动硬件和下载操作系统镜像到目标板上,并有一定的监控作用.通过bootloader ,开发人员可以快速的下载镜像进行系统调试.一般在系统调试时,主要使用USB 、网卡等手段进行镜像的下载.但是如果在boot loader 中实现了MMC 驱动,下载镜像时,便可以使用MMC 卡下载镜像.在bootloader 中实现MMC 卡下载镜像有两个好处:第一,对开发人员来说,有了多种下载镜像的手段;第二,当产品推向市场时,用户可以方便地使用MM 卡进行系统升级.1 基本原理1.1 MMC 结构MMC 卡可以使用MMC 和SP I 两种通信模式,一般情况默认使用MMC 模式[2],而SP I [3]则是一种可选的通信模式,这种模式是MMC 协议的一个子集,主要设计用于和SP I 通道通信,此模式多见于Motolora 处理器.如果要选择SPI 模式,则需要复位命令时选择,一旦上电之后就不可再更改.在一般系统中,主要采用MMC 模式,故以下介绍都是基于MMC 模式.MMC 卡是通过7个引脚的串行总线进行通信的在MM 模式下,MM 的总线分为电源线、时:2000410:191acob s .C .C C钟线和数据传输线.电源线主要用于提供电源,时钟线用于数据传输的同步,数据线用于数据和命令的双向传输通信.MMC卡的内部结构可以分为三部分:外部接口、内部控制器、闪存模块.外部接口实现与主机的通信.内部控制器实现接口协议、数据检索、数据校验、电源管理等功能[4].闪存模块用于存储数据. MMC的内部结构[5]如图1所示.图1 MMC卡的内部结构1.2 MMC协议在MMC协议中,MMC总线上传输的信息可分为三类:命令、响应和数据.命令是从主机端发送到MMC卡,用于发起一个操作.响应是从MMC卡发送到主机端,用于响应之前发送的命令.数据的传输则是双向的.MMC总线上的数据传输就是由这三类信息组成.根据MMC协议,MMC总线上定义两种命令:基于流的命令和基于块的命令.基于流的命令用于连续不断的数据传输,直到收到停止命令才停止数据传输.基于块的命令用于将数据分成块来传输.这两种传输方式分别如图2、3:图2 基于流的传输方式图3 基于块的传输方式2 硬件连接在硬件上,Intel PXA255[6]处理器本身集成了MM卡控制器,该控制器是基于MM标准设计的,MM的各种功能基本都实现,该控制器有5个引脚,分别为时钟线(MM L K)、数据线(MM2DA T)、命令线(MMCMD)和两个选中信号(MMCCS0和MMCCS1).其中两个选中信号仅在SP I模式使用.因此,我们直接将该控制器和MMC 卡对应信号线相连即可.除此之外,我们还需要一个MMC卡插入拔出的检测信号,因此,在硬件上设计了一个检测信号线,当卡未插入时,该信号线和电源相连,呈现高电平;当卡插入时,此信号线和地相连,则为低电平.所以,在软上只需将这个信号线作为输入,检测这个信号线的电平就可得知MMC卡的插入拨出状态.具体硬件原理图如图4:图4 硬件原理图3 软件设计3.1 整体结构MMC驱动的体系结构[7]如图5所示:图5 MMC驱动的体系结构在整个体系结构中,最上层的是文件系统,文件系统提供了对文件操作的支持,避免直接操作底层硬件.分区驱动用于管理各个分区,因为一个MMC 卡可以有多个分区,并且每个分区可以使用不同的文件系统.块设备驱动用于提供对不同的块设备的支持,向上层提供统一的设备驱动接口,在块设备驱动之下可以扩展各种设备,如CF卡,MMC卡等.最低层则是MMC驱动程序.MMC驱动程序可以看作文件系统和硬件设备之间软件层,所有文件系统的访问最终都要转化为对驱动程序的调用,从而实现对设备的访问.上层通过维护一个块设备结构来实现对驱动的访问.这个结构定义了所有对设备的操作,包括设备的初始化、读写操作以及设备类型等y f_B D I f{BOOL(3_)();296电 子 器 件第30卷C CCC:t pede struct tag lock ev n oinit devu32(3get_sect or_size)();BOOL(3read_sector)(char3buf,u32 sector_i ndex,u32sector_num);BOOL(3writ e_sector)(char3buf,u32 sector_i ndex,u32sector_num);u32sect or_size;u32dev_type;}BlockDevInfo,3P BlockDevInfo;3.2 MMC卡驱动3.2.1 相关数据结构MMC驱动使用一个全局的数据结构来描述要操作的MMC设备和PXA255的MMC控制器:t ypedef st r uct tagPxa MmcCt rl{MmcDev3p dev;volatile MMC_R EGS3pm mcreg;}PxaMmcCt rl,3PPxaMmcCt rl;其中,MMC_R EGS描述了PXA255的MMC 控制器,该数据结构中包括了控制器中各个寄存器地址.MmcDev描述了对MMC卡进行操作的相关信息,包括读写块的大小、传输速率、分配的地址、MMC卡的CSD寄存器和保存的响应数据:t ypedef st r uct tagMmcDev{u16read_block_size;u16wri te_block_size;u32t ran_speed;u32rca;MmcCSDRec csd;u8response[16];}MmcDev,3PMmcDev;3.2.2 MMC卡初始化MMC卡初始化分为两部分:①初始化PXA255的MMC控制器首先,需要检测MMC卡是否插入.在硬件上MMC卡的插槽做了一个开关,当MMC卡未插入时,MMCD EC EC T输出信号为低;当卡插入时, MMCDECEC T输出信号为高.因此,通过此信号线的高低电平可以检测MMC卡是否插入.其次,控制器的初始化则包括将控制器设置为MMC模式,设置默认的时钟速率,根据MMC的协议,最后向MMC卡发送80个时钟初始化MMC卡.②初始化MM卡MM卡的初始化流程[8]如图6所示主机端(即X55的MM控制器)首先发送图6 M MC卡初始化流程CMD0命令,之后MMC卡进入空闲状态.当MMC 卡进入空闲状态后,主机端发送CMD1命令,设置MMC卡的工作电压,MMC卡的电压范围和主机端所设置的电压兼容,则MMC卡返回其能工作电压范围作为响应,并进入准备状态,否则,MMC卡将进入非活动状态,不再响应.然后,主机端发送CMD2命令,读取存储卡的C I D寄存器数据,总线上的一个MMC卡将获取总线并响应主机端进入识别状态.在主机端发送完CMD3后,MMC卡将获得一个地址并从识别模式进入传输模式.此时,MMC 卡处于传输模式的待命状态,不能立即进行数据传输,需要发送CMD7使得MMC卡进入传输模式的传输状态后,MMC卡才能进行数据传输,为了MMC卡读写操作函数的方便,在初始化进入传输模式后,初始化函数再发送CMD7命令使得MMC 卡进入传输状态,这样在下面的读写操作函数能直接进行数据传输了.3.2.3 MMC卡读写操作当MMC卡初始化进入传输状态之后,便可以进行数据传输了.在进行读数据时,发送CMD11命令,在获得响应之后数据便从MMC卡向主机端的控制器开始发送数据,数据以块的形式发送,控制器将收到的数据放入控制器的接收FIFO中,程序从控制器中将数据取出并放入指定的缓冲区即可. MMC卡在传输模式下状态转换如图7:图 M M卡传输模式下状态转换(下转第6页)396第2期沈 祺,张 哲等:Boot loader中MMC驱动程序设计与实现CC: P A2C 7C97(b) 直接函数计算(c) 后仿后结果图4 结果比较图4 结论本文应用Verilog语言基于F P G A设计了一种DAB系统中的可配置O FDM调制符号生成器,数据格式全部采用浮点格式,使该设计系统具有较高的精度,通过改进蝶形单元,减少硬件资源,优化运算单元,提高运算速度.仿真结果表明,该设计系统功能符合要求.参考文献:[1] 佟学俭,罗涛.OFDM移动通信技术原理与应用[M].第一版,北京:人民邮电出版社.2003,6.p.23237.[2] IEEE St andard fo r Bi nary Floati ng Poi nt Arit hmet ic[S].AN2SI/IEEE Std75421985,t he Insti t ute of El ect ro ni c Engineer, Inc.,1985.[3] E TSI EN300401(V1.3.2);Radio Broadcasti ng System s;Dig2it al Audio Broadcasti ng(DAB)to Mo bil e,Port abl e and Fi xed Receivers[S].S ep.2000.[4] 万红星,陈禾,韩月秋.一种高速并行的FFT处理器的VLSI结构设计[J].电子技术应用,2005,(5):45248.[5] 李小进,初见朋,赖宗声.高速基二.FFT处理器的结构设计与FPGA实现[J].电路与系统学报,2005,(5):49253.[6] 程俊,黎福海.浮点FF T的V HDL实现及HDL功能方法的研究[D].2004:31232.[7] 赵忠武,陈禾,韩月秋.基于FPGA的32位浮点FFT处理器的设计[J].电讯技术,2003,(6):73277.[8] 丁玉美,高西全.数字信号处理[M].第二版,西安:西安电子科技大学出版社.2003.(上接第693页)4 总结本文提出了在bootloader中使用MMC进行操作系统镜像下载的方案.其中,主要在bootloader中实现了MMC驱动程序,经过测试,该驱动稳定可靠,并为上层提供可靠的底层支持.目前,该方案已经应用到实际产品中,在实际产品的生产中,普遍使用该方法更新系统镜像,表明该方法快速有效,另一方面,产品推向市场时,用户可以很容易的使用MMC卡实现系统镜像升级.这对相关产品的开发具有一定的参考意义.参考文献:[1] 白浪,张思东.Win CE系统下BootLo ader的开发[J].单片机与嵌入式系统应用,2004(2):24226,42.[2] SanDi sk Corporatio n.SanDi sk M MC and RS2MM C ProductMan ual[S].May2004:1212.[3] 孙方,颜国正,王文兴.基于Mu hi MediaCard的便携式体外数据记录系统[J].测控技术,2004,23(8):26228.[4] 孙方,颜国正,王文兴.Mul ti MediaCard及其与单片机接口[J].单片机与嵌入式系统应用,2004(6):44246.[5] MM CA Technical C o mm i t tee.The M MC Syst em Sum m ary[S].March2003:13.[6] Int el C o rpo rat ion.Int el PXA255Proces s o r Developer’s Manual[S].March2003:1215.[7] 陈向群王雷等编著,Wi ndo ws CE.NE T系统分析及实验教程[M],机械工业出版社,2003,5:85.[8] 宗志刚,张哲,胡晨.嵌入式Linu x中MMC设备功能的实现[J].电子器件,2004,27(4):7372740,747.796第2期宋连国,余宁梅等:一种数字音频广播系统的正交频分复用调制符号生成器的F P G A设计。
arm7boot过程详解
产品名称Product name 密级Confidentiality level 多刃剑共享产品版本Product version1.0Total 11pages 共16页ARM7 Boot过程详解拟制: Prepared by 沐清阳日期:Date2005-05-04审核: Reviewed by 小麦日期:Date2005-05-04审核: Reviewed by 蓝月亮日期:Date2005-05-04批准: Granted by日期:Date2005-05-07SEVENTEACH开发网多刃剑评估开发板硬件接口文档 WWW.51754.com 2005-05-04 共享文档第2页,共11页Page 2 , Total11ARM7 Boot过程详解基于ARM7TDMI内核的芯片里多数硬件模块都是可配置的,需要由软件来设置其需要的工作状态。
因此在用户的应用程序之前,需要由专门的一段代码来完成对系统的初始化。
由于这类代码直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。
一般通用的内容包括:中断向量表初始化存储器系统初始化堆栈初始化有特殊要求的断口,设备初始化用户程序执行环境改变处理器模式呼叫主应用程序一.中断向量表ARM要求中断向量表必须放置在从0地址开始,连续8X4字节的空间内。
每当一个中断发生以后,ARM处理器便强制把PC指针置为向量表中对应中断类型的地址值。
因为每个中断只占据向量表中1个字的存储空间,只能放置一条ARM指令,使程序跳转到存储器的其他地方,再执行中断处理。
中断向量表的程序实现通常如下表示:AREA Boot ,CODE, READONLYENTRYB ResetHandlerB UndefHandlerB SWIHandlerB PreAbortHandlerB DataAbortHandlerBB IRQHandlerB FIQHandler其中关键字ENTRY是指定编译器保留这段代码,因为编译器可能会认为这是一段亢余代码而加以优化。
stc单片机bootloader程序编写
stc单片机bootloader程序编写随着科技的不断发展,单片机在各个领域的应用越来越广泛。
而在单片机的开发过程中,Bootloader程序的编写是非常重要的一环。
本文将介绍STC单片机Bootloader程序的编写方法。
首先,我们需要了解什么是Bootloader程序。
Bootloader程序是位于单片机内部的一段特殊代码,它的作用是在单片机上电或复位时,负责初始化硬件设备,并加载用户程序到内存中运行。
因此,Bootloader程序的编写质量直接影响到单片机的启动速度和稳定性。
在STC单片机中,编写Bootloader程序需要以下几个步骤:1. 确定Bootloader程序的存储空间:在STC单片机中,Bootloader 程序通常存储在内部Flash中。
因此,我们需要确定Bootloader程序的存储地址和大小。
一般情况下,Bootloader程序的大小应该尽量小,以便为用户程序留出更多的空间。
2. 编写Bootloader程序的初始化代码:在Bootloader程序中,我们需要编写初始化代码,用于初始化单片机的硬件设备,如时钟、GPIO 等。
这些初始化代码的编写需要根据具体的单片机型号和硬件配置来进行。
3. 实现用户程序的加载功能:Bootloader程序的核心功能是加载用户程序到内存中运行。
在STC单片机中,我们可以通过串口通信或其他外部设备来实现用户程序的加载。
例如,我们可以通过串口接收用户程序的数据,并将其写入到内存中。
4. 实现用户程序的跳转功能:当用户程序加载完成后,Bootloader 程序需要实现跳转到用户程序的功能。
在STC单片机中,我们可以通过设置程序计数器(PC)的值来实现跳转。
具体的跳转地址需要根据用户程序的存储地址来确定。
5. 添加Bootloader程序的升级功能:为了方便后续的固件升级,我们可以在Bootloader程序中添加升级功能。
通过升级功能,我们可以通过串口或其他外部设备将新的Bootloader程序写入到单片机中,从而实现Bootloader程序的更新。
详解汽车ECU的bootloader程序
详解汽车ECU的bootloader程序bootloader的功能BootLoader,通常是驻留在ECU非易失性存储器(NVM,None Valitale Momory)中的一段程序加载代码,每次ECU复位后,都会运行bootloader。
它会检查是否有来自通信总线的远程程序加载请求,如果有,则进入bootloader模式,建立与程序下载端(通常为PC上位机)的总线通信并接收通信总线下载的应用程序、解析其地址和数据代码,运行NVM驱动程序,将其编程到NVM中,并校验其完整性,从而完成应用程序更新。
如果没有来自通信总线的远程程序加载请求,则直接跳转到应用程序复位入口函数(复位中断ISR,也称作Entry_Point()–使用Processor Expert的CodeWarrior 工程或者Startup()函数–普通CodeWarrior 工程),运行应用程序。
因此,汽车ECU的bootloader三个主要的作用:1.与远程程序下载端建立可靠的总线通信以获取要更新应用程序;2.解析应用程序编程文件(S19/HEX/BIN)获得其在NVM中的地址和程序代码及数据;3.运行NVM驱动将应用程序的代码和数据编程到NVM中并校验;下面就围绕这三个方面展开讲述。
如何建立可靠的总线通信?汽车ECU常见的数据总线有CAN和LIN,因此通常汽车ECU的bootloader都是通过CAN或者LIN下载数据的。
当然也可以基于其他总线,比如基于SPI总线或者I2C总线(典型如一些带有安全监测的功能安全ECU,通过主MCU对功能安全监测MCU的程序进行升级)以及以太网(基于Enternet通信的中控或者全液晶仪表的ECU以及下一代高速网关和ADAS ECU)。
⚠️注意事项:1.不同的ECU通信总线不一样,具体需要用到某种通信总线取决于实际应用;2.通信总线由ECU的MCU外设实现,所以在bootloader中必须开发相应的通信总线外设驱动程序,实现基本的数据发送和接收功能;3.为了保证通信的可靠性,必须开发一个基于通信总线完善的通信协议,应用程序下载端和bootloader之间需要建立请求命令(request command)、确认(acknowledge)、等待(block wait)、错误重传(errorre-send)等机制----bootloader根据不同的请求命令完成不同的任务并确认操作是否完成(ACK)以及数据是否正被确完整的传输,若出现数据错误(通过校验和或者ECC实现),需要进行自动重传;4.应用程序下载端通过需要在PC上基于VC或者C#、QT、Labview等开发GUI软件,实现中要求的总线通信协议,一般在其底层都是通过调用相应的总线设备,如USB转CAN/LIN的转发器设备的动态库(DLL)的API 接口来实现数据的收发,相应的总线USB转发设备都会提供相应的驱动库(DLL)。
μCLinux操作系统的移植及Bootloader程序设计
1 嵌 入式 系统硬 件 平 台
1 1 T 3 0 C 4 l评 估 板 简 介 . MS2 V 5 7
本课题 采用 的版本 为 K md-. . 8 e 2 4 1 。可 以从互联 网上 下载得到 t Lnx2 4 1 、 Cic和 e 2 t  ̄ i -. . t l C u 8 L b l f 源码及应用 程序  ̄l 源 码 包。文 件 为 :,Lnxds 20 0 1 .a. z 把 它 保 存 p iu .i-0 4 2 8 t g , C t r 到I o e目录 下 , 后 执 行 : rzv ,Lnxds2 0 0 1 . / m h 然 t xfv iu-i -04 2 8 a C t t ,z a. 。当 t 程 序 运行 完毕 后 , hm rg a r 在/ o e目录 下会 有 一爪/
Co e dc
-: _. _ . _
l |
C 4( P 5 1 DS )
10MIs 0 P L ED .r se e
由于本设计是 将 t h u r n x移植 到 V 57 平 台上 , 以 C C4 1 所 需 要 根 据 V 57 C 4 1下 面 的 A M T MI架 构 , 新 修 改 R 7D 重 i Ln x内核 。修改 p Lnx内核有 三方 面的工作 : 个是 , iu I , C . iu C 一 函数库 的问题 ; 二是 重写 Mae l kfe以适应 目标板 ; i 三是 修改 p Lnx/ iu/ rh a o mu  ̄ i C u Lnx ac/ r m /目录下 的文件 , mn 以使它适 应 A M7 D ] R T M【 架构。
霸
图 1 T 3 0 C 4 1的 功 能 框 图 MS 2 V 57
Bootloader
嵌入式系统可执行文件格式(2)
bin文件格式
bin文件是二进制文件,内部没有地址标记。用编程器烧写 时,从00开始;下载运行则下载到编译时的地址。
HEX文件格式
Intel HEX文件是记录文本行的ASCII文本文件,每一行是一 个HEX记录,每条记录有五个域,由十六进制数组成的机 器码或者数据常量;经常被用于将程序或数据传输存储到 ROM、EPROM。大多数编程器和模拟器使用HEX文件。
} memory_area_t;
内存映射的检测
阶段2(3)
(3)加载内核映像和根文件系统映像
规划内存占用的布局
内核映像所占用的内存范围 MEM_START + 0X8000
根文件系统所占用的内存范围 MEM_START + 0X00100000
从Flash上拷贝
While循环
阶段2(4)
Boot Loader典型结构框架
操作系统的角度看,Boot Loader的总目标 就是正确地调用内核来执行
大多数Boot Loader都分为阶段1和阶段2
阶段1:依赖于CPU体系结构代码 阶段2:一些复杂功能
阶段1(1)
(1)硬件设备初始化
屏蔽所有的中断 设置CPU的速度和时钟频率 RAM初始化 初始化LED
嵌入式系统
Boot Loader程序设计
提纲
Boot Loader基本概念 Boot Loader典型结构 Boot Loader基本设计
提纲
Boot Loader基本概念 Boot Loader典型结构 Boot Loader基本设计
Boot Loader基本概念
硬件环境 安装地址 相关设备与基址 启动过程 操作模式 通信设备与协议
Bootloader的概念和作用
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 分区等;也可以设计得很简单,只完成最基本的功能。
GRUB2及启动过程详解
GRUB2及启动过程详解作者: 南瓜剪子2016年7月28日1. 概述 (2)2. CentOS7中GRUB2 (2)3. GRUB2 的bootstrap image文件 (3)3.1. boot.img (3)3.2. diskboot.img (4)3.3. kernel.img (4)3.4. core.img (4)3.5. *.mod (4)4. 对比GRUB Legacy (5)4.1. stage1 (5)4.2. *_stage1_5 (5)4.3. stage2 (5)5. grub2-mkimage定制core.img (6)6. GRUB2安装 (7)6.1. Linux是怎么命名设备(/dev/sda) (7)6.2. MBR(Master Boot Record) (8)6.3. MBR分区表DPT(Disk Partition Table) (10)6.4. LBA and CHS (14)6.4.1. CHS(cylinders-heads-sectors) (14)6.4.2. LBA(Logical Block Address) (14)6.5. boot.img和core.img安装 (15)6.6. 硬盘总结 (18)7. 启动过程 (19)7.1. BIOS (19)7.2. GRUB2中boot.img (20)7.2.1. Step1无条件跳转 (20)7.2.2. Step2 初始化 (20)7.2.3. Step3 判断硬盘是否支持LBA还是只支持CHS (22)7.2.4. Step4 采用LBA加载core.img第一个扇区 (23)7.2.5. Step5 拷贝core.img第一个扇区到内存指定位置 (25)7.2.6. Step6 执行core.img第一条语句 (27)7.2.7. Step7 boot.img总结 (27)7.3. GRUB2中core.img (28)7.3.1. diskboot.img (28)7.3.2. GRUB2 core Startup (34)7.3.3. GRUB主函数即GRUB主要功能 (37)7.3.4. 加载Linux Kernel (38)7.4. Linux kernel (47)8. 结束语 (48)9. 参考文献 (48)1.概述计算机系统上电之后由固化到ROM中的BIOS(UEFI)进行操作,然后导入硬盘MBR中Boot Loader并调到其运行,由Boot Loader对操作系统内核进行加载,并将控制权交给操作系统.下图简单描述了CentOS7的启动过程(CentOS7使用GRUB2作为Boot Loader):现在的Boot Loader有很多类型,大致如下:1.对Linux来说GRUB2占据了统治地位2.对Windows来说Bootmgr/BCD占据了统治地位3.对Apple系统缺省的是BootX作为一名计算机工程师,了解Boot Loader的原理是很重要。
BootLoader与设备驱动介绍
8
4.2.1 BootLoader概述
2 BootLoader的操作模式
大多数BootLoader都包含两种操作模
式:启动加载模式和下载模式。
启动加载模式:也称为自主(Autonomous)模式。
在这种模式下,BootLoader从目标机的某个固态存 储设备上将操作系统加载到RAM中运行,整个过程 中没有用户的介入。
1 堆栈初始化
堆栈初始化要处理的事情是为处理器的 7种处理器模式(p37)分配堆栈空间。下面以 FIQ模式下的堆栈设置为例进行说明:
16
ORR R1,R0,#LOCKOUT|FIQ_MODE ;把处理器模式放在R1中 ;LOCKOUT用来屏蔽中断位 MSR CPSR,R1 ;改变CPU的CPSR寄存器 ;进入到指定的FIQ模式 MSR SPSR,R2 ;保存前一模式 LDR SP,=FIQ_STACK ;把FIQ模式下的堆栈起始 ;值赋给当前的SP ;FIQ_STACK是分配给FIQ ;模式堆栈空间(比如说1K ;字节)的起始地址
跳转指令地址依次+4
25
4.2.2 BootLoader的典型结构
6 系统重新映射
为什么要系统重新映射? 系统重新映射与前面镜像文件的拷贝有 关。当为了提高运行速度把ROM的镜像文件拷 贝到RAM后,中断向量表就不在零地址处了, 因此要重新映射存储单元,把RAM的地址重新 设定为零地址。
26
整个过程是把启动代码从ROM(EEPROM
;GCS6
(对于不同的RAM,可以修改此地址) ;STACK RAM=0xC7FFA00
33
4.2.3 实例分析
中断控制预定义 INTPND EQU 0x01E00004 INTMOD EQU 0x01E00008 INTMSK EQU 0x01E0000C I_ISPR EQU 0x01E00020 I_CMST EQU 0x01E0001C I_ISPC EQU 0x01E00024
BootLoader的概念详细介绍
下载步骤
在(Release版本下编译或按下F7),则在目录下 生成Data目录,在其中有一个bin文件。 打开UJtag,对其进行初始化配置(导入UJtag安 装目录下的三个文本文件),按下“确定”。 选择“文件”->“打开”,找到刚才生成的bin文 件,并按下确定。 点击“Flash编程”->进入设置对话框->依次执 行选择芯片(选择合适的芯片,即大小和线宽相 配套)、整片擦除和编程操作即可。 注意:为保证成功率,可以先去掉“使用RAM” 前的对勾,然后勾选“编程时校验”。最好在 下载的过程中不执行其他操作,以免失败。
ห้องสมุดไป่ตู้
总体控制函数
在一般的情况下,这个函数实际就是main函 数。当然我们也可以新写一个函数,然后在 main函数的最开始运行它。 它的作用就是在屏幕上显示界面并且用一个 循环监控输入,即你选择的是要执行哪一个 功能,然后跳转到你选择的函数去执行。返 回后可以继续监控。
下载
下载取决于我们在编程时对编译环境的配置, 其中有四个地方需要我们设置(Release版本)。 1.ARM C Compiler->ATPCS->ARM/Thumb interwork(取消对勾) 2.ARM Linker->Output->Simple(选择)->RO Base和RW Base(设置) 3. ARM Linker->Options->Image entry point(清空) 4. ARM Linker->Layout->Object/Simbol(设置 44b0init.o);Section(设置init)
文件系统
在标准程序中还有一个boot函数,用于 引导另外一个程序执行。也就是说,在 启动时总体控制程序会判断你是要进入 上面的界面程序还是这里这个程序(通过 键盘事件检测)。 这个程序放在哪里,又是如何运行的?
bootloader总体操作设计
bootloader总体操作设计bootloarder设计蓝图(不想做设计师的程序员不是好程序员):bootloarder的作⽤:将linux内核启动起来设计⽅法:模仿u-bootu-boot:⽀持多种嵌⼊式cpu的bootloarder程序,⾃主模式,⾃动引导内核启动。
u-boot还有⼀种开发模式建⽴U-Boot⼯程:-------------------------------------------------source sight的使⽤:先将u-boot在linux中解压,在window下找到u-boot的⽂件夹并进⼊-》⼯具-》映射到⽹络⽂件夹-》复制当前地址到浏览z盘-》完成-》project project->new project->命名-》ok->project->add and remove file->选择u-boot->输⼊Z:/->enter->add all->勾选添加⼦⽬录-》ok.最终我们发现没有.s,.S⽂件。
添加汇编⽂件:option->document Option->Document Type:C Source File,File filter:添加;*.s;*.S;*.hadd and remove file->add tree--------------------------------------------------------ARM处理器启动流程:启动⽅式:2440:Nor (2m),以及从nand flash(256M)启动mapping在上c2440⼿册的p221页可以看到内存地址分布中没有nand flash ,有bootRAM(stopping stone),nand flash很特殊,不参与地址分配,但确实存在,运⾏的时候,先将nand flash 中的内容复制到stepping stone中。
BOOTLOADER的原理及设计要点
MEGA128的Boot Loader区大小可以由BOOT- SZ熔丝位来配置, 这给用户带来了很大的选择灵 活 性 。 在 出 厂 默 认 配 置 下 , BOOTSZ=00, 也 即 Boot Loader区为从¥F000开始的4K 字。用户可以 通过改写BOOTSZ来更改其大小。如果boot loader 区程序非常小, 用户甚至可以将Boot Loader区设 定 为512字 以 扩 大 应 用 程 序 的 空 间 。 笔 者 认 为 , 如果应用程序不是非常大, 最好能保留其4K字的 配置, 这一方面可减少一步改写熔丝位的工作 量, 另一方面也预留了Boot Loader的扩展能力。
利 用 在 应 用 编 程 (IAP, In Application Pro- gram) 技术, 用户可在数据采集中心对远 程RTU 进行升级, 而且更新时间快, 基本不会影响系统 运 行 。 此 外 , 当 在 单 片 机 中 烧 入 这 样 一 个 Boot loader程序并建立IAP后, 其最基本的开发环境就 简化成了 “PC+RS232电缆+目标板”。
Boot Loader区 的 程 序 一 般 可 分 为 两 个 部 分 , 一 部 分 是 与 硬 件 单 片 机 相 关 的 FLASH 擦 写 功 能 模 块函数, 一般用汇编语言编写, 这也是整个Boot Loader的 核 心 模 块 ; 另 一 部 分 为 应 用 程 序 模 块 , 一般用C语言编写, 以增强程序的可读性。
2.2 Boot Loader程序进入方式的选择
Boot Loader的本质就是驻留在FLASH中的 一 段程序。要进入Boot Loader程序, 程序指针PC必 须指向该程序的起始位置。用户可以通过在应用 程序接收到特殊指令后, 通过JMP语句直接跳转 到Boot Loader程 序 的 开 始 位 置 去 执 行 更 新 流 程 。 此 外 , MEGA128还 可 通 过 更 改BOOTRST熔 丝 位 来 将 复 位 向 量 直 接 指 向Boot Loader程 序 , 这 样 , 每次MEGA128复位时, 都将直接运行Boot Loader 流程。但用户在Boot Loader中必须判断是否需要 更新应用程序, 如果不需要, 经过超时时间后则 退出Boot Loader, 接着进入应用程序。
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的分析和设计
以及更好 的可移植 性。从 固态 存储设备上启动 的
B oodr 多都 是 2阶段 的启 动 过程 , 即启 动过 ofae 大 l 也
程可以分为 s gl s g2 t e 和 t e 两部分。其中 s g1 a a t e 用 a 汇编语 言编写 , 是在 F A H执行 , ae 用 c语 言 LS s g2 t 编写 , 是在 R M中执行的。 A
1 引 言
任何计算机系统都有 自己的引导程序, 在嵌入 式系统中 , 采用 Bo odr 引导程序 。所谓 B o ofae 来 l ot — l dr就是在操作 系统 内核运行 之前 的一段 小程 o e, a 序。通过这段小程序 , 可以初始化硬件设备、 建立内 存空间的映射 图, 从而将 系统 的软硬件环境带到一
个合适的状态 , 以便为调用操作 系统 内核准备好正
确的环境。 不同的 C U有 不同的 Boodr P otae。即使它们是 l
基 于 同一 种 C U而构 建 的 , 想 让运 行 在 一块 目标 P 要
上的某个固态存储设备上将操作 系统加载到 R M A 中运行 , 整个过程并没有用户 的介入 。这种模式是 Boodr ofae 的正常工作模式 , l 因此在嵌入式产品发布 的时侯 ,ofae 显然必须工作在这种模式下。 B oodr l 下载 ( o nodn ) 式 : 这 种模 式 下 , D w laig 模 在 目标
板上的 Boodr ofae 程序 也能运行在 另一块板子上 , l 通常也都需要修改 Bo odr otae 的源程序 。因此有必 l
NE Jn— ag Q U H i I u h n , I u
( ue C m u i t n eh i l ol e W h n4 0 7 C i H bi o m n ai sTcnc lg , u a 30 9,hn c o aC e a)
ARM网口、Bootloader中网络程序的设计及其测试方法
通过以太 网、 口或 U B下载编译好 的二进制程序 串 S 文件来进行程序的调试、 烧写 , R 的 BO A M I S引导
装载程序 ( o t a e) B ol dr 具有 相应 的命令 解释、 收 o 接
U B或串口下载程序的方法 , S 网络下载程序有着无 可比拟的优越性 。
文章编号 : o-4 O2o ) 2 5 9 5 1 599 (O 6o - 1- 0 o o
在嵌入式 A M 系统开发 中, R 通常 的方法是通 过计算机主控制机 的串行终端程序发布控制命令 ,
络应用程序大多可 以使 用现成 的, 这样开发工作既
可以在 Wi o s也 可 以在 Ln x下进行 。相 对 n w d iu
Newo k p o r m n e f c swih n t r p l ain p o rmso o u e o t r r g a it ra e t ewo k a pi t r g a fc mp t rOS f rARM o to d ra e c o b o la e r
wn o s i w 应用程序 D W 实现程序下载, d N 方式是通
过 U B 或 串 口 方 式 , 憾 的 是,国 内 大 多 S 遗
络协议标准添加设计相应 的网络应用程序 , 就能实 现响应用户的 PN I G命令 , 以及通过 网口把 程序下
d sg e . Re t o to em i a a d r e tn e in d mo ec n r lt r n lh r wa et sig,p o r m e u gn r g a d b g ig,p o r m p a ig o p r dn r g a u d t ru g a ig n
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
bootloader程序框架
Bootloader程序一般分为两个阶段 Bootloader的第一阶段(汇编)
▶SVC模式 ▶关闭cache和MMU ▶初始化系统时钟 ▶初始化内存 ▶初始化TZPC ▶拷贝u-boot到内存 ▶设置SP ▶调到C函数board_init_f()
初始化硬件 将操作系统内核从Flash/SD卡/EMMC拷贝到 SDRAM中 提供Linux内核的启动参数 启动Linux内核
Bootloader的启动
系统加电或复位后,所有CPU都会从某个地址开 始执行(ARM从0x0地址执行); 嵌入式系统的开发板都要把板上ROM或FLASH映 射到这个地址; 因此,必须把Bootloader程序存储在相应的 FLASH位置。系统加电后,CPU将首先执行它。
u-boot的配置过程
U-boot的源码是通过gcc和Makefile组织编译。
配置u-boot的命令是:
▶make <boardname>_config #make tiny4412_config
在u-boot源码的顶层目录找到下面的一个通用目标:
பைடு நூலகம்
▶通配符%代表目标板(board)名称 ▶依赖关系是: unconfig ▶执行的命令:@$(MKCONFIG) -A $(@:_config=)
bootloader程序设计(2)
Uboot_tiny4412的配置编译过程及源码修改优化
教学回顾
在linux下编写ARM裸奔程序的步骤 链接脚本是什么? 工具arm-linux-objcopy , arm-linux-objdump的作 用是什么?
教学内容
Bootloader简介及程序框架 U-boot简介及u-boot命令、环境变量 u-boot的配置、编译过程分析 tiny4412的启动过程 Uboot_tiny4412的修改优化—自动烧写emmc
其中:BL2是u-boot.bin的前16K代码,也就是说,u-boot.bin的前16K代码要 把自己从定位到DRAM中运行。
BL2的生成
bl2是u-boot的前14k bl2的生成需要工具sd_fuse/mkbl2
mkbl2的代码是:sd_fuse/V310-EVT1-mkbl2.c
代码执行流程如右图:
开始
分配14K内存Buf
打开u-boot.bin文件,读 取前14K到Buf中
实质上u-boot就是将跟本开发板相关的文件链接起来
u-boot的链接脚本
链接脚本在源码的
board/samsung/tiny4412/u-boot.lds 从连接脚本知识 u-boot的内存分布:
.bss .u_boot_cmd .data .rodata .text
tiny4412的启动流程
…… TZ(92k) U-boot(328k) BL2(16k) BL1(8K)
sd_fuse/tiny4412/E4412_tzsw.bin u-boot.bin sd_fuse/tiny4412/bl2.bin sd_fuse/tiny4412/E4412_N.bl1.bin
SD/EMMC中bootloader的分布
exynos4412的地址空间
tiny4412的启动流程
iROM:这段地址空间对应exynos4412内部固化的一段 程序,exynos4412启动的第一条指令就存放在这里。 iRAM:这段地址空间对应的是exynos4412内部的一个 存储器,这段存储器的特点是上电就可以用,不用初 始化。 DMC0:这段地址空间就是核心板上的DDR3对应的存储 空间(我的tiny4412有2GB的DDR3,所以地址空间是 0x40000000-0xC0000000),上电后需要初始化DRAM控 制器才能使用。
支持多种以上的开发板
开放源代码,遵循GPL条款 易于移植、调试
操作界面是命令行界面
官方网站:http://www.denx.de/wiki/U-Boot/WebHome
U-Boot源码目录结构
平台相关 board, arch, include… 平台无关 common, net, fs, drivers… 工具和文档 tools, doc
u-boot介绍
1999年由德国DENX软件工程中心的Wolfgang Denk发起, 全称Universal Bootloader。
特点:
支持多种硬件构架:包括ARM、x86、PPC、MIPS、m68k、NIOS、 Blackfin
支持多种操作系统:包括Linux、VxWorks、NETBSD、QNX、 RTEMS、ARTOS、LynxOS
u-boot的环境变量
可以使用printenv命令查看u-boot的环境变量,用 setenv命令设置环境变量,saveenv命令保存环 境变量。 有些u-boot的环境变量有特殊的含义:
bootcmd bootargs bootdelay ... 表示自动启动的命令序列 传递给内核的命令行参数 启动延时的秒钟数
tiny4412的启动流程
exynos4412的启动
tiny4412的启动流程
exynos4412的启动 iROM首先运行,然后根 据OM的值判断从哪个存 储设备加载BL1到iRAM BL1再根据OM的值判断 从哪个存储设备加载 BL2到IRAM中 BL2初始化外部DRAM, 将u-boot拷贝到DRAM中 (DDR),将u-boot从 SD/EMMC拷贝到DRAM中 ,然后启动DRAM中的uboot。
net 网络功能的上层文件,实现各种协议,如nfs、tftp、arp等
U-BOOT编译生成的映像文件
u-boot的使用
u-boot是基于命令行的bootloader,其使用主要注 意两个方面:
环境变量 命令
u-boot的环境变量和命令是u-boot特有的,与 linux的shell(bash)有区别; 不要将u-boot的使用和shell的使用相混饶了。
U-boot命令
Printenv 打印环境变量。 Uboot> printenv baudrate=115200 ipaddr=192.168.1.1 … setenv 设置新的变量 Uboot> setenv ipaddr 192.168.1.100 Uboot> printenv … ipaddr=192.168.1.1 … saveenv 将当前定义的所有变量及其值存入flash/SD卡/EMMC中。
u-boot依赖于好多.o文件,如下:
OBJS = $(CPUDIR)/start.o LIBS = lib/libgeneric.a LIBS += lib/lzma/liblzma.a LIBS += lib/lzo/liblzo.a LIBBOARD = board/$(BOARDDIR)/lib$(BOARD).a
bootloader程序结构
Bootloader的第二阶段(C语言)
初始化本阶段要使用到的硬件设备; 等待一小段时间;
▶没有用户输入,则启动linux内核; ▶有用户输入,进入一个死循环;
接收用户的输入; 执行相应的操作;
启动内核的过程:
▶为内核设置启动参数; ▶将内核从flash/SD卡/EMMC拷贝到SDRAM中; ▶调用内核。
▶如果定义了该变量,在autoboot模式下,将会执行该脚本的内 容。
U-boot命令介绍
go 执行内存中的二进制代码,一个简单的跳转到 指定地址 bootm 执行内存中的二进制代码
要求二进制代码为制定格式的。通常为mkimage处理过 的二进制文件。启动Uboot工具制作的压缩Linux内核
教学要求
掌握bootloader程序的框架 掌握u-boot的配置编译过程 理解tiny4412的启动过程 掌握u-boot的配置和生成过程 掌握自动烧写u-boot到emmc的方法
什么是Bootloader
Bootloader是硬件启动的引导程序,是启动操作系统的根 本;是在操作系统内核或用户应用程序运行之前运行的一 段小程序。通过这段小程序,可以初始化硬件设备、建立 内存空间的映射图,从而将系统的软硬件环境带到一个合 适的状态,以便为最终调用准备好环境; 在一般典型的系统中,整个系统的加载启动任务就完全由 Bootloader来完成。
然后执行命令:
▶./mkconfig -A tiny4412
u-boot的配置过程
mkconfig脚本分析:./mkconfig -A
在boards.cfg找到“tiny4412”所在的行 以这一行设置命令行参数:$1,$2,$3,$4,$5,$6 进入./include目录:
▶建立config.mk文件, ▶建立config.h文件,
bootp 通过网络启动,需要提前设置好硬件地址。
19
u-boot使用实例:
setenv bootcmd dnw 0x40600000\;dnw 0x42000000 setenv bootargs 'root=/dev/nfs rw nfsroot=192.168.1.88:/opt/rootfs ethmac=6e:f0:12:7d:68:e8 ip=192.168.1.66:192.168.1.88:192.168.1.1:255.255.2 55.0::eth0:off console=ttySAC0,115200 init=/linuxrc' saveenv reset
@ 表示执行命令时,不打印这一行 $(MKCONFIG) 是指脚本工具 mkconfig MKCONFIG := $(SRCTREE)/mkconfig $(@:_config=) 表示目标中去除字符串中的_config,这tiny4412。