Fwd: configuring memory size

Ed Sutter esutter at lucent.com
Tue Dec 6 19:09:32 UTC 2005


Ok, thinking more about it, I guess I take back my earlier
statement regarding run-time query, especially when it comes
to a memory bound.  For example, if you use runtime to
determine where your memory end is, you can't really
be certain if it is the end of memory or just a bad device.
Ed

gregory.menke at gsfc.nasa.gov wrote:

> That approach presents problems when there are very tight & specific
> requirements on how an application is laid out in memory.  Further, its
> not unreasonable for memory mapped peripherals or missing regions of
> memory space to be in the way and if thats the case, memory detection
> algorithms might well cause a good deal of trouble.
> 
> That said, any such provision for bizarre link scripts and memory sizing
> should probably be made by the user project and not be built into the
> RTEMS kernel.  So a reasonable compromise might be to arrange a default
> linker script and memory map, which the user can override.  But I would
> strongly disagree that mandatory automatic memory detection should be
> encouraged unless its particularly suited to a given architecture.
> 
> Greg
> 
> 
> 
> Ed Sutter writes:
>  > Can't disagree there!
>  > :-)
>  > Ed
>  > 
>  > Till Straumann wrote:
>  > 
>  > > Sorry for the urge I feel to repeat myself.
>  > > IMO, the whole approach of creating multiple linker scripts and binaries,
>  > > one for each memory / board configuration is bad.
>  > > A single instance should perform a run-time check and configure the
>  > > workspace and heap according to the amount of memory detected.
>  > > 
>  > > T.
>  > > 
>  > > Ed Sutter wrote:
>  > > 
>  > >> Peter,
>  > >> If you're looking for alternatives, then I also have a homegrown tool
>  > >> that I use for this.  Very trivial, but does what I want, essentially
>  > >> replacing a few sed/awk script with something that keeps everything to 
>  > >> one
>  > >> simple command line.
>  > >> The purpose is slightly different than Thomas's, so you'll have several
>  > >> options!  The purpose is to maintain the address information for the 
>  > >> linker
>  > >> file in my makefile as a variable.  Then the variable can be included in
>  > >> CFLAGS if needed, along with being used as input to a template that 
>  > >> creates
>  > >> the final linker command file.
>  > >> Anyway, the tool (called vsub) is included in the MicroMonitor source 
>  > >> distribution
>  > >> at http://www.microcross.com/html/micromonitor.html, or I can just send
>  > >> you the source for that alone.
>  > >> Lemme know if you want it.
>  > >> Ed
>  > >>
>  > >> Thomas Doerfler wrote:
>  > >>
>  > >>> Hi,
>  > >>>
>  > >>> just as an additional idea: Some years ago I used the C preprocessor 
>  > >>> to generate linker command files from a template. The benefit was, 
>  > >>> that I could have ONE header file defining address/size information 
>  > >>> for the C compiler and for the linker.
>  > >>>
>  > >>> Maybe this would also be convenient for Peter?
>  > >>>
>  > >>> wkr,
>  > >>> Thomas.
>  > >>>
>  > >>>
>  > >>> D. Peter Siddons wrote:
>  > >>>
>  > >>>> Hi Till,
>  > >>>> The bsp is very similar to the uC5282. _M68k_Ramsize is copied from 
>  > >>>> the linker value (_Ramsize) in bsp_start() (part of bspstart.c). I 
>  > >>>> could easily check for the two possibilities here. Is that early 
>  > >>>> enough?
>  > >>>> Pete.
>  > >>>>
>  > >>>> Till Straumann wrote:
>  > >>>>
>  > >>>>> Eric Norum wrote:
>  > >>>>>
>  > >>>>>>>
>  > >>>>>>> Looks like what I suggested won't work.   The linker complains 
>  > >>>>>>> if  the expressions in the  ORIGIN/LENGTH contain symbols even if 
>  > >>>>>>> those  symbols have been defined before the assignment.
>  > >>>>>>>
>  > >>>>>>> I guess that you'll need to have two separate linkcmds files and  
>  > >>>>>>> use something like
>  > >>>>>>>     -Wl,-TlinkcmdsFor4MFlash
>  > >>>>>>> or
>  > >>>>>>>     -Wl,-TlinkcmdsFor16MFlash
>  > >>>>>>
>  > >>>>>>
>  > >>>>>>
>  > >>>>>>
>  > >>>>>>
>  > >>>>>>
>  > >>>>> A much better solution would be enhancing the BSP so it does
>  > >>>>> auto-detection. This has to be performed early enough,though.
>  > >>>>>
>  > >>>>> If an early detection is too cumbersome, then you can limit
>  > >>>>> the initial size to a minimum, let's say 4M and increase the
>  > >>>>> size later. In order to make the additional ram available to
>  > >>>>> RTEMS (i.e., after the malloc heap/libc have been initialized)
>  > >>>>> you have to implement a trivial 'sbrk()'. The only constraint
>  > >>>>> is that the 'late ram'-portion of the heap to be added by sbrk()
>  > >>>>> must be contiguous to the initial heap.
>  > >>>>>
>  > >>>>> You can look at powerpc/shared/bspstart which uses the
>  > >>>>> two-staged heap approach for different reasons.
>  > >>>>>
>  > >>>>> HTH
>  > >>>>> T.
>  > >>>>>
>  > >>>>>>>
>  > >>>>>>>
>  > >>>>>>>>
>  > >>>>>>>> Eric Norum wrote:
>  > >>>>>>>>
>  > >>>>>>>>>> You need to pass the --defsym option to the linker.
>  > >>>>>>>>>>
>  > >>>>>>>>>> On the compile line, add something like
>  > >>>>>>>>>>     -Wl,--defsym,_RamSize=0x10000000
>  > >>>>>>>>>>
>  > >>>>>>>>>> On Dec 2, 2005, at 10:50 PM, D. Peter Siddons wrote:
>  > >>>>>>>>>>
>  > >>>>>>>>>>> I have two boards which are identical except for the amounts  
>  > >>>>>>>>>>> of  flash and RAM. The linkcmds file has definitions for 
>  > >>>>>>>>>>> these   parameters like:
>  > >>>>>>>>>>> _RamSize = DEFINED(_RamSize) ? _RamSize : 0x7f0000;
>  > >>>>>>>>>>>
>  > >>>>>>>>>>> so my question is, can I invoke a definition somewhere in 
>  > >>>>>>>>>>> the   application make process to override the one in 
>  > >>>>>>>>>>> linkcmds? If  so,  how and/or where?
>  > >>>>>>>>>>>
>  > >>>>>>>>>>> Pete.
>  > >>>>>>>>>>
>  > >>>>>>>>>>
>  > >>>>>>>>>>
>  > >>>>>>>>>>
>  > >>>>>>>>>>
>  > >>>>>>>>>>
>  > >>>>>>>>>>
>  > >>>>>>>>>>
>  > >>>>>>>
>  > >>>>>>> -- 
>  > >>>>>>> Eric Norum <norume at aps.anl.gov>
>  > >>>>>>> Advanced Photon Source
>  > >>>>>>> Argonne National Laboratory
>  > >>>>>>> (630) 252-4793
>  > >>>>>>>
>  > >>>>>>>
>  > >>>>>>
>  > >>>>>
>  > >>>>>
>  > >>>
>  > >>>
>  > > 
>  > 
> 



More information about the users mailing list