<div dir="ltr"><div><div>Nick,<br><br></div>See my posted example <a href="http://www.rtems.com/ml/rtems-users/2013/march/msg00156.html">http://www.rtems.com/ml/rtems-users/2013/march/msg00156.html</a><br><br></div>This formatted ok for a few people on the list. I had problems with operations like mkdir afterwards, but it was fine for others on other platforms.<br>
<br><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 12 August 2013 09:37, Nick Withers <span dir="ltr"><<a href="mailto:nick.withers@anu.edu.au" target="_blank">nick.withers@anu.edu.au</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hullo all,<br>
<br>
I'm trying to get a flash disk (S29GLxxxN) going on ye olde MVME3100<br>
with RFS and'm having troubles...<br>
<br>
Here's some console output:<br>
____<br>
<br>
Registering /dev/console as minor 0 (==/dev/ttyS0)<br>
init.c:89: init(): Started<br>
fs.c:42: fs_init(): Extracting file-system tar...<br>
fs.c:47: fs_init(): File-system tar extracted<br>
fdisk:read-block:0<br>
fdisk:read-block: no segment mapping: 0<br>
flash.c:203: flash_disk_mount(): Failed to mount flash device "/dev/fdda" to "/etc/daq". Error: "I/O error"<br>
flash.c:155: flash_disk_init(): Failed to mount flash file-system. Error: "I/O error"<br>
fdisk:erase-disk<br>
fdisk: erase-flash:00<br>
fdisk: device-erase: 00<br>
fdisk:recover-block-mappings:00-000<br>
fdisk:  seg-read: 00-000: o=00000000 s=2048<br>
fdisk:  seg-blank: 00-000: o=00000800 s=512<br>
fdisk:  seg-blank: 00-000: o=00000a00 s=512<br>
<br>
(snip)<br>
<br>
fdisk:  seg-blank: 00-003: o=0001fa00 s=512<br>
fdisk:  seg-blank: 00-003: o=0001fc00 s=512<br>
fdisk:  seg-blank: 00-003: o=0001fe00 s=512<br>
fdisk: queue-seg:00-003: p=252 a=0 u=0 b=0 f=no n=null<br>
rtems-rfs: format: /dev/fdda<br>
rtems-rfs: format: media size = 499712<br>
rtems-rfs: format: media blocks = 976<br>
rtems-rfs: format: media block size = 512<br>
rtems-rfs: format: size = 499712<br>
rtems-rfs: format: blocks = 976<br>
rtems-rfs: format: block size = 512<br>
rtems-rfs: format: bits per block = 4096<br>
rtems-rfs: format: inode size = 56<br>
rtems-rfs: format: inodes = 81 (1.0%)<br>
rtems-rfs: format: groups = 1<br>
rtems-rfs: format: group blocks = 4096<br>
rtems-rfs: format: group inodes = 81<br>
rtems-rfs: format: group   0: base = 1, size = 975, blocksfdisk:read-block:1<br>
fdisk:read-block: no segment mapping: 1<br>
, inodesfdisk:read-block:2<br>
fdisk:read-block: no segment mapping: 2<br>
<br>
fdisk:write-block:0<br>
fdisk: write:0=>00-000: queue check: ----<br>
fdisk: write:0=>00-000-000: write: p=252 a=0 u=0 b=0 n=null: f=fffe c=f0b7 b=0<br>
fdisk:  seg-write: 00-000: o=00000800 s=512<br>
fdisk:write-block:00-000-000: write page failed: I/O error (5)<br>
fdisk: queue-seg:00-000: p=252 a=0 u=0 b=0 f=FAILED n=null<br>
fdisk:read-block:0<br>
fdisk: read:0=>00-000-000: p=252 a=0 u=0 b=0 n=null: f=fffe c=f0b7 b=0<br>
fdisk:  seg-read: 00-000: o=00000800 s=512<br>
fdisk:error:read-block: crc failure: 0: buffer:5bcd page:f0b7<br>
rtems-rfs: format: file system open failed: 5: I/O error<br>
rtems-rfs: format: writing root dir failed: 5: I/O error<br>
flash.c:137: flash_disk_format(): Failed to format flash file-system. Error: "I/O error"<br>
____<br>
<br>
The "no segment mapping" bit seems to suggest I've stuffed up with the<br>
initialisation structures...? I *think* I'm defining 4 segments. Here're<br>
(hopefully!) the pertinent bits:<br>
____<br>
<br>
#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK<br>
<br>
#define FLASH_DISK_DRIVER { \<br>
        .initialization_entry = rtems_fdisk_initialize, \<br>
        .open_entry           = rtems_blkdev_generic_open, \<br>
        .close_entry          = rtems_blkdev_generic_close, \<br>
        .read_entry           = rtems_blkdev_generic_read, \<br>
        .write_entry          = rtems_blkdev_generic_write, \<br>
        .control_entry        = rtems_blkdev_generic_ioctl \<br>
}<br>
<br>
#define CONFIGURE_APPLICATION_EXTRA_DRIVERS FLASH_DISK_DRIVER<br>
#define CONFIGURE_FILESYSTEM_RFS<br>
<br>
#define CONFIGURE_INIT<br>
#include <rtems/confdefs.h><br>
<br>
<br>
#include <rtems/flashdisk.h><br>
#include <rtems/libio.h><br>
#include <rtems/rtems-rfs.h><br>
#include <rtems/rtems-rfs-format.h><br>
#include <bsp/flashPgm.h><br>
#include <libchip/am29lv160.h><br>
<br>
<br>
uint32_t rtems_am29lv160_configuration_size = 1;<br>
<br>
const rtems_am29lv160_config rtems_am29lv160_configuration[] =<br>
{<br>
        {<br>
                .bus_8bit = 0,<br>
                //! \todo I believe this can change between MVME3100 boards. Read the configuration out of the VPD EEPROM at run-time?<br>
                .base     = (void *) 0xFC000000 // Obtained from MOTLoad, using the "flashShow" command<br>
        }<br>
};<br>
<br>
static const rtems_fdisk_segment_desc flash_disk_segment_desc =<br>
{<br>
        .count   = 4, // "Number of segments of this type in a row"<br>
        .segment = 0, // "The base segment number"<br>
        .offset  = 0, // "Address offset of base segment in device"<br>
        .size    = 128 * 1024 // "Size of [each of count] segment[s] in bytes" - hardware dependent?<br>
};<br>
<br>
static const rtems_fdisk_device_desc flash_disk_device =<br>
{<br>
        .segment_count = 1,<br>
        .segments      = &flash_disk_segment_desc,<br>
        .flash_ops     = &rtems_am29lv160_handlers<br>
};<br>
<br>
uint32_t rtems_flashdisk_configuration_size = 1;<br>
<br>
const rtems_flashdisk_config rtems_flashdisk_configuration[] =<br>
{<br>
        {<br>
                .block_size         = 512,<br>
                .device_count       = 1,<br>
                .devices            = &flash_disk_device,<br>
//              .flags              = RTEMS_FDISK_CHECK_PAGES | RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE,<br>
                .flags              = RTEMS_FDISK_CHECK_PAGES,<br>
                .unavail_blocks     = 32, // Are we marking the first segment as unavailable so it can be used for compaction?<br>
                .compact_segs       = 2,<br>
                .avail_compact_segs = 1,<br>
                .info_level         = 3<br>
        }<br>
};<br>
<br>
<br>
static int flash_disk_format(const char *device)<br>
{<br>
        rtems_rfs_format_config config;<br>
        int                     device_fd;<br>
<br>
<br>
        BSP_flashWriteEnable(0);<br>
<br>
<br>
        if ((device_fd = open(device, O_WRONLY, 0))<br>
        {<br>
                rtems_error(0, "%s:%u: %s(): Failed to open flash device \"%s\". Error: \"%s\"", __FILE__, __LINE__, __func__, device, strerror(errno));<br>
<br>
                return (-1);<br>
        }<br>
<br>
        if (ioctl(device_fd, RTEMS_FDISK_IOCTL_ERASE_DISK) == -1)<br>
        {<br>
                rtems_error(0, "%s:%u: %s(): Failed to erase flash device \"%s\". Error: \"%s\"", __FILE__, __LINE__, __func__, device, strerror(errno));<br>
<br>
                return (-1);<br>
        }<br>
<br>
<br>
        memset(&config, 0, sizeof (rtems_rfs_format_config));<br>
<br>
        config.verbose = true;<br>
<br>
        if (rtems_rfs_format(device, &config) != 0)<br>
        {<br>
                BSP_flashWriteDisable(0);<br>
<br>
<br>
                rtems_error(0, "%s:%u: %s(): Failed to format flash file-system. Error: \"%s\"", __FILE__, __LINE__, __func__, strerror(errno));<br>
<br>
                return (-1);<br>
        }<br>
<br>
<br>
        BSP_flashWriteDisable(0);<br>
<br>
<br>
        return (0);<br>
}<br>
____<br>
<br>
I've noticed that there's a<br>
c/src/lib/libbsp/powerpc/shared/flash/spansionFlash.c, but that looks<br>
like it's for flash programming? Perhaps this chip isn't supported for<br>
flashdisk usage?<br>
--<br>
Nick Withers<br>
<br>
Embedded Systems Programmer<br>
Room 2.26, Building 57<br>
Department of Nuclear Physics<br>
Research School of Physics and Engineering<br>
The Australian National University (CRICOS: 00120C)<br>
<br>
eMail: <a href="mailto:nick.withers@anu.edu.au">nick.withers@anu.edu.au</a><br>
Phone: <a href="tel:%2B61%202%206125%202091" value="+61261252091">+61 2 6125 2091</a><br>
Mobile: <a href="tel:%2B61%20414%20397%20446" value="+61414397446">+61 414 397 446</a><br>
<br>
<br>
_______________________________________________<br>
rtems-users mailing list<br>
<a href="mailto:rtems-users@rtems.org">rtems-users@rtems.org</a><br>
<a href="http://www.rtems.org/mailman/listinfo/rtems-users" target="_blank">http://www.rtems.org/mailman/listinfo/rtems-users</a><br>
</blockquote></div><br><br clear="all"><br>-- <br><div><br>regards</div><div>---</div><div>Matthew J Fletcher</div><br>
</div>