ref: 49363e93477e3a0065dbc73da9b383a8e52aefe3
dir: /readme.mediawiki/
==About== The main goal of the lwext4 project is to provide ext2/3/4 filesystem library for microcontrolers with SD/MMC card support. Ext2/3/4, in my opinion is one of the best filesystem for SD/MMC. kostka.grzegorz@gmail.com ==Minimum memory requirements== =====PROGRAM:===== - 20KB =====RAM:===== - 8KB =====STACK:===== - 2KB ==ext2/3/4 vs FAT32== ;ext2/3/4 > FAT32 * fseek operation on big file in FAT32 is IO heavy * ext2/3/4 HTREE directories operations are faster than FAT32 * ext4 extents makes truncate/remove opertion really fast * more at https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout ;ext2/3/4 < FAT32 * FAT32 has smaller footprint ==Credits== A lot of the implementation of lwext4 was taken from HelenOS: http://helenos.org/ Some of ideas and features are based on FreeBSD and Linux implementations. ==Supported ext2/3/4 fs features== ;FEATURE_INCOMPAT (unable to mount with unsupported feature): COMPRESSION: no FILETYPE: yes RECOVER: no JOURNAL_DEV: no META_BG: no EXTENTS: yes 64BIT: yes MMP: no FLEX_BG: no EA_INODE: no DIRDATA: no ;FEATURE_COMPAT (able to mount with unsupported feature): DIR_PREALLOC: no IMAGIC_INODES: no HAS_JOURNAL: no EXT_ATTR: no RESIZE_INODE: no DIR_INDEX: yes ;FEATURE_RO (able to mount in read only mode): SPARSE_SUPER: yes LARGE_FILE: yes BTREE_DIR: no HUGE_FILE: yes GDT_CSUM: yes DIR_NLINK: yes EXTRA_ISIZE: yes ==Supported filetypes:== FIFO: no CHARDEV: no DIRECTORY: yes BLOCKDEV: no FILE: yes SOFTLINK: no SOCKET: no ==Other== - block_size: 1KB, 2KB, 4KB ... 64KB - little/big endian architecture support ==Project tree== - blockdev - block devices set, supported blockdevs -- filedev - file based block device -- io_raw - wiodows IO block device - demos - demo directory sources -- generic - generic demo app, used for development and and debbuging purpose - lwext4 - internals of the lwext4 library - toolchain - specific toolchain cmake files - ext4.h - lwext4 client library header - CMakeLists.txt - CMake config file - ext_images.7z - ext2/3/4 100MB images - fs_test.mk - automatic tests definition - Makefile - helper makefile to call cmake - readme.mediawiki - yes, you are here ;) ==Compile: Windows== ;Tools needed: * 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== Tools needed: - 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 fileimage_demo --in ext2 Windows volumes: cd build_generic fileimage_demo --in I: --wpart Linux block devices: cd build_generic fileimage_demo --in /dev/your_block_device Usage: --i - input file (default = ext2) --rws - single R/W size (default = 1024 * 1024) --rwc - R/W count (default = 10) --cache - 0 static, 1 dynamic (default = 1) --dirs - directory test count (default = 0) --clean - clean up after test --bstat - block device stats --sbstat - superblock stats --wpart - windows partition mode ==Client-server automatic test suite== Build: make cd build_generic make Unpack images: make unpack_images Run server: make server_ext2 Run tests: make all_tests ==Cross-Compile== Toolchain for ARM Cortex-m3/4: https://launchpad.net/gcc-arm-embedded Toolchain for Blackfin: http://blackfin.uclinux.org/doku.php Build bf518 library: make bf518 cd build_bf518 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 ==Ports== STM32F429-DISCO USB flash drive Demo Build STM32F429 Demo: make cortex-m4 cd build_cortex-m4 make all ==Footprint== TOOLCHAIN: arm-none-eabi-gcc OPT: Os OUTPUT: text data bss dec hex filename 5728 0 0 5728 1660 ext4.c.obj (ex liblwext4.a) 2264 0 0 2264 8d8 ext4_balloc.c.obj (ex liblwext4.a) 1324 0 0 1324 52c ext4_bcache.c.obj (ex liblwext4.a) 936 0 0 936 3a8 ext4_bitmap.c.obj (ex liblwext4.a) 2016 0 0 2016 7e0 ext4_blockdev.c.obj (ex liblwext4.a) 624 0 0 624 270 ext4_block_group.c.obj (ex liblwext4.a) 24 0 4 28 1c ext4_debug.c.obj (ex liblwext4.a) 2264 0 0 2264 8d8 ext4_dir.c.obj (ex liblwext4.a) 3204 0 0 3204 c84 ext4_dir_idx.c.obj (ex liblwext4.a) 3104 0 0 3104 c20 ext4_extent.c.obj (ex liblwext4.a) 7360 0 0 7360 1cc0 ext4_fs.c.obj (ex liblwext4.a) 2496 0 0 2496 9c0 ext4_hash.c.obj (ex liblwext4.a) 684 0 0 684 2ac ext4_ialloc.c.obj (ex liblwext4.a) 652 0 0 652 28c ext4_inode.c.obj (ex liblwext4.a) 352 0 0 352 160 ext4_super.c.obj (ex liblwext4.a)