Home

gko

Welcome to your wiki!

This is the default page, edit it as you see fit. To add a new page simply reference it within brackets, e.g.: [SamplePage].

The wiki uses Markdown syntax.

Project Members:


  • gko
    gko
    2013-11-11

    About lwext4

    The main goal of the lwext4 project is to provide ext2/3/4 filesystem library for microcontrolers with SD/MMC card support.

    Contact:
    kostka.grzegorz@gmail.com

    Minimum memory requirements

    MEMORY SIZE
    PROGRAM 20 KB
    RAM 8 KB
    STACK 2 KB

    ext2/3/4 vs FAT32

    ext2/3/4 > FAT32
    ext2/3/4 < FAT32
    • FAT32 has smaller footprint

    Credits lwext4

    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 (could be ignored)
    • journal_dev: no
    • meta_bg: yes
    • extents: yes
    • 64bit: yes
    • mmp: no (could be ignored)
    • flex_bg: yes
    • ea_inode: no
    • dirdata: no
    • bg_meta_csum: no
    • largedir: no
    • inline_data: 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: yes (obsolete)
    • huge_file: yes
    • gdt_csum: yes
    • dir_nlink: yes
    • extra_isize: yes
    • quota: no
    • bigalloc: no
    • metadata_csum: no

    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
    • Makefile - helper makefile to call cmake
    • readme.mediawiki - yes, you are here ;)

    Compile: Windows

    Tools needed:

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

    Ports

    Build STM32F429 Demo:
    make cortex-m4
    cd build_cortex-m4
    make all

    Footprint

    TOOLCHAIN: arm-none-eabi-gcc
    OPT: O2

    text data bss filename
    648 0 0 ext4_inode.c
    1064 0 0 ext4_crc32c.c
    2124 0 0 ext4_blockdev.c
    372 0 0 ext4_bitmap.c
    1184 0 0 ext4_hash.c
    2852 0 0 ext4_balloc.c
    1844 0 0 ext4_dir.c
    2904 0 0 ext4_dir_idx.c
    972 0 0 ext4_bcache.c
    552 0 0 ext4_block_group.c
    744 0 0 ext4_ialloc.c
    5408 0 0 ext4.c
    600 0 0 ext4_super.c
    24 0 4 ext4_debug.c
    3092 0 0 ext4_extent.c
    6424 0 0 ext4_fs.c
     
    Last edit: gko 2014-11-05