谢谢版主!
我可能没表述清, 我的意思是说
1.
可执行文件存在FLASH里的时候是不是一个接一个段的往下存, 就是说FLASH中间不会空掉一截内存不存东西的?这些可执行文件的内容存储的空间是不是由编译地址决定而不由链接脚本决定? 那么编译地址是自动定的还是要指定呢?
2.
对裸板程序, 链接脚本指定了运行地址 A (就像完全手册上6.2.1例子中的arm-linux-gld -Ttext 0x30000000... 这里的0x30000000是指定的运行地址)后,
还是需要手动在BOOTLOADER里编进运行地址 B (不知这个叫法是否正确? 就是6.2.1例子中你定义的SDRAM_BASE 0X30000000), 把可执行文件复制到SDRAM里的运行地址.
如果BOOTLOADER里写的运行地址 B 跟链接脚本运行地址 A 不同会怎么样? 还会正常运行吗? 我理解是可以的, 因为BOOTLOADER拷完后是不是有一句跳转指令直接跳到程序入口(main入口), 好像跟链接脚本规定的运行地址 A 没什么关系, 那么链接脚本指定的运行地址起什么作用了? 请指点.
3. 你在上面的解答中说BOOTLOADER不去复制其他可执行程序. 不太理解, 其它可执行程序不是也得在SDRAM上运行吗? 那是由谁来负责从FLASH上复制? 另外其它可执行程序是不是指各类函数(包括main函数)?
我看了完全手册第6章2节6.2.1的例子, head.o与leds.o都应该被编进sdram.bin了吧, 复制了前4K是不是应该把所有的可执行文件都复制过去了?
谢谢版主!
我可能没表述清, 我的意思是说
1.
可执行文件存在FLASH里的时候是不是一个接一个段的往下存, 就是说FLASH中间不会空掉一截内存不存东西的?这些可执行文件的内容存储的空间是不是由编译地址决定而不由链接脚本决定? 那么编译地址是自动定的还是要指定呢?
2.
对裸板程序, 链接脚本指定了运行地址 A (就像完全手册上6.2.1例子中的arm-linux-gld -Ttext 0x30000000... 这里的0x30000000是指定的运行地址)后,
还是需要手动在BOOTLOADER里编进运行地址 B (不知这个叫法是否正确? 就是6.2.1例子中你定义的SDRAM_BASE 0X30000000), 把可执行文件复制到SDRAM里的运行地址.
如果BOOTLOADER里写的运行地址 B 跟链接脚本运行地址 A 不同会怎么样? 还会正常运行吗? 我理解是可以的, 因为BOOTLOADER拷完后是不是有一句跳转指令直接跳到程序入口(main入口), 好像跟链接脚本规定的运行地址 A 没什么关系, 那么链接脚本指定的运行地址起什么作用了? 请指点.
3. 你在上面的解答中说BOOTLOADER不去复制其他可执行程序. 不太理解, 其它可执行程序不是也得在SDRAM上运行吗? 那是由谁来负责从FLASH上复制? 另外其它可执行程序是不是指各类函数(包括main函数)?
我看了完全手册第6章2节6.2.1的例子, head.o与leds.o都应该被编进sdram.bin了吧, 复制了前4K是不是应该把所有的可执行文件都复制过去了?
举报