本帖最后由 zhangmangui 于 2014-12-7 20:59 编辑
TI davinci DM6467通过串口0将UBL和u-boot写入NAND flash
TI的davinci系列一般支持好几种启动模式,如下图TMS320DM6467的datasheet可以查到所有的BOOTMODE
LVS301和LW9226的开发板上有一个选择bootmode的拨码开关
下面以LVS301为例,讲解如何通过通过串口0将UBL和u-boot写入NAND flash:
1. 断电,调整拨码开关SW501,设置为UART0 Boot (LVS301默认的boot mode是SPI Boot);
2. 链接串口CN509;
3. 从网站www.sourceforge.net下载flash utility软件(该软件在UART0 Boot mode烧写NAND flash);
4. 打开命令行工具,进入目录DM646x_FlashAndBootUtils_1_50DM646x_FlashAndBootUtils_1_50DM646xGNU;
5. 运行sfh_DM646x.exe;
windows
sfh_DM646x -nandflash -p COM1 ubl/ubl_DM646x_nand.bin uboot.bin
linux
mono sft_DM646x -nandflash -p /dev/ttyUSB0 ubl/ubl_DM646x_nand.bin uboot.bin
6. 上电,立即进入下载模式,开始烧写NAND flash;
7. 下载完成之后,断电,重新设置拨码开关SW501为NAND flash Boot;
8. 上电重启之后,LVS301就会从NAND flash启动UBL,然后加载u-boot;
资料来自收集 供大家学习使用
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
在移植U-Boot之前,首先需要了解DM6467的启动流程,知道U-Boot在系统启动过程中的位置及作用。DM6467标准的启动过程如图 1‑1所示,主要包括四个步骤:RBL(ROM BootLoader)→UBL(User Boot Loader)→U-Boot →Linux内核。
图1‑1 DM6467启动流程
系统上电时,首先运行的是RBL。RBL是固化在片内ROM的,所以用户不能修改,并且功能比较弱。RBL根据开发板上拨码开关的值来确定下一阶段 的启动方式,它支持NAND、UART和HPI三种启动方式。我们开发板上使用的是NAND启动,所以RBL负责将NAND Flash中的UBL复制到片内RAM,然后转到UBL执行。当RBL启动之后,其实就可以直接运行应用程序了,但是如果要进行嵌入式系统开发,也即要移 植嵌入式操作系统,那么就需要下一阶段的bootloader,这里使用的是UBL。
UBL又称为2nd stagebootloader(第二阶段的bootloader),它主要负责初始化串口、PLL和DDR2 SDRAM,然后根据用户设定来选择下一阶段启动方式。UBL支持NOR、NAND、PCI和UART启动模式,我们选用的是NAND启动,所以UBL负 责将NAND中的U-Boot复制到DDR2中,然后转到U-Boot执行。由于RBL没有初始化DDR2,UBL是复制到片内RAM执行的,而 DM6467的片内RAM只有32K,但U-Boot的bin文件一般都是100K以上,所以系统需要使用第二阶段的UBL来初始化DDR2,然后将U- Boot复制到DDR2上运行。
TI官方提供了标准的UBL源文件和bin文件,兼容性很强,可以直接用于我们的开发板,不过,也可以根据我们的实际需要在其基础上进行一定修改。
第三阶段的U-Boot主要用于建立内存映射以及堆栈、初始化主要功能模块和复制Linux内核到DDR2,然后传递一些参数给内核,最后转到内核 运行。由于这部分与实际的开发板联系紧密,而不同开发板总有些差别,所以需要根据实际情况来修改标准的U-Boot源文件以适应硬件参数。
2 U-Boot简介U-Boot(UniversalBootloader)是一种广泛用于嵌入式设备的开源bootloader。U-Boot支持许多系统架构,包 括PPC、ARM、MIPS、AVR32、X86、68K、Nios和MicroBlaze等。U-Boot也支持各种类型的文件系统,包括 Cramfs、ext2、FAT、FDOS、JFFS2、RegisFS和UBIFS等。U-Boot还支持不同类型操作系统,包括NetBSD,、 VxWorks、QNX、RTEMS、ARTOS、LynxOS和Linux等。
U-Boot源码可以在其官网http://www.denx.de/wiki/U-Boot/下载,U-Boot版本更新比较快,在U- Boot-2009.08版本及之前的版本中不支持DM646x系列SOC,只有对TI的DaVinci系列开发板的通用支持,在U-Boot- 2009.08之后的所有版本都有专门的对DM646x系列SOC的支持,使用这些版本的U-Boot进行移植时可以减少一定工作量。在本文的以下部分, 所有的分析及移植过程都是基于U-Boot-2009.08。
2.1 U-Boot源码结构U-Boot源码解压后所得的目录结构见图 2‑1。从图中可以看到,文件和文件夹很多,并且有些文件夹下面还有很多子文件夹或者有很多文件,但是,由于U-Boot是支持不同架构、不同文件系统、 不同开发板,而我们自己的开发板是ARM926ejs核的CPU,移植Linux操作系统,所以U-Boot源码中的大部分是与我们移植任务不相关的。从 后面也可以看到,我们移植时对源码修改的地方非常少,并且只局限于几个文件。
图2‑1 U-Boot目录结构
为了使U-Boot更简洁,可以删除顶层目录中的doc、lib_avr32、lib_blackfin、lib_generic、 lib_i386、lib_m68k、lib_microblaze、lib_mips、lib_nios、lib_nios2、lib_ppc、 lib_sh、lib_sparc、nand_spl、onenand_spl这些文件夹,还有board/中除davinci之外的所有文件夹、cpu /中除arm926ejs之外的所有文件夹。当然,其实还有很多文件与文件夹是与我们开发板无关的,不过比较琐碎,就不用再一一删除了。
对于U-Boot源码顶层目录中各主要文件夹的内容和功能,表 2‑1给出了简单的介绍。另外,在顶层目录中还有一个很重要的文件Makefile,这是整个U-Boot编译时依据的规则,在移植时也可能需要修改。
表 2‑1 U-Boot顶层目录结构
文件夹名
包含内容
api
独立于硬件的一些API
board
与开发板相关的文件
common
独立于处理器结构的通用代码,如内存大小探测、U-Boot命令
cpu
与cpu相关的文件,每个子文件夹对应一种架构的cpu
disk
一些磁盘操作函数
drivers
通用的驱动程序
doc
参考文档
fs
U-Boot支持的文件系统
include
头文件及系统配置文件
lib_xxx
与具体cpu架构相关的库文件
net
网络功能相关
post
上电自检
tools
生成U-Boot的工具
一周热门 更多>