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_SYS_TEXT_BASE 恢复为0x33fc0000

#define CONFIG_SYS_TEXT_BASE 0x33FC0000

修改、编译、烧录后运行是可以的。这就很奇怪了,为什么讲u-boot.bin烧录到Norflash上为什么不能运行呢?

原来是前面定义了CONFIG_SKIP_LOWLEVEL_INIT宏,跳过了cpu_init_crit,在arch/arm/cpu/arm920t/start.S 文件中如下部分,注释说明仅仅是在reboot是才会进行sys-critical初始化,当从RAM中启动时,不进行sys-critical初始化。

    /*
     * we do sys-critical inits only at reboot,
     * not when booting from ram!
     */
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
    bl  cpu_init_crit
#endif

所以,这里我们将tq2440.h文件中CONFIG_SKIP_LOWLEVEL_INIT宏注释掉。问题来了我们注释掉这个宏之后,编译出现了这样的问题:

arm-linux-ld.bfd:u-boot.lds:1: ignoring invalid character `#‘ in expression
arm-linux-ld.bfd:u-boot.lds:1: syntax error
make: *** [u-boot] 错误 1

找到原因是上面一条宏影响的结果:

#define CONFIG_BOARD_EARLY_INIT_F
//#define CONFIG_SKIP_LOWLEVEL_INIT

正常的宏定义都是

#define xxx 1

我们可以删除这个宏也可以这样注释:

#define CONFIG_BOARD_EARLY_INIT_F
/* #define CONFIG_SKIP_LOWLEVEL_INIT */

还有不要忘了:

#define CONFIG_SYS_TEXT_BASE 0

修改一下SDRAM的刷新频率,在文件:board/samsung/tq2440/lowlevel_init.S中修改REFCNT的值:

#define REFCNT          0x4f4

S3C2440手册知,计算公式:Refresh period = (2^11-refresh_count+1)/HCLK

SDRAM手册知:Refresh period =8192/64ms

下面start.S设置FCLK为405MHZ,分频系数 FCLK:HCLK:PCLK = 1:4:8 ,HCLK=100MHZ

于是编译,用J-Flash ARM烧录到Norflash上,记得烧录完将软件J-Flash ARM软件断开连接。复位开发板既可以实现从Norflash启动了。

明天继续!

时间: 2024-08-02 02:43:00

u-boot-2014.10移植第16天----Nor 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移植第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 i

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移植第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移植第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移植第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移植第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移植第21天----添加nand flash命令支持(三)

硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 虽说nand flash读写操作是可以了,但是我使用nand markbad命令将一个块标记为坏块时,再用nand scrub命令恢复出厂设置时,却出现了下面的错误: nand0: MTD Erase failure: -5 说明我们的nand flash移植是不完全正确的. 下面查找原因 在文件drivers/mtd/n

u-boot-2014.10移植第14天----在SDRAM中运行

昨天遇到编译错误,我们从错误提示中寻找解决方法: 信息1:CHK     include/config.h /* Automatically generated - do not edit */ #define CONFIG_BOARDDIR board/samsung/tq2440 #include <config_defaults.h> #include <configs/tq2440.h> #include <asm/config.h> #include <