ngkaho1234
f3e06a2a6d
|
9 years ago | |
---|---|---|
blockdev | 9 years ago | |
fs_test | 9 years ago | |
lwext4 | 9 years ago | |
toolchain | 9 years ago | |
.clang-format | 9 years ago | |
.gitignore | 9 years ago | |
.travis.yml | 9 years ago | |
CHANGELOG | 9 years ago | |
CMakeLists.txt | 9 years ago | |
Makefile | 9 years ago | |
README.md | 9 years ago | |
ext_images.7z | 11 years ago | |
fs_test.mk | 9 years ago |
README.md
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:
- http://helenos.org/ Some features are based on FreeBSD and Linux implementations.
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 application:
- 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