This is the mail archive of the
ecos-devel@sources.redhat.com
mailing list for the eCos project.
redboot[RAM] crashes
- From: Martin Laabs <s8606710 at rcs dot urz dot tu-dresden dot de>
- To: ecos-devel at sources dot redhat dot com
- Date: Mon, 12 Jul 2004 13:54:04 +0200
- Subject: redboot[RAM] crashes
Hello,
I played around with my RAM redboot for an ixp425 board with
a different memory map as the ixpd.
I compilied the redboot for the adress 0x10120000. But I found out
that I have to load the .bin file not to this adress but to
0x10140000 (this is where the .text segment starts). So I think the
.fixed_vectors segment is not copied to the .bin file.
I also found out that the serial console of my board is connected
to the UART2 and not UART1. So now I'm able to start the redboot in
the ram mode and it is able to print information.
But if I start the redboot ram I get +$T0a0f:0ffff094;0d:101790d0;#24
Now I'd like to know where redboot is crashed. So I have connected
gdb to the console and tried a backtrace:
#0 0x0ffff094 in ?? ()
#1 0x101790dc in __startup_stack_base ()
If I understand the function __startup_stack_base right it fills
the memory ,where the symbol __startup_stack_base is located,
with zero 512 times. (or
CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE times)
Objdump tells me that _startup_stack_base is
at 0x101781a0 and therefore well in the allowed ram region.
The next instructions are located in the hal_platform_extras.h
And here I found the mmu table. Of cause it is wrong and has to
be altered. But my knowledge about the arm assembler is not
sufficient to understand this instructions:
mmu_table:
// This page table sets up the preferred mapping:
//
// Virtual Address Physical Address XCB Size (MB) Description
// --------------- ---------------- --- --------- -----------
// 0x00000000 0x00000000 010 256 SDRAM (cached)
// 0x10000000 0x10000000 010 256 SDRAM (alias)
// 0x20000000 0x00000000 000 256 SDRAM (uncached)
// 0x48000000 0x48000000 000 64 PCI Data
[...]
// 256MB SDRAM
.set __base,0x000
.rept 0x100 - 0x000
FL_SECTION_ENTRY __base,0,3,0,0,1,0
.set __base,__base+1
.endr
// 256MB SDRAM (alias)
.rept 0x200 - 0x100
FL_SECTION_ENTRY __base,0,3,0,0,1,0
.set __base,__base+1
.endr
// 256MB SDRAM (uncached)
.set __base,0x000
.rept 0x300 - 0x200
FL_SECTION_ENTRY __base,0,3,0,0,0,0
.set __base,__base+1
.endr
So could you give me a hint how this stuff works, especially what
FL_SECTION_ENTRY is used for and why the __base symbol is set to
zero again and again. (And is __base+1 a new symbol or just the
arithmetic addition with 1)
Thank you
Martin Laabs