u-boot-2014.10移植第24天----nand flash启动(二)

硬件平台:tq2440

开发环境:Ubuntu-3.11

u-boot版本:2014.10

本文允许转载,请注明出处:http://blog.csdn.net/fulinus

nand flash启动

比较新的u-boot版本包括u-boot-2014版本的都是用重定向的机制,而且用到了代码位置无关的技术,在u-boot连接时使用了-pie选项:

-pie :

Produce a position independent executable on targets which support it. For predictable results,
you must also specify the same set of options that were used to generate code (-fpie, -fPIE, or model
suboptions) when you specify this option.
"产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意
位置,都可以正确的执行。"

u-boot是可以在Nor flash中运行的,u-boot.bin的起始位置在Norflash的0地址处,当MO[1:0] = 01、10时,系统上电后从Nor flash启动,从0地址处开始运行。并将u-boot重定向到SDRAM中运行。但是Nand flash是不能像Nor flash那样可以当做RAM操作,因为nand flash是地址和数据总线复用的。好在s3c2440从nand flash启动时会从nand flash读4Kbytes的内容到s3c2440芯片内部自带的DRAM中,如果在nand flash的前4Kbytes存储空间放上一段可以执行的代码,其功能就是将nand flash中u-boot拷贝到SDRAM中,再将使用重定向的方法,跳转到SDRAM中去运行u-boot即可。

可惜的是2440中跑的u-boot并不支持从Nand flash启动。因此,我们需要在u-boot的前4K代码中加入操作nand flash的代码,然后重定向。

时间: 2024-10-08 23:35:06

u-boot-2014.10移植第24天----nand flash启动(二)的相关文章

u-boot-2014.10移植第25天----nand flash启动(三)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 在实现u-boot从nand flash启动之前,我们将前面asm_led程序放在nand flash第一个块的前4Kbit之中,因为asm_led没有系统初始化功能,所以还需要将bootstrap程序,放在nand flash的0地址处.bootstrap初始化完2440后,跳转到asm_led程序去执行.这对于掌握从n

u-boot-2014.10移植第26天----nand flash启动(四)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus u-boot-2014不管你是从Nor flash还是Nand flash启动,它都会根据SDRAM的空间计算u-boot被重定向的位置,由于Nor flash可以像SDRAM那样操作.代码可以直接在Nor flash中运行,所以对于它而言重定向容易实现.但是Nand flash不能直接像SDRAM那样操作,那么,要实现从

u-boot-2014.10移植第23天----nand flash启动(一)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 在Nand flash中保存环境变量 u-boot中的环境变量可以通过pri命令可以查看,可以通过set(setenv)命令设置一个参数,设置之后的参数仅仅是保存在SDRAM中,掉电后丢失, 使用save命令可以保存参数到Nor flash或Nand flash中去,但是u-boot默认是保存到Nor flash中去,下面

u-boot-2014.10移植第29天----nand flash的SPL启动(一)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 前面在移植nand flash启动时做了很多探索性的工作,但是后来发现在relocate.S文件中调用的函数中有调用大部分的库函数,牵扯到的文件较多,很难将它们一一包含到前面4K空间中去.正在想其他方法时,突然意识到SPL功能.我初步了解了一下SPL的功能,简而言之是一个将u-boot从nand flash拷贝到SDRAM

u-boot-2014.10移植第30天----nand flash的SPL启动(二)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 在保存环境变量时,再次启动时错误,原来是环境参数保存的位置翻盖了u-boot,修改如下: #if NONE_FLAG #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000) #define CONFIG_ENV_IS_IN_FLASH #define CONFI

u-boot-2014.10移植第16天----Nor flash启动

第15天时将u-boot.bin文件烧录到Norflash上没有正常启动,考虑到tq2440.h文件中的CONFIG_SYS_TEXT_BASE 值时0x33FC0000,我们将其修改为0,毕竟这个是绝对地址. #define CONFIG_SYS_TEXT_BASE 0 修改.编译.烧录后运行: 结果还是不能运行,这是什么原因呢? 将bootstrap.bin文件重新烧录到Norflash中,将u-boot.bin烧录到SDRAM的0x33fc0000位置,运行也不成功. 将CONFIG_SY

u-boot-2014.10移植第15天----nor flash操作

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 去除nor flash写保护 在已经运行起来的u-boot命令行去除nor flash写保护: TQ2440 # flinfo Bank # 1: EON EN29LV160AB flash (16 x 16) Size: 2 MB in 35 Sectors AMD Legacy command set, Manufac

u-boot-2014.10移植第2天----熟悉u-boot(二)

推荐阅读: 嵌入式系统 Boot Loader 技术内幕 http://www.ibm.com/developerworks/cn/linux/l-btloader/ 阅读并实际操作mini2440之U-boot移植详细手册.pdf文档中的内容.

u-boot-2014.10移植第19天----添加nand flash命令支持(一)

今天继续移植nand flash,对于很多情况而言,u-boot从nand flash启动是一个至关重要的功能,毕竟NOR flash成本太高,不是所有开发板都会添加NOR flash. u-boot中的SMDK2410模板是没有支持从nand flash启动的功能的,但是却有支持操作nand_flash的操作命令,2410和2440在nand flash支持上的区别有: 1.2410仅支持小块nandflash,2440则同时支持大块nandflash:2.为支持大块nandflash,244