[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to build flash image for MPC860 ?



Hi,
I have problem building flash image for Motorola FADS860 
evaluation board.
The BSP is derived from eth_comm, I modified start.S to
add some initialization code for FADS860 board and relocated it
at section .entry which load address start at flash reset vector.
I also modified linkcmds which listed below to locate all
sections in dram except the section .entry. In the end of start.S,
it will copy the .text, .data and .vectors from flash to dram.
But when I finished building samples based on this BSP and program
the image to flash memory using mpc8bug software, I find only the
section .entry is programmed to flash, all other sections are 
loaded to dram instead of flash !
/*--------------------------------------------------------------*/
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
              "elf32-powerpc")
OUTPUT_ARCH(powerpc)
SEARCH_DIR(/usr/local/powerpc-rtems/lib);

ENTRY(start)

MEMORY
 {
 ram   : org = 0x00000000, l = 4M
 flash : org = 0x02800000, l = 2M
 dpram : org = 0xFF000000, l = 16K
 }

SECTIONS
{
 .entry :
 {
   *(.entry)
   . = ALIGN(0x10);
   copy.src = .;
 } > flash

 /* IMPORTANT: section ".vectors" must be the first in RAM ! */
 .vectors :          AT (copy.src)
 {
   copy.dest = .;
   *(.vectors)
   . = ALIGN(0x10);
   copy.tmptop.vec = .;
 } > ram

 .text :             AT (copy.tmptop.vec - copy.dest + copy.src)
   {
   text.start = .;
   *(.entry2)
   *(.text)
   *(.rodata)
   *(.gnu.linkonce.r*)
   *(.rodata1)
   *(.gnu.linkonce.t.*)
   *(.descriptors)
   /* .gnu.warning sections are handled specially by elf32.em.  */
   *(.gnu.warning)
   *(rom_ver)
   etext = ALIGN(0x10);
   _etext = .;

   __CTOR_LIST__ = .;
   LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
   *(.ctors)
   LONG(0)
   __CTOR_END__ = .;

   __DTOR_LIST__ = .;
   LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
   *(.dtors)
   LONG(0)
   __DTOR_END__ = .;

   *(.lit)
   *(.shdata)
   *(.init)
   *(.fini)
   . = ALIGN(0x10);
   _endtext = .;
   text.end = .;
   copy.tmptop.txt = .;
 } > ram

 text.size = text.end - text.start;

 /* R/W Data */
 .data :             AT (copy.tmptop.txt - copy.dest + copy.src)
 {
   *(.data)
   *(.data1)
   *(.gnu.linkonce.d.*)
   PROVIDE (__SDATA_START__ = .);
   *(.sdata)
   . = ALIGN(0x10);
   copy.tmptop.dat = .;
 } > ram

 PROVIDE (__EXCEPT_START__ = .);
 .gcc_except_table : AT (copy.tmptop.dat - copy.dest + copy.src)
 {
   *(.gcc_except_table)
   . = ALIGN(0x10);
   copy.tmptop.exc = .;
 } > ram
 PROVIDE (__EXCEPT_END__ = .);

 __GOT_START__ = .;
 .got :              AT (copy.tmptop.exc - copy.dest + copy.src)
 {
   s.got = .;
   *(.got.plt) *(.got)
   . = ALIGN(0x10);
   copy.tmptop.got = .;
 } > ram
 __GOT_END__ = .;

 .got1 :             AT (copy.tmptop.got - copy.dest + copy.src)
 {
   *(.got1)
   . = ALIGN(0x10);
   copy.tmptop.gt1 = .;
 } > ram

 PROVIDE (__GOT2_START__ = .);
 PROVIDE (_GOT2_START_ = .);
 .got2 :             AT (copy.tmptop.gt1 - copy.dest + copy.src)
 {
   *(.got2)
   . = ALIGN(0x10);
   copy.tmptop.gt2 = .;
 } > ram
 PROVIDE (__GOT2_END__ = .);
 PROVIDE (_GOT2_END_ = .);

 PROVIDE (__FIXUP_START__ = .);
 PROVIDE (_FIXUP_START_ = .);
 .fixup :            AT (copy.tmptop.gt2 - copy.dest + copy.src)
 {
   *(.fixup)
   . = ALIGN(0x10);
   copy.tmptop.fix = .;
 } > ram
 PROVIDE (_FIXUP_END_ = .);
 PROVIDE (__FIXUP_END__ = .);

 PROVIDE (__SDATA2_START__ = .);
 .sdata2 :           AT (copy.tmptop.fix - copy.dest + copy.src)
 {
   *(.sdata2)
   . = ALIGN(0x10);
   copy.tmptop.sda = .;
 } > ram

 copy.size = copy.tmptop.sda - copy.dest;

 .sbss2 :
 {
   *(.sbss2)
 } > ram
 PROVIDE (__SBSS2_END__ = .);

 __SBSS_START__ = .;
 .bss :
 {
   bss.start = .;
   *(.bss) *(.sbss) *(COMMON)
   . = ALIGN(4);
   bss.end = .;
 } > ram
 __SBSS_END__ = .;

 bss.size = bss.end - bss.start;

 /* reserve 16KByte for stack... */
 stack.end = bss.end + 16K;
 PROVIDE(_end = stack.end);

 dpram : 
 {
          m860 = .;
          _m860 = .;
          . += (8 * 1024);
        } > dpram

 .line 0 : { *(.line) }
 .debug 0 : { *(.debug) }
 .debug_sfnames 0 : { *(.debug_sfnames) }
 .debug_srcinfo 0 : { *(.debug_srcinfo) }
 .debug_pubnames 0 : { *(.debug_pubnames) }
 .debug_aranges 0 : { *(.debug_aranges) }
 .debug_aregion 0 : { *(.debug_aregion) }
 .debug_macinfo 0 : { *(.debug_macinfo) }
 .stab 0 : { *(.stab) }
 .stabstr 0 : { *(.stabstr) }
/*-----------------------------------------------------------*/
It seems the "AT" command didn't work at all.
Can anybody tell me what's wrong with the precedure ?
How to build boot image for my board ?
(I'm using rtems-4.5.0-beta1c)

Thanks in advance !

Li HongSong

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rtems.rtems.org/pipermail/rtems-users/attachments/20000327/9cd03349/attachment.html