shithub: lwext4

ref: daf0d53c33e9427c3eb66b6e572798017249011b
dir: /readme.mediawiki/

View raw version
==About==

The main goal of the lwext4 project is to provide ext2/3/4 filesystem for microcontrollers. It may be an interesting alternative for traditional MCU filesystem libraries (mostly based on FAT32).

Lwext4 may be used with SD/MMC card, USB flash drive or other block based memory device. However it is not good for flash memory–based storage devices.

Code is also available on github:
https://github.com/gkostka/lwext4

Feel free to contact me:
kostka.grzegorz@gmail.com

==Minimum memory requirements==
* .text:  20KB - 40KB (dependent of feature set chosen)
* .data:  8KB         (minimum 8 x 1KB  block cache)
* .stack: 2KB


==ext2/3/4 vs FAT32==
;ext2/3/4 > FAT32
* fast fseek on big file (in FAT32 fseek equals many IO operations)
* ext2/3/4 HTREE directory operations (like find entry) are faster
* fast extent big file allocation (truncate/remove)
* more at https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout

;ext2/3/4 < FAT32
* FAT32 has smaller footprint

==Credits==

The most of the source code of lwext4 was taken from HelenOS:
* http://helenos.org/
Some features are based on FreeBSD and Linux implementations.

==Supported ext2/3/4 fs features==
;Features incompatible (unable to mount when NOT supported):
*  compression: no
*  filetype: yes
*  recover: no (could be ignored)
*  journal_dev: no
*  meta_bg: yes
*  extents: yes
*  64bit: yes
*  mmp: no (could be ignored)
*  flex_bg: yes
*  ea_inode: no
*  dirdata: no
*  bg_meta_csum: no
*  largedir: no
*  inline_data: no
;Features compatible (mount when NOT supported is possible):
*  dir_prealloc: no
*  imagic_inodes: no
*  has_journal: no
*  ext_attr: no (work in progress)
*  resize_inode: no
*  dir_index: yes
;Features read-only (mount in RO mode when NOT supported):
*  sparse_super: yes
*  large_file: yes
*  btree_dir: yes (obsolete)
*  huge_file: yes
*  gdt_csum: yes
*  dir_nlink: yes
*  extra_isize: yes
*  quota: no
*  bigalloc: no
*  metadata_csum: no (to be done ...)

==Supported filetypes:==
* FIFO:      no
* CHARDEV:   no
* DIRECTORY: yes
* BLOCKDEV:  no
* FILE:      yes (hardlinks supported)
* SOFTLINK:  yes
* SOCKET:    no

==Other==
 - block_size: 1KB, 2KB, 4KB ... 64KB
 - little/big endian architecture support

==Project tree==
*  blockdev         - block devices set, supported blockdev
*  demos            - demo directory sources
*  lwext4           - internals of the lwext4 library
*  toolchain        - specific toolchain cmake files
*  CMakeLists.txt   - CMake config file
*  ext_images.7z    - compressed ext2/3/4 100MB images
*  fs_test.mk       - automatic tests definitions
*  Makefile         - helper makefile to trigger cmake, tests
*  readme.mediawiki - readme file
  
==Compile: Windows==
Requirements:
* CMake:  http://www.cmake.org/cmake/resources/software.html
* MinGw:  http://www.mingw.org/
* GnuWin: http://gnuwin32.sourceforge.net/ 

;Create CMake files:
 make

;Remove CMake files:
 clean

;Build
 cd build_generic
 make

==Compile: Linux==

Requirements:
* CMake:  http://www.cmake.org/cmake/resources/software.html
 
;Create CMake files:
 make

;Remove CMake files:
 clean

;Build
 cd build_generic
 make

==Generic demo application==
Features:
* load ext2/3/4 images
* load linux block device with ext2/3/4 part
* load windows volume with ext2/3/4 filesystem 
* directory speed test
* file write/read speed test

How to use:
Windows/Linux fileimages:
 cd build_generic
 generic --in ext2 

Windows volumes:
 cd build_generic
 generic --in I: --wpart

Linux block devices:
 cd build_generic
 generic -i /dev/your_block_device

==Build and run automatic tests==
Build and run automatic tests
Build automatic test tools:
 make
 cd build_generic
 make
Uncompress ext/2/3/4 images:
 make unpack_images
Run server app for predefined images:
 make server_ext2
 make server_ext3
 make server_ext4
Run tests:
 make test

==Cross-Compile standalone library==
Build bf518 library:
 make bf518
 cd build_bf518
 make lwext4

Build avrxmega7 library:
 make avrxmega7
 cd build_avrxmega7
 make lwext4

Build cortex-m0 library:
 make cortex-m0
 cd build_cortex-m0
 make lwext4

Build cortex-m3 library:
 make cortex-m3
 cd build_cortex-m3
 make lwext4

Build cortex-m4 library:
 make cortex-m4
 cd build_cortex-m4
 make lwext4