[U-Boot-Users] Debugging U-Boot on arm920t using BDI2000

Ioritz Irazustabarrena Murgiondo ioritz.imasd at ikor.es
Tue Oct 11 11:00:11 CEST 2005


First Question:

If I have understood everything correctly, u-boot ALWAYS relocates itselfs to RAM.

This is the code in Start.S in cpu/arm920t that makes the relocation.

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 debugaitor

This is how I get the values that _start and _TEXT_BASE take:

arm-unknown-linux-gnu-gdb u-boot
GNU gdb 6.2.1
Copyright 2004 Free Software Foundation, Inc.
...
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-unknown-linux-gnu"...
(gdb) info address _start
Symbol "_start" is at 0x8f00000 in a file compiled without debugging.
(gdb) info address _TEXT_BASE
Symbol "_TEXT_BASE" is at 0x8f00040 in a file compiled without debugging.
(gdb) x/1xw 0x8f00040
0x8f00040 <_TEXT_BASE>: 0x08f00000
(gdb)                      

Both addresses TEXT_BASE & _start are SDRAM. According to this, this code will never relocate. Is this correct ?.

u-boot$ arm-unknown-linux-gnu-objdump -h  u-boot
u-boot:     file format elf32-littlearm
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000138a4  08f00000  08f00000  00008000  2**5

What I conclude is that the binary is prepared to be loaded and executed only from SDRAM. In fact, I´ve loaded u-boot in sdram (0x8f00000) using bdi2000, I have defined CONFIG_SKIP_LOWLEVEL_INIT and CONFIG_SKIP_RELOCATE_UBOOT and I have been able to debug u-boot using gdb. I know this is not the right way to debug u-boot.

In conclusion, there are two things I don't understand:

 * I think that LMA address of text section should be Flash 0x10000000. 
 Because the code must be loaded in non-volatile memory. VMA of course,  should be SDRAM 0x8f00000.

 * I think that the code that
makes the relocation must be loaded and executed from flash.
VMA 0x10000000 and LMA 0x10000000. 

Second Question.

You have told me that:

> But for that you have to tell the debugger  that  the code is  running    > from  an  address  that is different from the link address). 

This is what I´ve done:

iim at viggen:~/.../u-boot-1.1.3$ arm-unknown-linux-gnu-gdb u-boot GNU gdb 6.3 ...
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-unknown-linux-gnu"...
(gdb) symbol-file
Discard symbol table from `/.../u-boot-1.1.3/u-boot'? (y or n) y No symbol file now.
(gdb) add-symbol-file u-boot 0x0000
add symbol table from file "u-boot" at
        .text_addr = 0x0
(y or n) y
Reading symbols from /.../u-boot-1.1.3/u-boot...done.
(gdb) b _start_armboot

Breakpoint 1 at 0x8f00394: file /.../u-boot-1.1.3/cpu/arm920t/start.S, line 435.
(gdb) target remote 192.168.1.5:2001
Remote debugging using 192.168.1.5:2001
0x08f001c0 in ?? ()
(gdb) c
Continuing.

But the breakpoint is still in sdram (0x8f00394), and the program doesn´t stop in the breakpoint.


Regards.

Ioritz.





More information about the U-Boot mailing list