DM368 nand flash 启动过程揭秘
转载:http://blog.csdn.net/maopig/article/details/7029930 ? 转载文章讲的有点乱。以下是自己根据所看到的资料总结的。 以德州仪器的多媒体处理芯片TMS320DM368为例,介绍它的NAND?Flash启动原理以及实现。 ? ? 1.?RBL阶段 在DM368芯片上有一块ROM的区域(地址从0x00008000到?0x0000?BFFF),这块区域就是存放RBL代码的地方。首先,保存在片内ROM的RBL程序开始运行,RBL程序根据BTSEL[0~3]引脚的电位来判断相应的启动方式。ROM上的代码是在芯片出厂前就烧写好的,用户是不能修改的。在DM368上,除了AEMIF?(Nor?Flash)启动,其他的启动方式都需要运行RBL。如果发现BTSEL的状态是000,就会得知配置的是NAND?Flash启动,NAND启动模式开始执行。注意:为了保证NAND启动正常运行,需要保证在复位的时候DEEPSLEEPZ/GIO0引脚拉高。RBL程序便从NAND上读取UBL(user?boot?loader)并且复制到ARM的内存RAM中,并转到执行UBL代码。 2.?UBL阶段 UBL运行在ARM的内存里,主要完成系统时钟、DDR频率的初始化。然后UBL从NAND?Flash里读取U-Boot的内容并且复制到DDR里运行。 3.?U-Boot阶段 DDR里面运行的U-Boot又从NAND?Flash里面读取Linux内核代码,并且复制到DDR上,然后启动内核。 U-Boot代码中首先设置最基本的系统硬件环境,包括系统PLL及DDR2的初始化、PSC的配置及使能UART0、AMEIF等硬件模块。 配置系统的内存,包括NAND?Flash和DDR2。 在Flash中加载内核到指定的存储地址,并在Flash中加载RAM?Disk或通过NFS加载文件系统。 初始化传递到内核的引导参数(EMAC地址、串口、控制台、视频格式等)。 获得ARM?Linux基类型值。 设置Kernel?tagged?list。 用初始值设置ARM的寄存器。 调用内核。 4.?Linux内核启动阶段 Linux内核从U-Boot中得到参数并初始化相关硬件。 内核中的head.s代码开始运行,对压缩的内核进行解压。 start_kernel()运行。对内核中的MMU等进行初始化。 Linux的第一个进程init()?运行,该进程根据系统的配置文件初始化系统。 shell启动,用户开始进入登录系统。 ? ? ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |