When an eCos application is linked it must be done under the control
of a linker script. This script defines the memory areas, addresses
and sized, into which the code and data are to be put, and allocates
the various sections generated by the compiler to these.
The linker script actually used is in
lib/target.ld in the install directory. This is
actually manufactured out of two other files: a base linker script and
an .ldi file that was generated by the memory
layout tool.
The base linker script is usually supplied either by the architecture
HAL or the variant HAL. It consists of a set of linker script
fragments, in the form of C preprocessor macros, that define the major
output sections to be generated by the link operation. The
.ldi file, which is #include'ed
by the base linker script, uses these macro definitions to assign the
output sections to the required memory areas and link addresses.
The .ldi file is supplied by the platform HAL, and
contains knowledge of the memory layout of the target platform. These
files generally conform to a standard naming convention, each file
being of the form:
pkgconf/mlt_<architecture>_<variant>_<platform>_<startup>.ldi
where <architecture>,
<variant> and
<platform> are the respective HAL package
names and <startup> is the startup type which
is usually one of ROM, RAM or
ROMRAM.
In addition to the .ldi file, there is also a
congruously name .h file. This may be used by the
application to access information defined in the
.ldi file. Specifically it contains the memory
layout defined there, together with any additional section names
defined by the user. Examples of the latter are heap areas or PCI bus
memory access windows.
The .ldi is manufactured by the Memory
Layout Tool (MLT). The MLT saves the memory
configuration into a file named
include/pkgconf/mlt_<architecture>_<variant>_<platform>_<startup>.mlt
in the platform HAL. This file is used by the
MLT to manufacture both the
.ldi and .h files. Users should
beware that direct edits the either of these files may be overwritten
if the MLT is run and regenerates them from the
.mlt file.
The names of the .ldi and .h
files are defined by macro definitions in
pkgconf/system.h. These are
CYGHWR_MEMORY_LAYOUT_LDI and
CYGHWR_MEMORY_LAYOUT_H respectively. While there
will be little need for the application to refer to the
.ldi file directly, it may include the
.h file as follows:
#include CYGHWR_MEMORY_LAYOUT_H |