Пример #1
0
static int _mount(vfs_mount_t *mountp)
{
    littlefs_desc_t *fs = mountp->private_data;

    mutex_init(&fs->lock);
    mutex_lock(&fs->lock);

    DEBUG("littlefs: mount: mountp=%p\n", (void *)mountp);

    if (!fs->config.block_count) {
        fs->config.block_count = fs->dev->sector_count - fs->base_addr;
    }
    if (!fs->config.block_size) {
        fs->config.block_size = fs->dev->page_size * fs->dev->pages_per_sector;
    }
    if (!fs->config.prog_size) {
        fs->config.prog_size = fs->dev->page_size;
    }
    if (!fs->config.read_size) {
        fs->config.read_size = fs->dev->page_size;
    }
    fs->config.lookahead = LITTLEFS_LOOKAHEAD_SIZE;
    fs->config.lookahead_buffer = fs->lookahead_buf;
    fs->config.context = fs;
    fs->config.read = _dev_read;
    fs->config.prog = _dev_write;
    fs->config.erase = _dev_erase;
    fs->config.sync = _dev_sync;
#if LITTLEFS_FILE_BUFFER_SIZE
    fs->config.file_buffer = fs->file_buf;
#endif
#if LITTLEFS_READ_BUFFER_SIZE
    fs->config.read_buffer = fs->read_buf;
#endif
#if LITTLEFS_PROG_BUFFER_SIZE
    fs->config.prog_buffer = fs->prog_buf;
#endif

    mtd_init(fs->dev);

    int ret = lfs_mount(&fs->fs, &fs->config);
    if (ret < 0) {
        DEBUG("littlefs: formatting\n");
        ret = lfs_format(&fs->fs, &fs->config);
        if (ret >= 0) {
            DEBUG("littlefs: mounting\n");
            ret = lfs_mount(&fs->fs, &fs->config);
        }
    }

    mutex_unlock(&fs->lock);

    return littlefs_err_to_errno(ret);
}
Пример #2
0
int LittleFileSystem::mount(BlockDevice *bd)
{
    _mutex.lock();
    LFS_INFO("mount(%p)", bd);
    _bd = bd;
    int err = _bd->init();
    if (err) {
        LFS_INFO("mount -> %d", err);
        _mutex.unlock();
        return err;
    }

    memset(&_config, 0, sizeof(_config));
    _config.context = bd;
    _config.read  = lfs_bd_read;
    _config.prog  = lfs_bd_prog;
    _config.erase = lfs_bd_erase;
    _config.sync  = lfs_bd_sync;
    _config.read_size   = bd->get_read_size();
    if (_config.read_size < _read_size) {
        _config.read_size = _read_size;
    }
    _config.prog_size   = bd->get_program_size();
    if (_config.prog_size < _prog_size) {
        _config.prog_size = _prog_size;
    }
    _config.block_size  = bd->get_erase_size();
    if (_config.block_size < _block_size) {
        _config.block_size = _block_size;
    }
    _config.block_count = bd->size() / _config.block_size;
    _config.lookahead = 32 * ((_config.block_count+31)/32);
    if (_config.lookahead > _lookahead) {
        _config.lookahead = _lookahead;
    }

    err = lfs_mount(&_lfs, &_config);
    LFS_INFO("mount -> %d", lfs_toerror(err));
    _mutex.unlock();
    return lfs_toerror(err);
}