Skip to content

piotrkowalczuk/lwext4

 
 

Repository files navigation

Table of Contents

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

Credits

The most of the source code of lwext4 was taken from HelenOS:

Some features are based on FreeBSD and Linux implementations.

KaHo Ng (https://github.com/ngkaho1234):

  • advanced extents implementation
  • xattr support
  • metadata checksum suport
  • many bugfixes & improvements
fuse-lwext4 project:

Features

  • filetypes: regular, directories, softlinks
  • support for hardlinks
  • multiple blocksize supported: 1KB, 2KB, 4KB ... 64KB
  • little/big endian architectures supported
  • multiple configurations (ext2/ext3/ext4)
  • only C standard library dependency
  • various CPU architectures supported (x86/64, cortex-mX, msp430 ...)
  • small memory footprint
Memory footprint (for cortex-m4):
  • .text: 20KB - 40KB
  • .data: 8KB (minimum 8 x 1KB block cache)
  • .stack: 2KB

Supported ext2/3/4 features

Features incompatible:
  • compression: no
  • filetype: yes
  • recover: no
  • journal_dev: no
  • meta_bg: yes
  • extents: yes
  • 64bit: yes
  • mmp: no
  • flex_bg: yes
  • ea_inode: no
  • dirdata: no
  • bg_meta_csum: no
  • largedir: no
  • inline_data: no
Features compatible:
  • dir_prealloc: no
  • imagic_inodes: no
  • has_journal: no
  • ext_attr: yes
  • resize_inode: no
  • dir_index: yes
Features read-only:
  • sparse_super: yes
  • large_file: yes
  • btree_dir: yes
  • huge_file: yes
  • gdt_csum: yes
  • dir_nlink: yes
  • extra_isize: yes
  • quota: no
  • bigalloc: no
  • metadata_csum: yes

Project tree

  • blockdev - block devices set, supported blockdev
  • demos - demo directory sources
  • fs_test - test suite
  • 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 generate cmake and run test suite
  • readme.mediawiki - readme file

Compile

Windows:

Linux:
  • CMake, make, gcc
Generate makefiles:
 make

Compile
 cd build_generic
 make

Generic demo application

Simple lwext4 library presentation:

  • 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 for images/blockdevices:

 cd build_generic
 generic -i ext_images/ext2 
 generic -i ext_images/ext3 
 generic -i ext_images/ext4 

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 for one of the image file:

 make server_ext2
 make server_ext3
 make server_ext4

Execute tests:

 make test

Cross compile standalone library

Toolchains needed:

  • arm-none-eabi-gcc for cortex-mX
  • avr-gcc for avr
  • bfin-elf-gcc for bfin
  • msp430-gcc for msp430
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

About

ext2/ext3/ext4 filesystem library for microcontrollers

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 94.3%
  • Makefile 3.5%
  • CMake 1.7%
  • C++ 0.5%