天嵌 ARM开发社区

 找回密码
 注册
查看: 7705|回复: 18

菜鸟贴->uboot加载到内存不运行

[复制链接]
411592004 发表于 2012-11-30 10:02:47 | 显示全部楼层 |阅读模式
这个问题困扰了我这个菜鸟很久.... 望高手指点迷津!!!
具体操作流程:
1.首先把移植好的uboot烧写到norflash中(这里的uboot是天嵌的,加载地址为0x33c80000)。
2.编译自己移植的uboot1.1.16(加载地址为0x33a80000,并且在配置头文件中增加了CONFIG_SKIP_LOWLEVEL_INIT宏定义,即屏蔽cpu初始化内存初始化)。
3.然后板子上电,用loadx 0x33a80000命令将2)步骤中的uboot加载到内存中,然后go 0x33a80000,结果不运行,与预期的结果不一样。

4.首先是怀疑自己移植的uboot有问题,然后把2)步骤中的宏去掉后,再编译通过jlink烧写到norflash,上电,结果可以打印信息,自己移植的uboot没有问题,为什么加载到内存中不能运行呢?
5.自己移植的uboot装载到内存中后,用md 0x33a80000查看内存命令,发现与编译的uboot.bin一致,说明也没出现装载错误。

以上的问题,是我陷入了困境:dizzy:,望高手给菜鸟一点指点,:handshake谢过!
 楼主| 411592004 发表于 2012-11-30 10:05:27 | 显示全部楼层
自己顶一下。
dunken 发表于 2012-11-30 11:33:27 | 显示全部楼层
在cpu/arm920t/start.S文件中有这样一句话,大概在230多行
你试一试注释掉红色字体部分,这个宏CONFIG_SKIP_LOWLEVEL_INIT
还是别用吧,谁知道他会不会关闭其他的功能呢!
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
bl cpu_init_crit
#endif
 楼主| 411592004 发表于 2012-11-30 12:00:13 | 显示全部楼层
dunken 发表于 2012-11-30 11:33
在cpu/arm920t/start.S文件中有这样一句话,大概在230多行
你试一试注释掉红色字体部分,这个宏CONFIG_SKI ...

嗯,谢谢,有待一试,
 楼主| 411592004 发表于 2012-11-30 12:58:20 | 显示全部楼层
dunken 发表于 2012-11-30 11:33
在cpu/arm920t/start.S文件中有这样一句话,大概在230多行
你试一试注释掉红色字体部分,这个宏CONFIG_SKI ...

注释掉那里也不行,
Linux_Cult 发表于 2012-11-30 15:51:47 | 显示全部楼层
你确定你的uboot的链接地址是0x33a80000?找你说的应该是没有拷贝到uboot链接地址。
 楼主| 411592004 发表于 2012-11-30 16:20:15 | 显示全部楼层
本帖最后由 411592004 于 2012-11-30 16:43 编辑
Linux_Cult 发表于 2012-11-30 15:51
你确定你的uboot的链接地址是0x33a80000?找你说的应该是没有拷贝到uboot链接地址。


我编译后查看了u-boot.map文件,链接地址正确,我用loadx 0x33a80000命令后,我又用md 0x33a80000查看内存数据,也正确,很郁闷的事情,苦思了好几天,一直没有解决。
同时我也仔细观看了内存33a80000出的bin数据:
0x33A80000:   EA000012 E59FF014 E59FF014 E59FF014
0x33A80010:   E59FF014  E59FF014 E59FF014 E59FF014
0x33A80020:   33A80100 33A80160 33A801C0 33A80220
0x33A80030:   33A80280 33A802E0 33A80340 DEADBEEF
.........
上面是装载到内存中的代码,从33A80020开始,为uboot中start.s里面的7个CPU中断标号,最后一个DEADBEEF则对应的是数据对齐。
由内存中的代码来看,应该不是编译的链接地址错误,和装载地址错误,为什么go 0x33A80000,不运行呢?

亚瑟王 发表于 2012-11-30 17:33:57 | 显示全部楼层
411592004 发表于 2012-11-30 16:20
我编译后查看了u-boot.map文件,链接地址正确,我用loadx 0x33a80000命令后,我又用md 0x33a80000查看内 ...

亲,你可以试一下在start.S中添加点亮或关闭led的代码,然后根据led灯的亮灭看运行情况。
 楼主| 411592004 发表于 2012-12-1 00:21:48 | 显示全部楼层
亚瑟王 发表于 2012-11-30 17:33
亲,你可以试一下在start.S中添加点亮或关闭led的代码,然后根据led灯的亮灭看运行情况。

亲,和我想到一块去了,问题解决了,嘿嘿
 楼主| 411592004 发表于 2012-12-1 00:24:28 | 显示全部楼层
问题解决,结帖。
谢谢各位老前辈。
亚瑟王 发表于 2012-12-3 09:36:23 | 显示全部楼层
411592004 发表于 2012-12-1 00:24
问题解决,结帖。
谢谢各位老前辈。

亲,把解决方法贴出来吧。方便其他人。
 楼主| 411592004 发表于 2012-12-3 11:19:16 | 显示全部楼层
亚瑟王 发表于 2012-12-3 09:36
亲,把解决方法贴出来吧。方便其他人。

屏蔽掉start.s中:
          /* FCLK:HCLK:PCLK = 1:2:4 */
        /* default FCLK is 120 MHz ! */
        ldr        r0, =CLKDIVN
        mov        r1, #3
        str        r1, [r0]
初始化cpu时钟分频这部分代码。
亚瑟王 发表于 2012-12-3 12:13:22 | 显示全部楼层
411592004 发表于 2012-12-3 11:19
屏蔽掉start.s中:
          /* FCLK:HCLKCLK = 1:2:4 */
        /* default FCLK is 120 MHz ! */

哦,是不是你的这个地方的分频值和已经烧写好了的u-boot的不同啊?如果不同是不行的。
亲,下次记得将帖子类型改为“已解决”(在“分类”那个地方修改)。
 楼主| 411592004 发表于 2012-12-3 13:03:08 | 显示全部楼层
亚瑟王 发表于 2012-12-3 12:13
哦,是不是你的这个地方的分频值和已经烧写好了的u-boot的不同啊?如果不同是不行的。
亲,下次记得将帖 ...

:victory: 嘿嘿,ok,初来乍道,不懂规矩,
devdgxll 发表于 2013-2-9 15:29:17 | 显示全部楼层
留下个脚印
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-18 09:18 , Processed in 1.062493 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表