411592004 发表于 2012-11-30 10:02:47

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

这个问题困扰了我这个菜鸟很久.... 望高手指点迷津!!!
具体操作流程:
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 static/image/common/back.gif
在cpu/arm920t/start.S文件中有这样一句话,大概在230多行
你试一试注释掉红色字体部分,这个宏CONFIG_SKI ...

嗯,谢谢,有待一试,

411592004 发表于 2012-11-30 12:58:20

dunken 发表于 2012-11-30 11:33 static/image/common/back.gif
在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 http://www.armbbs.net/static/image/common/back.gif
你确定你的uboot的链接地址是0x33a80000?找你说的应该是没有拷贝到uboot链接地址。

我编译后查看了u-boot.map文件,链接地址正确,我用loadx 0x33a80000命令后,我又用md 0x33a80000查看内存数据,也正确,很郁闷的事情,苦思了好几天,一直没有解决。
同时我也仔细观看了内存33a80000出的bin数据:
0x33A80000:   EA000012 E59FF014 E59FF014 E59FF014
0x33A80010:   E59FF014E59FF014 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 static/image/common/back.gif
我编译后查看了u-boot.map文件,链接地址正确,我用loadx 0x33a80000命令后,我又用md 0x33a80000查看内 ...
亲,你可以试一下在start.S中添加点亮或关闭led的代码,然后根据led灯的亮灭看运行情况。

411592004 发表于 2012-12-1 00:21:48

亚瑟王 发表于 2012-11-30 17:33 static/image/common/back.gif
亲,你可以试一下在start.S中添加点亮或关闭led的代码,然后根据led灯的亮灭看运行情况。

亲,和我想到一块去了,问题解决了,嘿嘿

411592004 发表于 2012-12-1 00:24:28

问题解决,结帖。
谢谢各位老前辈。

亚瑟王 发表于 2012-12-3 09:36:23

411592004 发表于 2012-12-1 00:24 static/image/common/back.gif
问题解决,结帖。
谢谢各位老前辈。

亲,把解决方法贴出来吧。方便其他人。

411592004 发表于 2012-12-3 11:19:16

亚瑟王 发表于 2012-12-3 09:36 static/image/common/back.gif
亲,把解决方法贴出来吧。方便其他人。

屏蔽掉start.s中:
          /* FCLK:HCLK:PCLK = 1:2:4 */
        /* default FCLK is 120 MHz ! */
        ldr        r0, =CLKDIVN
        mov        r1, #3
        str        r1,
初始化cpu时钟分频这部分代码。

亚瑟王 发表于 2012-12-3 12:13:22

411592004 发表于 2012-12-3 11:19 static/image/common/back.gif
屏蔽掉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 static/image/common/back.gif
哦,是不是你的这个地方的分频值和已经烧写好了的u-boot的不同啊?如果不同是不行的。
亲,下次记得将帖 ...

:victory: 嘿嘿,ok,初来乍道,不懂规矩,

devdgxll 发表于 2013-2-9 15:29:17

留下个脚印
页: [1] 2
查看完整版本: 菜鸟贴->uboot加载到内存不运行