ref: daf0d53c33e9427c3eb66b6e572798017249011b
dir: /readme.mediawiki/
==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