在构建基于gcc的裸机项目时,需要在启动过程中关注.data和.bss部分的初始化。如何知道.data部分需要从哪里获取init数据? (gcc链接器)
.bss部分非常简单,因为我只是将整个部分填充为0. 但.data部分中的变量需要在ROM中启动其初始化数据并在启动过程中进行复制。
如何知道可以找到具有初始化值的数据?
举个例子吧。
比方说,我创建main.c中两个全局变量
unsigned int my_global_variable_one = 1;
unsigned int my_global_variable_two = 2;
那么我可以用objdump的在目标文件中,他们会在哪个部门, 看到,但我无法找到任何东西在objdump out中放置init数据的位置。
$ arm-none-eabi-objdump --syms main.o | grep my_global_variable
00000000 g O .data 00000004 my_global_variable_one
00000004 g O .data 00000004 my_global_variable_two
然后我可以看看整个系统的结果小精灵,在这种情况下main.elf。
$ arm-none-eabi-nm -n main.elf | grep my_global_variable
20000000 D my_global_variable_one
20000004 D my_global_variable_two
我在哪里可以找到他们在哪里,我可以复制数据? 我需要将什么放入链接器脚本中?
它应该是像.text或.rodata这样的东西,但我怎么知道?
如何检查my_global_variable_one的init数据在哪里?
我可以找到这个数据与像readelf或objdump这样的任何binutils命令的位置吗?
/感谢
这是对STM32(皮质M3)MCU,和gcc的Codebench完成版本被使用。
嗯,我注意到,数据.text段后追加的,但你帮我得到足够接近:) – Johan 2012-02-15 19:07:00