You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
gkostka c8e804846c Add lock/unlock functions to blockdev_iface 9 years ago
blockdev Add lock/unlock functions to blockdev_iface 9 years ago
fs_test ext4_bcache & ext4_blockdev: Buffer cache rework. 9 years ago
lwext4 Add lock/unlock functions to blockdev_iface 9 years ago
toolchain Set std=gnu11 as default 9 years ago
.clang-format Linux codestyle format (tabs indenation) 9 years ago
.gitignore Update .gitignore 9 years ago
.travis.yml Fix travis build 9 years ago
CHANGELOG Add CHANGELOG & version bump to 0.8.0 9 years ago
CMakeLists.txt Set new default configuration (remove some unnecessary definitions) 9 years ago
Makefile Enable debug symbols generation in generic build 9 years ago
README.md Readme update 9 years ago
ext_images.7z BUGFIX: 11 years ago
fs_test.mk Add more test cases 10 years ago

README.md

Build Status

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:

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

  • advanced extents implementation
  • xattr support
  • metadata checksum support
  • journal recovery
  • 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: yes (in progress)
  • 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
  • fs_test - test suite, mkfs and demo application
  • 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
 lwext4_generic -i ext_images/ext2 
 lwext4_generic -i ext_images/ext3 
 lwext4_generic -i ext_images/ext4 

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