X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=readme.mediawiki;h=b97c3d46f7977a87fb5148df5977919c32ad55b1;hb=c7c5aba4d7e3af2e3676051d14ed9512fac76bc2;hp=11a1cf46368d093b6431aa0b87a27a63e8fbb8ee;hpb=b6056a57e3b1d82324da37a5f371b303144ce19e;p=lwext4.git diff --git a/readme.mediawiki b/readme.mediawiki index 11a1cf4..b97c3d4 100644 --- a/readme.mediawiki +++ b/readme.mediawiki @@ -1,232 +1,186 @@ -==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 suitr== - -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) - \ No newline at end of file +==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 +