关于uboot的ld文件的text 和顶层config.mk指定text地址

john_liqinghan 2014-12-08 11:36:55
uboot 1.1.6
config.mk文件连接选项
LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)

指定text段的地址是TEXT_BASE 0x33f80000

ld文件:
ENTRY(_start)
SECTIONS
{
. = 0x00000000;

. = ALIGN(4);
.text : //这里的text段
{
cpu/arm920t/start.o (.text)
*(.text)
}

. = ALIGN(4);
.rodata : { *(.rodata) }

. = ALIGN(4);
.data : { *(.data) }

. = ALIGN(4);
.got : { *(.got) }

. = .;
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;

. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) }
_end = .;
}

请问一下这两个text段同一不?如果是同一个,那是不是意味着
.text : //这里的text段
{
cpu/arm920t/start.o (.text)
*(.text)
}
这个起始地址(编译器指定的)位于0x33f8 0000处(RAM区),不是运行地址吧?
而对于ARM,上电后会往0x0000 0000处取指
对于start.s
[A]
.globl _start
_start: b reset
....
reset:
/*
* set the cpu to SVC32 mode
*/
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0

....
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
bl cpu_init_crit
#endif

....
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate: /* relocate U-Boot to RAM */
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq stack_setup
[B]
这个做个比较,[A] - [B]之间的代码都是在norFlash中执行的吧?
===================================================
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1

这个_start地址是多少呢?
...全文
255 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧