shithub: lwext4

ref: b37b80f57b925327aa624a2b1f79e1db06368c9a
dir: /readme.mediawiki/

View raw version
==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
 generic --in ext2 

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

Linux block devices:
 cd build_generic
 generic --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 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

==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)