Spiffs (sistema de arquivos flash spi)
V0.3.7
Copyright (c) 2013-2017 Peter Andersson (Pelleplutt1976 em gmail.com)
Para coisas legais, consulte a licença. Basicamente, você pode fazer o que quiser com a fonte. Use, modifique, venda, imprima, enrole -o e fuma - desde que não seja responsabilizado.
Adoro ouvir feedback!
INTRODUÇÃO
O Spiffs é um sistema de arquivos destinado a dispositivos SPI nem flash em alvos incorporados.
Spiffs foi projetado com as seguintes características em mente:
- Alvos pequenos (incorporados), aríete esparsa sem monte
- Apenas grandes áreas de dados (blocos) podem ser apagadas
- Uma apagar irá redefinir todos os bits em bloco para os
- Escrever puxa um para zeros
- Os zeros só podem ser puxados para apagar
- Desgastar nivelamento
PRÉDIO
mkdir build; make
Caso contrário, configure a variável builddir em direção ao topo do makefile como algo que oposto à build padrão. Verifique o host via make test e consulte o .travis.yml para obter o procedimento oficial de teste. Veja o wiki para integrar Spiffs em projetos e o SpiffSimg do NodeMCU é um bom exemplo sobre o assunto.
CARACTERÍSTICAS
O que os Spiffs fazem:
- Projetado especificamente para baixo uso de RAM
- Usa buffers de RAM de tamanho estaticamente, independentemente do número de arquivos
- API do tipo POSIX: aberto, feche, leia, escreva, procure, estatística, etc.
- Ele pode ser executado em qualquer flash, não apenas flash spi - teoricamente também em flash incorporado de um microprocessador
- Múltiplas configurações de spiffs podem ser executadas no mesmo alvo - e mesmo no mesmo dispositivo SPI Flash
- Implementa nivelamento de desgaste estático
- Verificações de consistência do sistema de arquivos incorporadas
- Altamente configurável
O que os Spiffs não fazem:
- Atualmente, o SPIFFs não suporta diretórios. Produz uma estrutura plana. Criar um arquivo com Path TMP/MyFile.txt criará um arquivo chamado tmp/myfile.txt em vez de um myfile.txt no diretório TMP .
- Não é uma pilha em tempo real. Uma operação de gravação pode durar muito mais do que outra.
- Baixa escalabilidade. O SPIFFS destina -se a pequenos dispositivos de memória - os tamanhos normais para flashes de SPI. Indo além de ~ 128Mbyte é provavelmente uma má ideia. Este é um efeito colateral da meta de design de usar o mínimo de RAM possível.
- Atualmente, ele não detecta ou lida com blocos ruins.
- Uma configuração, um binário. Não há binários genéricos que lida com todos os tipos de configurações.
PERCEBER
0.4.0 está em construção. Esta é uma reescrita completa e alterará a estrutura subjacente. Portanto, não será compatível com versões anteriores do sistema de arquivos. A API é a mesma, com pequenas modificações. Alguns sinalizadores de configuração serão removidos (pois são obrigatórios em 0,4.0) e alguns recursos podem cair até 0.4.1. Se você tiver alguma preocupação ou dúvida, ele pode ser discutido na edição #179
Mais informações
Consulte o wiki para configurar, integrar, usar e otimizar SPIFFs.
Para design, consulte Docs/Tech_Spec.
Para um driver de flash SPI genérico, veja isso.
HISTÓRIA
0.3.7
- Corrigido impedir a busca de compensações negativas #158
- Corrigido o descritor de arquivos compensações não atualizadas para vários FDs no mesmo arquivo #157
- Página de cache corrigida não fechada para arquivos removidos #156
- Corrigido um bug LSEEK ao procurar exatamente para terminar de um LUT #148 totalmente indexado de primeiro nível
- Problema de nivelamento de desgaste fixo #145
- Tentativa corrigida de escrever com os limites no flash #130,
- Defina o deslocamento do arquivo ao procurar no final 121 (obrigado @sensslen)
- Seguindo a busca nos arquivos virgens #120 (obrigado @sensslen)
- Metadados de arquivo opcional #128 (obrigado @cesanta)
- Framework de teste AFL #100 #143 (obrigado @pjsg)
- TestFrame Atualizações
Novas funções da API:
-
SPIFFS_update_meta, SPIFFS_fupdate_meta - atualiza os metadados para um arquivo
Nova configuração define:
-
SPIFFS_OBJ_META_LEN - Ative a possibilidade de adicionar metadados extras aos arquivos
0.3.6
- Corrija o bug da faixa no mapeamento de memória de índice #98
- Adicionar mapeamento de memória de índice #97
- Otimize spiffs_read para arquivos grandes #96
- Adicione o cache temporal para abrir arquivos #95
- GC #93 mais robusto (obrigado @dismirlian)
- Corrigido uma gravação dupla dos mesmos dados em determinadas situações de cache
- Corrigido um bug aberto em read_only
- Arquivo não visível em spiffs_readdir #90 (obrigado @benpicco-tmp)
- Limpeza de código de carga de cache #92 (obrigado @niclash)
- Fixo de bloqueio/desbloqueio assimetria #88 #87 (obrigado @jackjefferson, @dpruessner)
- TestFrame Atualizações
Novas funções da API:
-
SPIFFS_ix_map - mapa Índice Meta Dados da memória para um arquivo -
SPIFFS_ix_unmap - meta dados do índice de soma para um arquivo -
SPIFFS_ix_remap - altera o deslocamento do arquivo para mapa de metadados de índice -
SPIFFS_bytes_to_ix_map_entries - utilitário, obtenha um tempo de vetor necessário para a determinada quantidade de bytes -
SPIFFS_ix_map_entries_to_bytes - utilidade, obtenha número de bytes que um vetor pode representar um dado comprimento
Nova configuração define:
-
SPIFFS_IX_MAP - Ative a possibilidade de mapear os meta dados do índice para a memória para ler mais rápido -
SPIFFS_TEMPORAL_FD_CACHE - Ativar cache temporal para abrir arquivos mais rápido -
SPIFFS_TEMPORAL_CACHE_HIT_SCORE - para ajustar o cache temporal
0.3.5
- Corrigido um bug na verificação do FS
- API retorna códigos de erro reais #84) (obrigado @Nails)
- Corrigir avisos do compilador para não-GCC #83 #81 (obrigado @Nails)
- Incapaz de se recuperar do FS completo #82 (obrigado @ROJER)
- Definir spiffs_o_* sinalizadores #80
- Problema com os nomes de arquivos longos #79 (obrigado @psjg)
- Nome do arquivo duplicado Correção de bug #74 (obrigado @igrr)
- Spiffs_eof e spiffs_tell retornam valor errado #72 (obrigado @artempisarenko)
- Bunco de atualizações de teste #77 #78 #86 (obrigado @dpreussner, @psjg AO)
0.3.4
- Adicionado Func de arquivo de retorno de chamada do usuário.
- Corrigido um bug de status com o OBJ ID.
- Spiffs_probe_fs adicionados
- Adicione a possibilidade de compilar uma versão somente leitura do SPIFFs
- Faça mágica dependente do comprimento do FS, se necessário (consulte #59 e #66) (obrigado @hreintke)
- Spiffs_open_by_page_function exposto
- O arquivo de tamanho zero não pode ser procurado #57 (obrigado @lishen2)
- Adicionar Funções Tell e EOF #54 (obrigado @raburton)
- Faça da String API Params const #53 (obrigado @raburton)
- Preservar user_data durante o monte () #51 (obrigado @rojer)
Novas funções da API:
-
SPIFFS_set_file_callback_func - registre um retorno de chamada informando sobre os eventos do arquivo -
SPIFFS_probe_fs - sonda um flash spi tentando descobrir o tamanho de fs -
SPIFFS_open_by_page - Abra um arquivo por página -
SPIFFS_eof - verifica se o final do arquivo é alcançado -
SPIFFS_tell - retorna o deslocamento atual do arquivo
Nova configuração define:
-
SPIFFS_READ_ONLY -
SPIFFS_USE_MAGIC_LENGTH
0.3.3
Pode não ser compatível com 0,3.2 estruturas. Veja a edição #40
- Possibilidade de adicionar deslocamento inteiro às alças de arquivo
- A função truncada presume muito poucas páginas gratuitas #49
- Bug na função truncada #48 (obrigado @paweldefee)
- Atualize spiffs_gc.c - Remova o parâmetro desnecessário (obrigado @paweldefee)
- Atualizar documentos de integração (obrigado @paweldefee)
- Corrija o truncamento do ponteiro em plataformas de 64 bits (obrigado @igrr)
- Arquivos de tamanho zero não podem ser lidos #44 (obrigado @rojer)
- (Mais) Cálculo correto de max_id em obj_lu_find #42 #41 (obrigado @lishen2)
- Verifique o código de erro correto em obj_lu_find_free #41 (obrigado @lishen2)
- Comentários de moar para spiffs_lseek (obrigado @igrr)
- Corrigido preenchimento em spiffs_page_object_ix #40 (obrigado @jmattsson @lishen2)
- Teste GC_quick corrigido (obrigado @JMattsson)
- Adicionar spiffs_excl sinalizador #36
- Spiffs_close pode falhar silenciosamente se o cache estiver ativado #37
- Dados do usuário em retornos de chamada #34
- Ignorando Singleton Build in Cache Setup (obrigado Luca)
- Erro de compilação corrigido #32 (obrigado @Chotasanjiv)
- Alinhe Cand_scores (obrigado @hefloryd)
- Corrigir avisos de construção quando o spiffs_cache é 0 (obrigado @ajaybhargav)
Nova configuração define:
0.3.2
- Tamanho do cache limite se muito cache for dado (obrigado pgeiem)
- Novo recurso - apagar controlado. #23
- Descritores de arquivo Spiffs_rename Vaks #28 (obrigado benpicco)
- A impressão movida DBG define na estrutura de teste para params_test.h
- LSEEK deve devolver o deslocamento resultante (obrigado Hefloryd)
- Tipo fixo no DBG IFDEFS
- Aviso de silêncio sobre comparação assinada/não assinada quando Spiffs_Obj_id é de 32 bits (obrigado Benpicco)
- Erro possível em test_spiffs.c #21 (obrigado yihcdaso-yeskela)
- Cache pode escrever com muita frequência #16
- Até as atualizações do Moar Testrunner
- Atualização da estrutura de teste e alguns testes adicionados
- Alguns pensamentos para a próxima geração
- Teste os Sigsevs ao ter muitos setores #13 (obrigado SOLEWOLFX2)
- GC pode ser abaixo do ideal #11
- Corrija o eterno readdir quando objheader no último bloco, última entrada
Novas funções da API:
-
SPIFFS_gc_quick - ligue para um GC não intrusivo -
SPIFFS_gc - chame um gc intrusivo em escala em larga
0.3.1
- Removeu dois avisos de retorno, foi muito gatilho na liberação
0.3.0
- Adicionado NameCheck existente ao criar arquivos
- Muitos bugs de análise estática #6
- Adicionado renomear func
- Corrija Spiffs_Read Comprimento ao ler além do tamanho do arquivo
- Leitura adicionada além do comprimento do arquivo Testcase
- Feito construir um pouco mais configurável
- Nome alterado em spiffs de "errno" para "err_code" devido a conflitos compilando em mingw
- Verificações aprimoradas do GC, corrigiram um bug de anexo, truncado mais robusto para um caso muito especial
- Os cheques do GC precedem GC, truncam ainda menos exigentes
- Alinhamento de estrutura necessário para alguns alvos, defina na configuração SPIFFS #10
- Spiffs Filesystem Magic, definível na configuração
Nova configuração define:
-
SPIFFS_USE_MAGIC - Ativar ou desativar a verificação mágica no montante -
SPIFFS_ALIGNED_OBJECT_INDEX_TABLES - alinhamento para certos alvos
Novas funções da API:
-
SPIFFS_rename - renomear arquivos -
SPIFFS_clearerr - limpa o último errno -
SPIFFS_info - retorna informações sobre bytes usados e totais no FS -
SPIFFS_format - formato o sistema de arquivos -
SPIFFS_mounted - verifica se o sistema de arquivos está montado