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.
 
 
 
ngkaho1234 fa3b47a25d ext4_journal: fix jbd_trans_get_access flushing the wrong buffer. 9 years ago
blockdev Convert to linux line endings in multiple files 9 years ago
fs_test fs_test/lwext4_generic: free rw_buff after use. 9 years ago
lwext4 ext4_journal: fix jbd_trans_get_access flushing the wrong buffer. 9 years ago
toolchain Convert to linux line endings in multiple files 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 Convert to linux line endings in multiple files 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 Add to readme new windows build instruction 9 years ago
ext_images.7z BUGFIX: 11 years ago
fs_test.mk Add one second sleep between server execute and tests 9 years ago

README.md

Build Status

lwext4

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

Dependencies

  • Windows

Download MSYS-2: https://sourceforge.net/projects/msys2/

Install required packages is MSYS2 Shell package manager:

 pacman -S make gcc cmake p7zip
  • Linux

Package installation (Debian):

 apt-get install make gcc cmake p7zip

Compile & install tools

 make generic
 cd build_generic
 make
 sudo make install

lwext4-generic demo application

Simple lwext4 library test applicatin:

  • 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:

 lwext4-generic -i ext_images/ext2 
 lwext4-generic -i ext_images/ext3 
 lwext4-generic -i ext_images/ext4 

Show full option set:

 lwext4-generic --help

Run automatic tests

Execute tests for 100MB unpacked images:

 make test

Execute tests for autogenerated 1GB images (only on Linux targets) + fsck:

 make test_all

Using lwext4-mkfs tool

It is possible to create ext2/3/4 partition by internal library tool.

Generate empty file (1GB):

 dd if=/dev/zero of=ext_image bs=1M count=1024

Create ext2 partition:

 lwext4-mkfs -i ext_image -e 2

Create ext3 partition:

 lwext4-mkfs -i ext_image -e 3

Create ext4 partition:

 lwext4-mkfs -i ext_image -e 4

Show full option set:

 lwext4-mkfs --help

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