Instead of always enabling fuse for native_posix, let's give users instructions on how to enable it while building. In the documentation: replace the references to native_posix with native_sim, improve the links, mention the flash simulator, and provide a separate subsection for FUSE access. Add a separate test for the sample with fuse access enabled and be sure it is possible to run both this and the basic one with native_sim (was filtered out before for native_posix) Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
231 lines
4.7 KiB
ReStructuredText
231 lines
4.7 KiB
ReStructuredText
.. zephyr:code-sample:: shell-fs
|
|
:name: File system shell
|
|
:relevant-api: file_system_api
|
|
|
|
Access a LittleFS file system partition in flash using the file system shell.
|
|
|
|
Overview
|
|
********
|
|
|
|
This example provides shell access to a LittleFS file system partition in flash.
|
|
|
|
Requirements
|
|
************
|
|
|
|
A board with LittleFS file system support and UART console
|
|
|
|
Building
|
|
********
|
|
|
|
native_sim
|
|
==========
|
|
|
|
You can build this sample for :ref:`native_sim <native_sim>` with:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/subsys/shell/fs
|
|
:board: native_sim
|
|
:goals: build
|
|
:compact:
|
|
|
|
Which by default will use the flash simulator. The flash simulator will use a file,
|
|
:file:`flash.bin`, in the current directory to keep the flash content.
|
|
You have several options to control this. You can check them with:
|
|
|
|
.. code-block:: console
|
|
|
|
zephyr/zephyr.exe -help
|
|
|
|
Check the :ref:`native_sim UART documentation <native_ptty_uart>` for information on how to connect
|
|
to the UART.
|
|
|
|
With FUSE access in the host filesystem
|
|
---------------------------------------
|
|
|
|
If you enable the :ref:`host FUSE filsystem access <native_fuse_flash>`
|
|
you will also have the flash filesystem mounted and accessible from your Linux host filesystem.
|
|
|
|
Before starting a build, make sure that the i386 pkgconfig directory is in your
|
|
search path and that a 32-bit version of libfuse is installed. For more
|
|
background information on this requirement check
|
|
:ref:`the native_sim documentation <native_fuse_flash>`.
|
|
|
|
.. code-block:: console
|
|
|
|
export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/subsys/shell/fs
|
|
:board: native_sim
|
|
:gen-args: -DCONFIG_FUSE_FS_ACCESS=y
|
|
:goals: build
|
|
:compact:
|
|
|
|
Reel Board
|
|
==========
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/subsys/shell/fs
|
|
:board: reel_board
|
|
:goals: build
|
|
:compact:
|
|
|
|
Particle Xenon
|
|
==============
|
|
|
|
This target is customized to support the same SPI NOR partition table as
|
|
the :zephyr:code-sample:`littlefs` sample.
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/subsys/shell/fs
|
|
:board: particle_xenon
|
|
:goals: build
|
|
:compact:
|
|
|
|
Flash load
|
|
==========
|
|
|
|
If you want to use the 'flash load' command then build the sample with the
|
|
'prj_flash_load.conf' configuration file. It has defined a larger RX buffer.
|
|
If the buffer is too small then some data may be lost during transfer of large
|
|
files.
|
|
|
|
Running
|
|
*******
|
|
|
|
Once the board has booted, you will be presented with a shell prompt.
|
|
All file system related commands are available as sub-commands of fs.
|
|
|
|
Begin by mounting the LittleFS file system.
|
|
|
|
.. code-block:: console
|
|
|
|
fs mount littlefs /lfs
|
|
|
|
Loading filesystem from host PC to flash memory
|
|
===============================================
|
|
|
|
Use command:
|
|
|
|
.. code-block:: console
|
|
|
|
flash load <address> <size>
|
|
|
|
It allows loading the data via UART, directly into flash memory at a given
|
|
address. Data must be aligned to a value dependent on the target flash memory,
|
|
otherwise it will cause an error and nothing will be loaded.
|
|
|
|
From the host side file system must be loaded with 'dd' tool with 'bs=64'
|
|
(if the file is loaded in chunks greater than 64B the data is lost and isn't
|
|
received by the Zephyr shell).
|
|
|
|
Example in Zephyr console:
|
|
|
|
.. code-block:: console
|
|
|
|
flash load 0x7a000 0x5000
|
|
|
|
Example in the host PC:
|
|
|
|
.. code-block:: console
|
|
|
|
dd if=filesystem of=/dev/ttyACM0 bs=64
|
|
|
|
During the transfer there are printed messages indicating how many chunks are
|
|
already written. After the successful transfer the 'Read all' message is
|
|
printed.
|
|
|
|
Files System Shell Commands
|
|
===========================
|
|
|
|
Mount
|
|
-----
|
|
|
|
Mount a file system partition to a given mount point
|
|
|
|
.. code-block:: console
|
|
|
|
fs mount (littlefs|fat) <path>
|
|
|
|
Ls
|
|
--
|
|
|
|
List all files and directories in a given path
|
|
|
|
.. code-block:: console
|
|
|
|
fs ls [path]
|
|
|
|
Cd
|
|
--
|
|
|
|
Change current working directory to given path
|
|
|
|
.. code-block:: console
|
|
|
|
fs cd [path]
|
|
|
|
Pwd
|
|
---
|
|
|
|
List current working directory
|
|
|
|
.. code-block:: console
|
|
|
|
fs pwd
|
|
|
|
Write
|
|
-----
|
|
|
|
Write hexadecimal numbers to a given file.
|
|
Optionally a offset in the file can be given.
|
|
|
|
.. code-block:: console
|
|
|
|
fs write <path> [-o <offset>] <hex number> ...
|
|
|
|
Read
|
|
----
|
|
|
|
Read file and dump in hex and ASCII format
|
|
|
|
.. code-block:: console
|
|
|
|
fs read <path>
|
|
|
|
Trunc
|
|
-----
|
|
|
|
Truncate a given file
|
|
|
|
.. code-block:: console
|
|
|
|
fs trunc <path>
|
|
|
|
Mkdir
|
|
-----
|
|
|
|
Create a directory
|
|
|
|
.. code-block:: console
|
|
|
|
fs mkdir <path>
|
|
|
|
Rm
|
|
--
|
|
|
|
Remove a file or directory
|
|
|
|
.. code-block:: console
|
|
|
|
fs rm <path>
|
|
|
|
Flash Host Access
|
|
=================
|
|
|
|
For the :ref:`native sim board <native_sim>` the flash partitions can be accessed from the host
|
|
Linux system.
|
|
|
|
By default the flash partitions are accessible through the directory *flash*
|
|
relative to the directory where the build is started.
|