No Description

Grzegorz Kostka bfd9bc13a7 0.4.0 tag 12 years ago
blockdev baca746b7c Remove warnings. Default port to 1234. 12 years ago
demos c0e969b58c * STM32F429 demo in cache writeback mode 12 years ago
fs_test ecd5ba9483 Licence header. 12 years ago
lwext4 7bcc41c6e6 Fixed extent depth after truncate. 12 years ago
toolchain 148f66ad79 Comments and some minor fixes. 12 years ago
CMakeLists.txt 6a8f01789b Version update. 12 years ago
Makefile 7d363c289f Minor changes in makefiles. 12 years ago
ext4.h d235411a13 Write back cache mode. 12 years ago
ext_images.7z 974cf28b9b BUGFIX: 12 years ago
fs_test.mk 246967dcfe Add new tests (large files tests). 12 years ago
readme.mediawiki 4b9c29f998 Typo fix. 12 years ago

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)