This is the mail archive of the ecos-devel@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]