Loading application data
Eric Norum
wenorum at lbl.gov
Wed Mar 10 17:59:24 UTC 2010
I do this for my standalone EPICS applications by concatenating the tar file at the end of the bootstrap flash. I then set up the IMFS with the tar image during my application startup with the following code. The salient routine is rtems_tarfs_load. You'll have to figure out some way of determining the value of the tar image in memory, but once you can do that rtems_tarfs_load() takes care of the rest.
static int
initialize_local_filesystem(char **argv)
{
extern char _DownloadLocation[] __attribute__((weak));
extern char _FlashBase[] __attribute__((weak));
extern char _FlashSize[] __attribute__((weak));
if (_FlashSize && (_DownloadLocation || _FlashBase)) {
extern char _edata[];
size_t flashIndex = _edata - _DownloadLocation;
char *header = _FlashBase + flashIndex;
if (memcmp(header + 257, "ustar ", 8) == 0) {
int fd;
printf ("***** Unpack in-memory file system (IMFS) *****\n");
if (rtems_tarfs_load("/", (unsigned char *)header, (size_t)_FlashSize - flashIndex) != 0) {
printf("Can't unpack tar filesystem\n");
return 0;
}
.........do whatever you want with the IMFS at this point.........
}
}
return 0;
}
On Mar 10, 2010, at 9:39 AM, Gedare Bloom wrote:
> Hi,
>
> I'm trying to figure out what is the most portable (with respect to
> BSP) way to get file-based data in to an application. I can't use
> network or ATA-type disk drive. I've had some thoughts, and was
> hoping someone might have faced this type of problem before me. My
> motivation is to do benchmarking of RTEMS systems with respect to
> compute and memory usage. My particular board does not support hard
> drive or network I/O -- and in general I would like to have a portable
> set of benchmarks that any other RTEMS user can use. Most of the
> benchmarks that I'm looking at use file i/o to get parameters for
> execution.
>
> I was looking at the various filesystems, and was intrigued by the
> IMFS, The Wiki says the following: "After an application restart you
> will need to construct its contents. RTEMS provides some supporting
> calls for this plus there is the ability to tar files into it." What
> is that bit about the ability to tar files into it? Does this require
> network support?
>
> I could try to use a RAM disk and somehow interface that with an RTEMS
> filesystem. Is there any support for this in RTEMS? Any idea how I
> would get RTEMS to know where to find the RAM disk?
>
> My last option is to convert the files that I have in to arrays of
> data (compressed binary/hex or ascii strings) that are stored as part
> of the application. This would definitely be the most portable way to
> get the data in to applications, but involves a bit of work
> translating the files to something usable by the application.
>
> Maybe someone has done something similar -- I really just need a good,
> portable way to get application data in to RTEMS. Although the data is
> currently organized in Unix files, if there are some tools to convert
> files in to some other format that makes it easy to place in memory
> alongside the RTEMS application, it would probably satisfy my
> constraints.
>
> Also, if anyone else is interested in such a set of benchmarks, let me
> know and I can keep you appraised of my progress.
>
> Thanks,
> Gedare
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-users
--
Eric Norum
wenorum at lbl.gov
More information about the users
mailing list