Spiffs (SPI 플래시 파일 시스템)
v0.3.7
Copyright (C) 2013-2017 Peter Andersson (Pelleplutt1976 at Gmail.com)
합법적 인 것은 라이센스를 참조하십시오. 기본적으로 소스로 원하는대로 할 수 있습니다. 책임을지지 않는 한 사용, 수정, 판매, 인쇄, 롤링 및 담배를 피우십시오.
그래도 피드백을 듣는 것을 좋아합니다!
소개
Spiffs는 내장 대상의 SPI 및 플래시 장치 용 파일 시스템입니다.
Spiffs는 다음과 같은 특성을 염두에두고 설계되었습니다.
- 작은 (내장) 대상, 힙이없는 희소 램
- 큰 데이터 영역 (블록) 만 지울 수 있습니다
- 지우기는 모든 비트를 블록으로 재설정합니다.
- 글쓰기는 하나를 제로로 끌어 당깁니다
- 세로는 지우기만으로는 만 가져올 수 있습니다
- 마모 레벨링
건물
mkdir build; make
그렇지 않으면 기본 build 에 반대하는 것으로 makefile 의 상단을 향한 builddir 변수를 구성하십시오. make test 통해 호스트에서의 사전 확인 및 공식 심층 테스트 절차에 대해 .travis.yml 참조하십시오. Spiffs를 프로젝트에 통합하려는 Wiki를 참조하십시오. Nodemcu의 Spiffsimg은 주제에 대한 좋은 예입니다.
특징
Spiffs의 일 :
- 낮은 RAM 사용을 위해 특별히 설계되었습니다
- 파일 수와 무관하게 정적 크기의 RAM 버퍼를 사용합니다.
- posix-like API : 열기, 닫기, 읽기, 쓰기, 찾기, 통계 등
- SPI Flash뿐만 아니라 이론적으로 마이크로 프로세서의 임베디드 플래시에도 실행될 수 있습니다.
- 여러 spiffs 구성이 동일한 대상 및 동일한 SPI 플래시 장치에서 실행될 수 있습니다.
- 정적 마모 레벨링을 구현합니다
- 내장 파일 시스템 일관성 검사
- 매우 구성 가능합니다
Spiffs가없는 것 :
- 현재 Spiffs는 디렉토리를 지원하지 않습니다. 평평한 구조를 생성합니다. 경로 tmp/myfile.txt 로 파일을 작성하면 디렉토리 TMP 에서 myfile.txt 대신 tmp/myfile.txt 라는 파일이 생성됩니다.
- 실시간 스택이 아닙니다. 한 글쓰기 작업은 다른 작문보다 훨씬 오래 지속될 수 있습니다.
- 확장 성이 좋지 않습니다. Spiffs는 작은 메모리 장치를위한 것입니다 - SPI 플래시의 일반 크기입니다. ~ 128mbyte를 넘어서는 것은 아마도 나쁜 생각 일 것입니다. 이것은 가능한 한 작은 램을 사용하는 설계 목표의 부작용입니다.
- 현재는 나쁜 블록을 감지하거나 처리하지 않습니다.
- 하나의 구성, 하나의 바이너리. 모든 유형의 구성을 처리하는 일반적인 스파프 바이너리는 없습니다.
알아채다
0.4.0이 건설 중입니다. 이것은 완전한 재 작성이며 기본 구조를 변경합니다. 따라서 이전 버전의 파일 시스템과 호환되지 않습니다. API는 약간의 수정으로 동일합니다. 일부 구성 플래그는 (0.4.0에서 필수적이므로) 제거되고 일부 기능은 0.4.1까지 떨어질 수 있습니다. 걱정이나 질문이 있으면 이슈 #179에서 논의 할 수 있습니다.
더 많은 정보
Spiff를 구성, 통합, 사용 및 최적화하려면 Wiki를 참조하십시오.
디자인은 Docs/Tech_Spec을 참조하십시오.
일반적인 SPI 플래시 드라이버의 경우이를 참조하십시오.
역사
0.3.7
- 수정 된 수정 방지 음의 상쇄 #158
- 동일한 파일에서 여러 FDS에 대해 업데이트되지 않은 파일 설명 자 오프셋 #157
- 제거 된 파일 #156의 경우 고정 캐시 페이지가 닫히지 않았습니다
- 완전히 인덱싱 된 1 레벨 LUT #148을 정확히 끝내기 위해 LSEEK 버그를 수정했습니다.
- 고정 마모 레벨링 문제 #145
- 플래시 #130에서 한계를 쓰려는 고정 시도,
- 끝을 찾을 때 파일 오프셋 설정 #121 (감사합니다 @sensslen)
- 처녀 파일에서의 수정 #120 (감사합니다 @sensslen)
- 옵션 파일 메타 데이터 #128 (감사합니다 @cesanta)
- AFL 테스트 프레임 워크 #100 #143 (감사합니다 @PJSG)
- 테스트 프레임 업데이트
새로운 API 기능 :
-
SPIFFS_update_meta, SPIFFS_fupdate_meta 파일의 메타 데이터를 업데이트합니다
새로운 구성은 다음과 같습니다.
-
SPIFFS_OBJ_META_LEN 파일에 추가 메타 데이터를 추가 할 수있는 가능성 활성화
0.3.6
- 인덱스 메모리 매핑 #98의 범위 버그 수정
- 인덱스 메모리 매핑 #97을 추가하십시오
- 대형 파일 #96에 대해 Spiffs_Read를 최적화하십시오
- 파일을 열기 위해 시간적 캐시를 추가하십시오 #95
- 더 강력한 GC #93 (감사합니다 @Dismirlian)
- 특정 캐시 상황에서 동일한 데이터의 이중 쓰기 수정
- read_only 빌드에서 열린 버그를 수정했습니다
- spiffs_readdir #90에 표시되지 않음 파일 ( @benpicco-tmp 감사합니다)
- 캐시로드 코드 정리 #92 (감사합니다 @niclash)
- 고정 잠금/잠금 해제 비대칭 #88 #87 (감사합니다 @Jackjefferson, @dpruessner)
- 테스트 프레임 업데이트
새로운 API 기능 :
-
SPIFFS_ix_map 파일의 메모리에 대한 맵 인덱스 메타 데이터 -
SPIFFS_ix_unmap 파일에 대한 인덱스 메타 데이터 -
SPIFFS_ix_remap 인덱스 메타 데이터 맵의 파일 오프셋을 변경합니다 -
SPIFFS_bytes_to_ix_map_entries 유틸리티, 주어진 양의 바이트에 필요한 벡터 길이를 얻으십시오. -
SPIFFS_ix_map_entries_to_bytes 유틸리티, 벡터가 주어진 길이를 나타낼 수있는 바이트 수 얻기
새로운 구성은 다음과 같습니다.
-
SPIFFS_IX_MAP 더 빠른 읽기를 위해 인덱스 메타 데이터를 메모리에 매핑 할 가능성 -
SPIFFS_TEMPORAL_FD_CACHE 파일을 더 빨리 열기위한 시간적 캐시를 활성화합니다 -
SPIFFS_TEMPORAL_CACHE_HIT_SCORE 시간적 캐시를 조정하려면
0.3.5
- FS 체크에서 버그를 수정했습니다
- API는 실제 오류 코드를 반환합니다 #84) (감사합니다 @nails)
- 비 GCC #83 #81에 대한 컴파일러 경고 수정 (@nails 감사합니다)
- 전체 FS #82에서 복구 할 수 없습니다 (@Rojer 감사합니다)
- spiffs_o_* 플래그 #80 정의
- Long Filenames #79의 문제 (감사합니다 @psjg)
- 중복 파일 이름 버그 수정 #74 (감사합니다 @igrr)
- spiffs_eof and spiffs_tell 반품 잘못된 가치 #72 (감사합니다 @ArtemPisarenko)
- TestFrame 업데이트의 무리 #77 #78 #86 (감사합니다 @DPREUSSNER, @PSJG AO)
0.3.4
- 사용자 콜백 파일 func가 추가되었습니다.
- OBJ ID로 통계 버그를 수정했습니다.
- spiffs_probe_fs가 추가되었습니다
- 읽기 전용 버전의 Spiffs를 컴파일 할 가능성을 추가하십시오
- 필요한 경우 FS 길이에 마법을 사용하십시오 ( #59 & #66 참조) (감사합니다 @hreintke)
- 노출 된 spiffs_open_by_page_function
- 제로 크기 파일은 #57을 찾을 수 없습니다 (감사합니다 @lishen2)
- 텔과 EOF 함수 추가 #54 (감사합니다 @Raburton)
- API 문자열 매개 변수 const #53을 만들기
- mount () #51 동안 user_data를 보존하십시오 (감사합니다 @rojer)
새로운 API 기능 :
-
SPIFFS_set_file_callback_func 파일 이벤트에 대해 알리는 콜백을 등록하십시오 -
SPIFFS_probe_fs fs의 크기를 파악하려고 노력하는 SPI 플래시 프로브 -
SPIFFS_open_by_page 페이지별로 파일을 엽니 다 -
SPIFFS_eof 파일 끝에 도달하는지 확인합니다 -
SPIFFS_tell 현재 파일 오프셋을 반환합니다
새로운 구성은 다음과 같습니다.
-
SPIFFS_READ_ONLY -
SPIFFS_USE_MAGIC_LENGTH
0.3.3
0.3.2 구조와 호환되지 않을 수 있습니다. 문제 #40을 참조하십시오
- 파일 핸들에 정수 오프셋을 추가 할 수 있습니다
- Truncate 기능은 무료 페이지 #49가 너무 적습니다
- Truncate 기능 #48의 버그 (감사합니다 @paweldefee)
- SPIFFS_GC.C 업데이트 - 불필요한 매개 변수 제거 (감사합니다 @PawelDefee)
- 통합 문서 업데이트 (감사합니다 @paweldefee)
- 64 비트 플랫폼에서 포인터 잘림 수정 (감사합니다 @igrr)
- 제로 크기 파일을 읽을 수 없습니다 #44 (감사합니다 @rojer)
- (더) OBJ_LU_FIND #42 #41에서 MAX_ID의 올바른 계산 ( @lishen2 감사합니다)
- OBJ_LU_FIND_FREE #41에서 올바른 오류 코드를 확인하십시오 (감사합니다 @lishen2)
- spiffs_lseek에 대한 MOAR 의견 (감사합니다 @igrr)
- spiffs_page_object_ix #40에서 고정 패딩 (@jmattsson @lishen2에 감사드립니다)
- 고정 gc_quick 테스트 (감사합니다 @jmattsson)
- spiffs_excl 플래그 #36을 추가하십시오
- 캐시가 활성화되면 SPIFFS_CLOSE가 조용히 실패 할 수 있습니다. #37
- 콜백 #34의 사용자 데이터
- 캐시 설정에서 싱글 톤 빌드 무시 (Luca 감사합니다)
- 컴파일 오류 수정 #32 (감사합니다 @chotasanjiv)
- CAND_SCORES 정렬 (감사합니다 @Hefloryd)
- spiffs_cache가 0 인 경우 빌드 경고 수정 (@jaybhargav 감사합니다)
새로운 구성은 다음과 같습니다.
0.3.2
- 캐시 크기 제한 캐시가 너무 많으면 (감사합니다 pgeiem)
- 새로운 기능 - 제어 지우기. #23
- spiffs_rename 누출 파일 설명자 #28 (감사합니다 벤피코)
- MAVED DBG Print는 테스트 프레임 워크에서 Params_test.h로 정의합니다
- Lseek은 결과 오프셋을 반환해야합니다 (감사합니다 Hefloryd)
- DBG IFDEF의 고정 유형
- Spiffs_OBJ_ID가 32 비트 인 경우 서명/부호없는 비교에 대한 침묵 경고 (Benpicco 감사합니다)
- test_spiffs.c #21의 가능한 오류 (yihcdaso-yeskela 감사합니다)
- 캐시는 너무 자주 #16을 쓸 수 있습니다
- Moar Testrunner조차도 업데이트됩니다
- 테스트 프레임 워크 업데이트 및 일부 추가 테스트
- 다음 세대에 대한 몇 가지 생각
- 너무 많은 부문 #13을 가질 때 SIGSEV를 테스트하십시오 (단지 WolfX2 감사합니다)
- GC는 차선책 #11 일 수 있습니다
- 마지막 블록에서 Objheader 일 때 Eternal Readdir를 수정하십시오. 마지막 항목
새로운 API 기능 :
-
SPIFFS_gc_quick 무제성 GC에 전화하십시오 -
SPIFFS_gc 본격적인 침입 GC를 호출하십시오
0.3.1
- 두 번의 반환 경고를 제거했는데, 출시시 너무 끔찍했습니다
0.3.0
- 파일을 만들 때 기존 이름 지정이 추가되었습니다
- 많은 정적 분석 버그 #6
- 이름 변경 기능이 추가되었습니다
- 파일 크기를 넘어서 읽을 때 spiffs_read 길이를 수정하십시오
- 파일 길이 테스트 케이스 너머로 읽기가 추가되었습니다
- 좀 더 구성 가능하게 만들었습니다
- mingw에서 컴파일하는 충돌로 인해 "errno"에서 "err_code"로 Spiffs의 이름이 변경되었습니다.
- 개선 된 GC 수표, 부속 버그 수정, 매우 특별한 경우에 대한 더 강력한 자손
- GC는 GC를 선점하고 훨씬 덜 까다 롭습니다
- 일부 대상에 필요한 구조 정렬, Spiffs Config #10에서 정의
- spiffs filesystem magic, config에서 정의 가능
새로운 구성은 다음과 같습니다.
-
SPIFFS_USE_MAGIC 마운트시 매직 점검을 활성화 또는 비활성화하십시오 -
SPIFFS_ALIGNED_OBJECT_INDEX_TABLES 특정 대상의 정렬
새로운 API 기능 :
-
SPIFFS_rename 파일 이름 바꾸기 -
SPIFFS_clearerr 마지막 errno를 지 웁니다 -
SPIFFS_info FS의 중고 및 총 바이트에 대한 정보를 반환합니다. -
SPIFFS_format 파일 시스템 형식 -
SPIFFS_mounted 파일 시스템이 장착되어 있는지 확인합니다