加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:26:41 所属栏目:百科 来源:网络整理
导读:第15天时将u-boot.bin文件烧录到Norflash上没有正常启动,考虑到tq2440.h文件中的CONFIG_SYS_TEXT_BASE 值时0x33FC0000,我们将其修改为0,毕竟这个是绝对地址。 #define CONFIG_SYS_TEXT_BASE 0 修改、编译、烧录后运行: 结果还是不能运行,这是什么原因呢

第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启动了。

明天继续!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读