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