FatFS

From ERIKA WIKI
Revision as of 13:52, 7 March 2019 by L.cuomo (talk | contribs) (Created page with "= Introduction = FatFs is a tiny library which provides FAT/exFAT support for small embedded systems. File system functionalities are separated from the disk I/O layer and ar...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Introduction

FatFs is a tiny library which provides FAT/exFAT support for small embedded systems. File system functionalities are separated from the disk I/O layer and are easy to configure by enabling/disabling options.
The stack support will be provided in the next release of Erika with a memory driver which basically exports a portion of memory as a block device.
The following sections describe how to use use a subset of basic functionalities of FatFs.

Erika/FatFS demo on Jetson TX2 with Jailhouse Hypervisor (aarch64)

This demo shows how to handle directories/files on a FAT file system on Erika Enterpries v3 running as a Jailhouse inmate on Jetson TX2 board:

  1. Download the FatFs library as archive from the Download section on http://elm-chan.org/fsw/ff/00index_e.html or simply clone the Git reposity from https://github.com/RIOT-OS/FatFS.git
  2. In the FatFs downloaded sources enable the Long Filename Support and the Mkfs function (in /full/paty/FatFS/source/ffconf.h enable the defines #define FF_USE_LFN 1 and #define FF_USE_MKFS 1)
  3. Set the build environment as described in Nvidia Jetson TX1 and TX2 (cross-toolchain, Jetson platform setup, Jailhouse cross-compiling)
  4. Run the RT-Druid tool
  5. Create a new project by clicking on NewRT-Druid v3 Oil and C/C++ Project as shown in the next Figure:
    Figure 1: Create a new RT-Druid project.
  6. Name the new project (e.g., mytest) and select the Cross-GCC as shown in the next Figure:
    Figure 2: Naming the new RT-Druid project.
  7. Check the box for using an existing template and select aarch64JailhouseFatFsFatFs usage on memoryas shown in the next Figure:
    Figure 3: Selecting the FatFs template.
  8. Right click the project and select Properties as shown in the following Figure:
    Figure 4: Eclipse project properties.
  9. Click OilGenerator properties, enable project specific settings and specify the directory containing the FatFs library for ERIKA3:
    Figure 5: Setting the path of the FatFs library.
  10. Configure the RT-Druid as described in Nvidia Jetson TX1 and TX2#RT-Druid set-up

Creating a private FAT file system on Erika

When the #define EE_MEM_LOCAL is enabled in main.c, Erika will perform such actions:

  1. Before starting OS, will:
    • inizialize the fmem driver
    • create a FAT file system on an array located in .data section of the executable
    • create the directory test
    • create the file erika.txt in the directory test
  2. The Task1 will dump the directories and files content ( output should look like this):
    Figure 6: Application output on private file system.

Sharing a FAT file system with Linux

When the #define EE_MEM_LOCAL is disabled in main.c, Erika expects to find a valid FAT file system at the address location #define memory (const void*)(0x274800000).
This address represents the start of a shared memory region between Erika and Linux where the latter must provide a valid file system (see next subsections).
After proper fmem initialization with the shared memory address, Erika will perform the same actions of directory/file creation described in the previous example.
Please note that the memory region must be mapped into the inmate address space through the map_range function.

Furthermore Jailhouse should be aware of this shared region. This is achieved by putting in both the root cell and inmate cell the section:

                {     
                       .phys_start = 0x274800000,
                       .virt_start = 0x274800000,
                       .size = 0x80000,
                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE
                       | JAILHOUSE_MEM_ROOTSHARED,
                 },


NOTE: configurations sources are jetson-tx2.c and jetson-tx2-demo.c located in the folder configs/arm64 of the Evidence Jailhouse repository cloned from https://github.com/evidence/linux-jailhouse-jetson.git. Don't forget to increase the struct jailhouse_memory mem_regionsnumber at the beginning of the files.
After configurations' update, they must be rebuilt (follow instruction in the README.md of the same repository).

Providing a file system with FatFS built for Linux

TBD

Providing a file system mkfs/dd

TBD