OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [ecos-2.0/] [doc/] [html/] [user-guide/] [modifying-the-memory-layout.html] - Rev 1765

Compare with Previous | Blame | View Log

<!-- Copyright (C) 2003 Red Hat, Inc.                                -->
<!-- This material may be distributed only subject to the terms      -->
<!-- and conditions set forth in the Open Publication License, v1.0  -->
<!-- or later (the latest version is presently available at          -->
<!-- http://www.opencontent.org/openpub/).                           -->
<!-- Distribution of the work or derivative of the work in any       -->
<!-- standard (paper) book form is prohibited unless prior           -->
<!-- permission is obtained from the copyright holder.               -->
<HTML
><HEAD
><TITLE
>Modifying the Memory Layout</TITLE
><meta name="MSSmartTagsPreventParsing" content="TRUE">
<META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="HOME"
TITLE="eCos User Guide"
HREF="ecos-user-guide.html"><LINK
REL="UP"
TITLE="Manual Configuration"
HREF="manual-configuration.html"><LINK
REL="PREVIOUS"
TITLE="Editing the Sources"
HREF="editing-the-sources.html"><LINK
REL="NEXT"
TITLE="Managing the Package Repository"
HREF="managing-package-repository.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>eCos User Guide</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="editing-the-sources.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>Chapter 28. Manual Configuration</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="managing-package-repository.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="MODIFYING-THE-MEMORY-LAYOUT">Modifying the Memory Layout</H1
><P
>Each <SPAN
CLASS="PRODUCTNAME"
>eCos</SPAN
> platform package is supplied with linker script
fragments which describe the location of memory regions on the evaluation
board and the location of memory sections within these regions.
The correct linker script fragment is selected and included in the
<SPAN
CLASS="PRODUCTNAME"
>eCos</SPAN
> linker script <TT
CLASS="FILENAME"
>target.ld</TT
> when
<SPAN
CLASS="PRODUCTNAME"
>eCos</SPAN
> is built.</P
><P
>It is not necessary to modify the default memory
layouts in order to start development with <SPAN
CLASS="PRODUCTNAME"
>eCos</SPAN
>. However, it will
be necessary to edit a linker script fragment when the memory map
of the evaluation board is changed. For example, if additional memory
is added, the linker must be notified that the new memory is available
for use. As a minimum, this would involve modifying the length of
the corresponding memory region. Where the available memory is non-contiguous,
it may be necessary to declare a new memory region and reassign
certain linker output sections to the new region.</P
><P
>Linker script fragments and memory layout header files should
be edited within the <SPAN
CLASS="PRODUCTNAME"
>eCos</SPAN
> install tree. They are
located at <TT
CLASS="FILENAME"
>include/pkgconf/mlt_*.*</TT
>.
Where multiple start-up types are in use, it will be necessary to
edit multiple linker script fragments and header files. The information
provided in the header file and the corresponding linker script
fragment must always match. A typical linker script fragment is
shown below:</P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN2992"><P
><B
>Example 28-1. <SPAN
CLASS="PRODUCTNAME"
>eCos</SPAN
> linker script fragment</B
></P
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>MEMORY
{
 rom : ORIGIN = 0x40000000, LENGTH = 0x80000
 ram : ORIGIN = 0x48000000, LENGTH = 0x200000
}
 
SECTIONS
{
 SECTIONS_BEGIN
 SECTION_rom_vectors (rom, 0x40000000, LMA_EQ_VMA)
 SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA)
 SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA)
 SECTION_rodata (rom, ALIGN (0x1), LMA_EQ_VMA)
 SECTION_rodata1 (rom, ALIGN (0x1), LMA_EQ_VMA)
 SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA)
 SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA)
 SECTION_data (ram, 0x48000000, FOLLOWING (.gcc_except_table))
 SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
 SECTIONS_END
}</PRE
></TD
></TR
></TABLE
></DIV
><P
>The file consists of two blocks, the <TT
CLASS="LITERAL"
>MEMORY</TT
> block
contains lines describing the address (<TT
CLASS="LITERAL"
>ORIGIN</TT
>)
and the size (<TT
CLASS="LITERAL"
>LENGTH</TT
>) of each memory
region. The <TT
CLASS="LITERAL"
>MEMORY</TT
> block is followed
by the <TT
CLASS="LITERAL"
>SECTIONS</TT
> block which contains
lines describing each of the linker output sections. Each section
is represented by a macro call. The arguments of these macros are
ordered as follows: </P
><P
></P
><OL
TYPE="1"
><LI
><P
>The memory region in which the section will finally
	      reside.</P
></LI
><LI
><P
>The final address (
<TT
CLASS="LITERAL"
>VMA</TT
>
) of the section. This is expressed using one of the following forms:</P
><P
></P
><DIV
CLASS="VARIABLELIST"
><DL
><DT
><SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>n</I
></SPAN
></DT
><DD
><P
>at the absolute address specified by the
		    unsigned integer <SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>n</I
></SPAN
></P
></DD
><DT
>ALIGN (<SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>n</I
></SPAN
>)</DT
><DD
><P
>following the final location of the previous section
		    with alignment to the next <SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>n</I
></SPAN
>-byte
		    boundary</P
></DD
></DL
></DIV
></LI
><LI
><P
>The initial address (<TT
CLASS="LITERAL"
>LMA</TT
>)
	      of the section. This is expressed using one of the
	      following forms:</P
><P
></P
><DIV
CLASS="VARIABLELIST"
><DL
><DT
>LMA_EQ_VMA</DT
><DD
><P
>the <TT
CLASS="LITERAL"
>LMA</TT
>
		    equals the <TT
CLASS="LITERAL"
>VMA</TT
> (no relocation)</P
></DD
><DT
>AT (<SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>n</I
></SPAN
>)</DT
><DD
><P
>at the absolute address specified by the
		    unsigned integer <SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>n</I
></SPAN
></P
></DD
><DT
>FOLLOWING (.<SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>name</I
></SPAN
>)</DT
><DD
><P
>following the initial location of section
		    <SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>name</I
></SPAN
></P
></DD
></DL
></DIV
></LI
></OL
><P
>In order to maintain compatibility with linker script
	  fragments and header files exported by the
	  <SPAN
CLASS="PRODUCTNAME"
>eCos</SPAN
> <SPAN
CLASS="APPLICATION"
>Configuration Tool</SPAN
>, the use
	  of other expressions within these files is not
	  recommended.</P
><P
>Note that the names of the linker output sections will vary
between target architectures. A description of these sections can
be found in the specific <SPAN
CLASS="PRODUCTNAME"
>GCC</SPAN
> documentation for
your architecture.</P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="editing-the-sources.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="ecos-user-guide.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="managing-package-repository.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Editing the Sources</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="manual-configuration.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Managing the Package Repository</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.