如何在U-boot中分配给__image_copy_start的值

时间:2016-02-09 07:52:28

标签: arm u-boot gcc4.7

根据我的理解,下面的命令是将“__image_copy_start”的值加载到r1寄存器。

    ldr     r1, =__image_copy_start

我想了解如何将值分配给“__image_copy_start”。我找不到任何赋值给“__image_copy_start”的赋值语句,但我可以在“arch / arc / lib / sections.c”文件中看到以下声明。

char __image_copy_start[0] __attribute__((section(".__image_copy_start")));
char __image_copy_end[0] __attribute__((section(".__image_copy_end")));

似乎__attribute__((section("")))用于将变量放在特殊部分中(在上面的语句中,“__ image_copy_start [0]”将放在“.__ image_copy_start”部分)。你能帮助理解以下内容吗?

  1. 如何为“__image_copy_start [0]”分配值?
  2. 为什么“__image_copy_start”声明为数组“char __image_copy_start [0]”为什么不“char __image_copy_start”?

1 个答案:

答案 0 :(得分:0)

__image_copy_start稍后由链接器分配。

值来自链接描述文件。编译器只是将变量留空,只是将符号表中的引用保留给链接器以完成作业。当链接时,链接器在那里放置一个地址,该地址对应于" __image_copy_start"部分。 A"部分"在链接器的上下文中只是意味着一些地址空间。它可以修复地址范围或按顺序放置。

C代码中的技巧只是告诉编译器&链接器创建一个指针,该指针将被初始化,指向本节的开头。