打印
[S3C2440]

2440裸奔程序,下载到nand,在SDRAM中运行有关的疑问

[复制链接]
2013|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 wzd5230 于 2015-1-6 23:32 编辑

mini2440,下载使用的是友善之臂提供的minitools配合superboot进行下载,程序下载到nandflash中。

工作过程是代码下载到nandflash,启动的时候选择nandflash启动,硬件将nandflash中前4k程序复制到内部SRAM中并运行,此时SRAM中的程序将nandflash中前4K字节复制到外部的SDRAM中,并跳转到SDRAM中运行,运行正常的话,开发板上的4个led灯将会被点亮。

测试一:
在makefile中我将-Ttext 设置为0x30000000,minitools中RAM  address也设置为0x30000000,将程序下载到nandflash中,将开发板断电,并选择从nandflash启动,可是程序就是没有运行,即led灯没有被点亮。
makefile和minitools的设置如下
sdram.bin : head.S  leds.c
        arm-linux-gcc  -c -o head.o head.S
        arm-linux-gcc -c -o leds.o leds.c
        arm-linux-ld -Ttext 0x30000000 head.o leds.o -o sdram_elf
        arm-linux-objcopy -O binary -S sdram_elf sdram.bin
        arm-linux-objdump -D -m arm  sdram_elf > sdram.dis
clean:
        rm -f   sdram.dis sdram.bin sdram_elf *.o


测试二:
将makefile中的-Ttext和minitools中的RAM  address设置为0x31f00000,下载后就可以正常运行,即led灯被点亮。
makefile和minitools的设置如下
sdram.bin : head.S  leds.c
        arm-linux-gcc  -c -o head.o head.S
        arm-linux-gcc -c -o leds.o leds.c
        arm-linux-ld -Ttext 0x31f00000 head.o leds.o -o sdram_elf
        arm-linux-objcopy -O binary -S sdram_elf sdram.bin
        arm-linux-objdump -D -m arm  sdram_elf > sdram.dis
clean:
        rm -f   sdram.dis sdram.bin sdram_elf *.o

按照道理说,如果nandflash中地址0开始的程序就是对应编写的代码,那么设置成0x30000000的时候是肯定可以运行的。我有测试过将makefile中的-Ttext和minitools中的RAM Address设置成其他参数,比如0x31000000,此时也是可以正常运行的。

我想知道:为什么这个地方需要将makefile和minitools中对应的参数设置为一个非0x30000000值才可以正常运行?从0x30000000到对应设置的参数这段空间里面到底拿来干什么了?为什么设置成0x30000000这个参数不行。

希望懂的人赐教。

相关帖子

沙发
wzd5230|  楼主 | 2015-1-6 23:50 | 只看该作者
可以看到下载裸机程序的时候,需要选择两个bin文件,一个是裸机程序的bin文件,另一个是superboot的bin文件,估计可能是这个superboot也要占用一点空间,只是猜测,具体原因是什么也不知道,希望懂的人说下。

使用特权

评论回复
板凳
enterwar| | 2015-12-4 14:46 | 只看该作者
感觉这个adress地址很诡异 但是却没有太多资料对这方面有讲解 我的6410 下载到0x50000000 nandflash读id读不出地址 下载到0x51f00000 能运行一个跟程序有点关系的效果

使用特权

评论回复
地板
阿南| | 2015-12-5 09:29 | 只看该作者
需要确认下载地址的映射情况

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

46

帖子

1

粉丝