========================= etc romfs ========================= The ROMFS image is the contents of the ``/etc`` directory, including the start-up script contains any command support by Nuttx, and other customized contents needed. Configuration ============= .. code-block:: console CONFIG_NSH_ROMFS /* Mount a ROMFS file system at "/etc" and provide a system init script at "/etc/init.d.rc.sysinit" and a startup script at "etc/init.d/rcS". */ CONFIG_ETC_ROMFSMOUNTPT /* The default mountpoint for the ROMFS volume is "/etc", but that can be changed with this setting. This must be a absolute path beginning with '/' and enclosed in quotes. */ CONFIG_ETC_ROMFSDEVNO /* This is the minor number of the ROMFS block device. The default is '0' corresponding to "/dev/ram0". */ CONFIG_ETC_ROMFSSECTSIZE /* This is the sector size to use with the ROMFS volume. Since the default volume is very small, this defaults to 64 but should be increased if the ROMFS volume were to be become large. Any value selected must be a power of 2. */ This capability also depends on: .. code-block:: console CONFIG_DISABLE_MOUNTPOINT /* If mount point support is disabled, then you cannot mount any file systems. */ CONFIG_FS_ROMFS /* This option enables ROMFS file system support. */ Start up Scripts ================ **Start-Up Script**. The start-up script contains any command support by Nuttx (i.e., that you see when you enter 'nsh> help'). The implementation that is provided is intended to provide great flexibility for the use of Start-Up files. This paragraph will discuss the general behavior when all of the configuration options are set to the default values. In this default case, enabling ``CONFIG_ETC_ROMFS`` will cause Nuttx to behave as follows at Nuttx start-up time: - Nuttx will create a read-only RAM disk (a ROM disk), containing a tiny ROMFS file system containing the following:: `--init.d/ `-- rcS `-- rc.sysinit Where ``rcS`` is the start-up script. Where ``rc.sysinit`` is the system-init script. - Nuttx will then mount the ROMFS file system at ``/etc``, resulting in:: |--dev/ | `-- ram0 `--etc/ `--init.d/ `-- rcS `-- rc.sysinit - By default, the contents of ``rc.sysinit`` script are:: # Create a RAMDISK and mount it at /tmp mkrd -m 1 -s 512 1024 mkfatfs /dev/ram1 mount -t vfat /dev/ram1 /tmp - NSH will execute the script at ``/etc/init.d/rc.sysinit`` at system init (before the first NSH prompt). After execution of the script, the root FS will look like:: |--dev/ | |-- ram0 | `-- ram1 |--etc/ | `--init.d/ | `-- rcS | `-- rc.sysinit `--tmp/ **Example Configurations**. Here are some configurations that have ``CONFIG_ETC_ROMFS=y`` in the NuttX configuration file. They might provide useful examples: - ``boards/arm/stm32/hymini-stm32v/nsh2`` - ``boards/arm/dm320/ntosd-dm320/nsh`` - ``boards/sim/sim/sim/nsh`` - ``boards/sim/sim/sim/nsh2`` - ``boards/sim/sim/sim/nx`` - ``boards/sim/sim/sim/nx11`` - ``boards/sim/sim/sim/touchscreen`` In most of these cases, the configuration sets up the *default* ``/etc/init.d/rc.sysinit`` and ``/etc/init.d/rcS`` script. The default script is here: ``apps/nshlib/rc.sysinit.template`` and ``apps/nshlib/rcS.template``. (The funny values in the rc.sysinit.template like ``XXXMKRDMINORXXX`` get replaced via ``sed`` at build time). This default configuration creates a ramdisk and mounts it at ``/tmp`` as discussed above. Customizing Start up Scripts ============================ In order to modify the start-up behavior, there are three things to study: #. **Configuration Options.** The additional ``CONFIG_ETC_ROMFS`` configuration options discussed with `Configuration` #. ``tools/mkromfsimg.sh`` **Script**. The script ``tools/mkromfsimg.sh`` creates ``etc_romfs.c``. It is not automatically executed. If you want to change the configuration settings associated with creating and mounting the ``/tmp`` directory, then it will be necessary to re-generate this header file using the ``tools/mkromfsimg.sh`` script. The behavior of this script depends upon several things: #. The configuration settings then installed configuration. #. The ``genromfs`` tool(available from `http://romfs.sourceforge.net `__) or included within the NuttX buildroot toolchain. There is also a snapshot available in the NuttX tools repository `here `__. #. The ``xxd`` tool that is used to generate the C header files (xxd is a normal part of a complete Linux or Cygwin installation, usually as part of the ``vi`` package). #. The file ``include/arch/board/rc.sysinit.template`` and the file ``include/arch/board/rcs.template`` #. ``rc.sysinit.template``. The file ``apps/nshlib/rc.sysinit.template`` contains the general form of the ``rc.sysinit`` file; configured values are plugged into this template file to produce the final ``rc.sysinit`` file. ``rcS.template``. The file ``apps/nshlib/rcS.template`` contains the general form of the ``rcS`` file; configured values are plugged into this template file to produce the final ``rcS`` file. To generate a custom ``rc.sysinit`` and ``rcS`` file a copy of ``rc.sysinit.template`` and ``rcS.template`` needs to be placed at ``tools/`` and changed according to the desired start-up behaviour. Running ``tools/mkromfsimg.h`` creates ``etc_romfs.c`` which needs to be copied to ``arch/board/src`` and compiled in Makefile All of the startup-behavior is contained in ``rc.sysinit.template`` and ``rcS.template``. The role of ``mkromfsimg.sh`` script is to (1) apply the specific configuration settings to ``rc.sysinit.template`` to create the final ``rc.sysinit``, and ``rcS.template`` to create the final ``rcS``, and (2) to generate the source file ``etc_romfs.c`` containing the ROMFS file system image. To do this, ``mkromfsimg.sh`` uses two tools that must be installed in your system: #. The ``genromfs`` tool that is used to generate the ROMFS file system image. #. The ``xxd`` tool that is used to create the C header file. Customizing ROMFS Image ======================= The ROMFS image can be generated from the content in the corresponding ``board/arch/board/board/src/etc`` directory, and added by Makefile. **Example Configurations**. Here are some configurations that have ``CONFIG_ETC_ROMFS=y`` in the NuttX configuration file. They might provide useful examples: - ``boards/risc-v/bl808/ox64/src/etc`` - ``boards/risc-v/qemu-rv/rv-virt/src/etc`` - ``boards/risc-v/esp32c3/esp32c3-devkit/src/etc`` - ``boards/risc-v/k230/canmv230/src/etc`` - ``boards/risc-v/jh7110/star64/src/etc`` - ``boards/arm64/rk3399/nanopi_m4/src/etc`` - ``boards/sim/sim/sim/src/etc``