Difference between revisions of "FatFS"
(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...") |
(→Providing a file system mkfs/dd) |
||
Line 65: | Line 65: | ||
=== Providing a file system with FatFS built for Linux === | === Providing a file system with FatFS built for Linux === | ||
− | |||
− | |||
TBD | TBD |
Revision as of 14:48, 8 March 2019
Contents
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:
- 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
- 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
) - Set the build environment as described in Nvidia Jetson TX1 and TX2 (cross-toolchain, Jetson platform setup, Jailhouse cross-compiling)
- Run the RT-Druid tool
- Create a new project by clicking on
New
→RT-Druid v3 Oil and C/C++ Project
as shown in the next Figure: - Name the new project (e.g.,
mytest
) and select the Cross-GCC as shown in the next Figure: - Check the box for using an existing template and select
aarch64
→Jailhouse
→FatFs
→FatFs usage on memory
as shown in the next Figure: - Right click the project and select
Properties
as shown in the following Figure: - Click
Oil
→Generator properties
, enable project specific settings and specify the directory containing the FatFs library for ERIKA3: - 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:
- 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 directorytest
- inizialize the
- The
Task1
will dump the directories and files content ( output should look like this):
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_regions
number 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