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); }
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); }