|
|
|
==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
|
|
|
|
- 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 applicarion==
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
==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
|
|
|
|
|
|
|
|
Build cortex-m3 library:
|
|
|
|
make cortex-m3
|
|
|
|
|
|
|
|
Build cortex-m4 library:
|
|
|
|
make cortex-m4
|
|
|
|
|
|
|
|
==Ports==
|
|
|
|
*Blackfin BF518 EZKIT SD Card Demo: TBD
|
|
|
|
*STM32F4-Discovery SD Card Demo: TBD
|
|
|
|
|
|
|
|
==Footprint==
|
|
|
|
|
|
|
|
TBD
|