DM355有两种启动方式,是由BTSEL[1:0]引脚决定的
第一种是从片外的Asynchronous EMIF (AEMIF) 启动 是指从片外的三星OneNAND
器件启动
第二种方式是从片内的ROM启动,执行ROM中的ROM boot loader
(RBL),RBL支持三种片外介质,BTSEL决定RBL针对哪种介质进行启动
– BTSEL[1:0] = 00 - ARM NAND Boot
– BTSEL[1:0] = 10 - ARM MMC/SD Boot
– BTSEL[1:0] = 11 - ARM UART Boot
现在选择从片外的NAND启动,这种启动方式的具体步骤是RBL先从片外NAND上将UBL(user
boot loader)取进ARM内部的RAM中(copies a second stage user boot loader
(UBL) from NAND flash to ARM internal RAM (AIM) and transfers control to
the user-defined
UBL),然后执行,UBL进行的工作是从NAND中将剩下的数据取进DDR中并跳转到那里。
在NAND中存在两种代码,1是UBL,二是用户自己的代码APP,RBL是如何找到UBL的呢,原来对于RBL和APP在Nand中的存储必须符合一定的格式,在存储UBL或者APP代码的第一页是专门用来存储一个信息头,这个信息头的格式如下
/* Some of the parameters are modified runtime */
unsigned int ubldesc [] = {
0xA1ACED00, //Magic number
0x00000020, // Entry point for the UBL
0x00000007, // No. of pages for the UBL code
0x1, // Starting block of UBL in NAND
0x1 // Starting page of UBL in NAND
};
/* Some of the parameters are modified runtime */
unsigned int appdesc [] = {
0xB1ACED22, //Magic number
0x0000000A, // Start block in NAND
0x81080000, // Start address in DDR
0x81080000, // Entry point
0x00000200, // No. of pages for the complete Application
0x00000000 //compression flag
};
这个信息头分别包含了程序加载时的起始地址和入口点等等信息,当DM355复位时,片内ROM上的代码对NAND
CONTROLLER进行初始化并且在NAND中寻找UBL的Magic number
(事先已经约定好的),找到以后就根据信息头里提供的信息将UBL拷贝进片内RAM中(0x00000020,
// Entry point for the
UBL),然后进行执行,UBL的代码在光盘中有提供,其机制和RBL相同,只不过这个UBL是针对UBOOT的,如果不详执行UBOOT而是向执行自己的代码
那么需要将CCS编译出来的OUT文件转化成bin文件 下载到NAND中。
总结一下nand中存放的东西 UBL、uboot、LINUX的内核映像uimage、文件系统。
前两个的下载是用NAND_programmer进行,NAND_programmer的代码在光盘中也有,就是一段运行在DDR中的程序,将输入的UBL
和uboot文件加上信息头后存储到NAND中
后两个的下载用uboot就能实现。
没有评论:
发表评论