DM6446的Bootloader分析
- 格式:doc
- 大小:232.00 KB
- 文档页数:4
Bootloader的结构和启动过程CPU上电后,会在某个地址开始执行,比如MIPS结构的CPU会从0xBFC00000取第一条指令,而ARM结构的CPU则从0x00000000开始,嵌入式开发板中,需要把存储器件ROM或Flash 等映射到这个地址。
而Bootloader就存在这个地址的开始处,这样一上电后就会从这个地址处执行。
Bootloader执行后从板子上的某个固态存储设备上将操作系统OS加载到RAM中运行。
(一些功能强大的Bootloader,比如U-boot在正常启动加载后可以延时若干秒(也可以自己设置),等待终端用户按下任意键后便可进入到下载模式;如果在指定的时间内没有按键,U-boot则会启动Linux内核,内核的启动参数可以是默认的或是由U-boot传递给它的)。
**注意:有的CPU在运行Bootloader之前先运行一段固件(firmware)中固化的boot代码,比如x86结构的CPU就是先运行BIOS中的固件然后才开始运行硬盘第一个分区中的Bootloader。
在大多数的嵌入式系统中并没有固件,Bootloader是上电后运行的第一个代码。
**下面便更细致得说明Bootloader的启动过程:从固态存储器上启动的Bootloader大多数是分二个阶段来启动的。
**第一个阶段**使用汇编代码来实现,它主要完成一些依赖于CPU体系结构的初始化,比如关看门狗、关中断、初始化RAM、将第二阶段调用的C语言代码复制到RAM(非必须,例如对于NOR Flash 等设备可以直接在上面执行,只不过比在RAM上执行效率低),设置CPU的速度和时钟频率(非必需,也可以放在第二阶段),设置好栈,跳转到第二阶段的C语言入口处等;**第二个阶段**通常用C语言来实现,它主要用来:初始化本阶段要用到的硬件设备、检测系统内存映射(就是确定板上使用了多少内存,他们的地址空间是什么)、将内核映像和根文件系统映像从Flash 上复制到内存RAM并且在内存中的某个固定位置为内核设置启动参数Boot parameters(Flash上的内核映像有可能是经过压缩的,那么读到RAM后还要进行解压。
Bootloader 的学习/user1/5809/archives/2009/60942.htmlBootload: 在操作系统内核运行前运行的一段程序,相当于PC机上的BIOS, 用于初始化硬件设备,和建立内存空间的映射,从而将系统的软硬件环境带到一个合适的状态。
复位后,从地址0x 0000 0000 处取它第一条指令。
典型的嵌入式系统Bootload 有 Blob (boot load object) 和 U-boot (universal boot loader)其中U-boot 支持ARM, MIPS, X86, Nios,可启动VxWorks,QNX,Linux在flash里,首先存放bootload, 其次启动参数,是内核和根文件系统bootloader分两个部分,stage1和stage2:stage1: 汇编部分执行简单的硬件初始化.1. 硬件设备初始化2. 为加载bootloader的stage2准备RAM空间3. 设置好堆栈4. 跳转到stage2的C入口stage2: C语言部分负责复制数据,设置启动参数和串口通信等1. 初始化本阶段使用到的硬件设备2. 检测系统内存映像3. 将kernel映像和根文件映像从flash读到RAM中4. 为内核设置启动参数5. 调用内核------------------------------------Mini2440 的Bootloader 结构分析1.Import some head files.GET option.inc ;GET = includeGET memcfg.incGET 2440addr.incoption.inc 顾名思义是可以改变的配置选项,其中包括一些起始地址,初始状态,总线宽度,时钟频率。
如果以后对系统的设置有变化,直接修改”option.inc”中的配置即可,无需大量改动boot loader.对mini2440中option.inc分析如下:_STACK_BASEADDRESS EQU 0x33ff8000; STACK 的起始地址_MMUTT_STARTADDRESS EQU 0x33ff8000; 定义MMU表基地址_ISR_STARTADDRESS EQU 0x33ffff00;补充MMU知识:a.什么是MMUMMU –Memory Management Unit 缩写,用来管理virtual memory和physical memory的控制线路。
嵌入式linux启动信息完全注释(1)上面的这些输出信息,也可能包括你自己正在做的嵌入式linux开发板的输出信息,其中的每一行,每一个字的含义,你是否深究过,或者说大部分的含义你能确切地知道的?本人想在这里结合本人在实践中一些体会来和广大嵌入式linux的开发者一起读懂这些信息。
我们在这里将以一个真实的嵌入式linux系统的启动过程为例,来分析这些输出信息。
启动信息的原始内容将用标记标出,以区别与注释。
嵌入式linux的启动主要分为两个阶段:①第一部分bootloader启动阶段②第二部分linux内核初始化和启动阶段第一节:start_kernel第二节:用户模式(user_mode)开始,start_kernel结束第三节:加载linux内核完毕,转入cpu_idle进程place)XIP.写入和擦除速度很低。
NAND Flash,1989年,东芝公司发明.是以块和页为单位来读写的,不能随机访问某个指定的点.因而相对来说读取速度较慢,而擦除和写入的速度则比较快,每次可以传输16Bit,一般适用在大容量的多媒体应用中,容量大。
如:CF,SM.②串行Serial Flash是以字节进行传输的,每次可以传输1-2Bit.如:MMC,SD,MS卡.串行闪存器件体积小,引脚也少,成本相对也更低廉。
③不可擦除Mask Rom Flash的特点是一次性录入数据,具有不可更改性,经常运用于游戏和需版权保护文件等的录入。
其显著特点是成本低。
注意:任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。
NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。
从上面的信息,我们可以对flash类型特点有个比较明确的了解。
根据内存的工作原理可以划分出两种内存:DRAM和SRAM①DRAM表示动态随机存取存储器。
这是一种以电荷形式进行存储的半导体存储器。
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。
Motorola微处理器的bootloader分析与应用摘要:以Motorola 32位处理器ColdFire5307为例,分析、介绍Motorola 公司用于嵌入式系统开发的dBUG通用bootloader软件的结构、运行原理及应用。
关键词:嵌入式系统 ColdFire bootloader dBUG引言bootloader是用来完成系统启动和系统软件加载工作的程序。
它是底层硬件和上层应用软件之间的一个中间件软件,完成处理器和周边电路正常运行所要的初始化工作;可以屏蔽底层硬件的差异,使上层应用软件的编写和移植更加方便;不仅具有类似PC机上常用的BIOS(Basic Input Output System,基本输入、输出系统监控程序)功能,而且还可具有一定的调试功能。
目前,在嵌入式系统开发中有多种bootloader可供选择,其中Motorola公司的名为dBUG的bootloader比较优秀。
它可以移植在Motorola MC68000、ColdFire和PowerPC系列所有微处理器上面,有强大的调试功能,支持单步、下载、网络更新等;其良好的软件架构使用户能很方便地修改其代码,扩展新的功能。
本文以作者用于网络数据存储的coldfire5307C3开发板为例,简析其上的dBUG bootloader的结构和运行机制,并给出实际修改范例。
1 bootloader源码结构(1)bootloader的文件组织dBUG bootloader源代码可以从Motorola公司网站获得。
它是一个范例程序,通过修改相应的配置文件和处理器相关文件,可以很方便地移植到不同的处理器系统上。
其源码由两个部分组成,一部分是lib项目,另外一部分是每种Motorola微处理器单独的处理器项目。
比如,ColdFire 5307就使用MCF5307C3项目和lib项目一起来生成最终的dBUG代码。
其中lib项目中是与处理器无关的一些命令或者函数,而每个单独的处理器项目是和每种不同的处理器息息相关的。
DM6446与DDR2接口的信号完整性研究
杨古月;张昕
【期刊名称】《应用科技》
【年(卷),期】2013(040)004
【摘要】为了研究电路拓扑结构对信号完整性的影响,采用Hyperlynx仿真软件,在布线前仿真软件LineSim中对TMS320DM6446与DDR2间的3种不同拓扑结构(树形结构、菊花链结构和星型结构)进行了信号完整性仿真,并通过布线后仿真工具BoardSim对布线前仿真结果进行了验证.研究结果表明,基于
TMS320DM6446的数字视频处理系统适合采用星型结构来设计时钟信号网络.软件仿真可以在产品研发之初找到并解决潜在的信号完整性问题,最大限度地减小产品设计失败的概率,提高电路系统工作可靠性.
【总页数】4页(P42-45)
【作者】杨古月;张昕
【作者单位】哈尔滨工程大学信息与通信工程学院,黑龙江哈尔滨150001;哈尔滨工程大学信息与通信工程学院,黑龙江哈尔滨150001
【正文语种】中文
【中图分类】TN41
【相关文献】
1.Virtex-5 DDR2存储器接口的信号完整性设计 [J], David Banas
2.DDR2高速PCB设计和信号完整性分析 [J], 邓思维;凌凯
3.基于FPGA的DDR2 SDRAM接口信号完整性设计与验证 [J], 王令培;茅玉龙;杨天慧;王志凌
4.DDR2高速PCB设计与信号完整性 [J], 周忠山;
5.DDR2信号完整性分析与应用 [J], 吴业舟;李晓春
因版权原因,仅展示原文概要,查看原文内容请购买。
一、DM6446的启动模式
系统加电或复位后,CPU都要从某个预定的地址上取得指令,执行Bootloader程序。
DM6446处理器ARM端(ARM-Side)提供两种启动模式:
★ 从异步的外部存储器接口AEMIF(Asynchronous External Memory Interface)/NOR
Flash引导启动
★ 从ARM内部ROM(AIROM,ARM Inner ROM)引导启动
这两者由Boot Selection(BTSEL[1:0])引脚的设置状态决定。如下:
★ BTSEL[1:0]=01时,系统加电或复位后ARM处理器从AEMIF或NOR Flash的零地址
(0x02000000)执行引导启动代码,这些代码是由用户生成并烧写的,即从外部存
储器启动
★ BTSEL[1:0]≠01时,系统加电或复位后,ARM处理器从AIROM的地址(0x00004000)
执行RBL(ROM Boot Loader),即从片内ROM的RBL开始运行
而RBL程序根据BTSEL[1:0]状态(BTSEL[0-3]管脚的电平)来区分不同引导启动模式:
★ BTSEL[1:0]=00,NAND Flash引导启动模式:发送控制信息到UBL(User Boot
Loader),并从Flash中拷贝UBL到ARM的内部RAM(AIRAM),并转到UBL执行
★ BTSEL[1:0]=11,UART引导启动模式:通过UART下载串口UBL并发送控制信息到
用户软件
★ BTSEL[1:0]=10,保留未用
因此,DM6446在上电或复位后,存在四种启动方式。如下图。
DM6446引导启动流程
二、AIROM启动模式
AIROM启动模式受两个限制:1)、AIRAM的空间只有16KB;2)、NAND Flash不支持XIP
(eXecute-In-Place,片内执行)技术。因此,AIROM启动模式可以划分为三个阶段:
▲ Stage1:加电或复位后,执行RBL。RBL是TI内嵌的程序,其内部实现不向用户公
开;但提供了一个编程接口,以便设计人员据此编写UBL代码。
▲ Stage2:将UBL拷贝到AIRAM中并执行。UBL被烧写在NAND Flash的从Block1开
始的5个存储块上,因此UBL的尺寸小于AIRAM的空间大小,即14K。
▲ Stage3:U-Boot。它被烧写在NAND Flash中的UBL后,由UBL读到DDR2中执行。
NAND Flash启动阶段划分
注:虚线部分为NAND引导启动核心
三、UBL
UBL对上与RBL交互,对下要加载运行U-Boot,再由U-Boot加载uImage到DDR2中运行,
最后将控制权交给操作系统。因此,UBL的重要性不言而喻。
UBL首先完成系统时钟、DDR频率以及运行环境的初始化,然后复制U-Boot到DDR,并转
到start_armboot。
具体设置如下:
◎ 设置引导配置寄存器BOOTCFG,使BTSEL[1:0]=00,即选择NAND Flash引导启动模
式;并根据外部NAND Flash型号设置EM_WIDTH位。在RBL从NAND读数据时要根
据BOOTCFG的第5位(EM_WIDTH)的值来判断总线宽度和存取数据的大小,
EM_WIDTH=0,数据宽度为8位(Bit);EM_WIDTH=1,数据宽度为16位。
◎ 定义NAND UBL描述符,包括魔术数、UBL入口点地址、页面数、起始块号、起始
页号等。RBL首先要读取NAND Flash的设备ID以及设备存取信息(即块和页的大
小、UBL标识符等,保存在设备信息表中),然后从NAND设备CIS/IDI Block之后
(Block1)的第0页开始读取有效的UBL描述符。如果没有找到与默认UBL标识相
匹配的UBL,就搜索下一个块,最多连续搜索5个块,以避免NAND设备开始连续
的几个块存在坏块的情况(一般不会出现。NAND Flash在出厂前会保证第一块和第
二块是好的);如果还是没有适合的UBL,则切换到UART启动模式。
◎ 当RBL找到一个有效的UBL时,首先读取并处理UBL描述符,RBL根据描述符信息
来决定是否开启EMIF(External Memory Interface)或I-Cache(Instruction-Cache)、
是否采用DMA等操作。一旦具备了UBL运行条件,RBL就把UBL拷贝到AIRAM中,
并跳转到起始入口地址0x00000020处运行UBL。
◎ UBL将为U-Boot建立运行环境。其主要流程如下:
△ DM644xInit,初始化硬件平台:屏蔽所有中断,电源/休眠管理控制器复位
△ UARTInit,串口初始化设置
△ PLL1Init,系统锁相环PLL1设置
△ PLL2InitDDR,锁相环PLL2设置
△ DDR2Init,DDR2初始化
△ AEMIFInit,AEMIF接口初始化
△ IVTInit,中断向量表初始化
△ NAND_Init,NAND初始化,在读BOOTCFG时,如果BTSEl[1:0]=00就调用
△ NAND_Copy,拷贝U-Boot代码到DDR2中
△ 拷贝成功,根据NAND_BOOT::entryPoint跳转到U-Boot入口的运行
四、AIROM NAND启动过程