本帖最后由 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这个参数不行。
希望懂的人赐教。
|