7 bootloader程序设计(2)

合集下载

第三节 Bootloader

第三节 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设计

基于ARM7&uCLinux的BootLoader设计
权 最 终 交 给 u Ln x C iu 。
韧化 ・ 砰 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 ’

f 蓥 口暖 器 文 秉 件 蛲
fT ^ 服务 加羲 5 瀚 程 f路 l 岸

bootloader压缩算法

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驱动程序设计与实现

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过程详解

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程序编写

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程序

详解汽车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程序设计

μ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
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Bootloader 内核映像 参数 文件系统
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。
相关文档
最新文档