Flash-N-Go Infrastructure


The Flash-N-Go infrastructure (or FnG infrastructure) is a software product for NXP i.MX Edge devices created by SECO. Consisting of three parts: Flash-N-Go Boot, Flash-N-Go System and Flash-N-Go Update; it provides a convenient way of booting, flashing, testing and updating edge devices. FnG Infrastructure is available on the following series of devices:

  • Products of the SAN* family of devices with i.MX6: SANTARO, SANTOKA, SANTINO,…

  • NALLINO with i.MX6ULL

  • TANARO with i.MX8MM


What is …

Flash-N-Go System?

Flash-N-Go System is a versatile Linux distribution to aid with the initial installation, production test and upgrade tasks but is limited to a small set of features. It is sometimes referred to as a management or recovery system. Flash-N-Go System is the backbone of the Flash-N-Go infrastructure.

It is designed to run entirely from RAM and can modify the whole non-volatile memory (eMMC). This enables the user to upgrade anything from inside a Linux based environment.

Pre-installed in the factory, Flash-N-Go System can be used in the field and during development to upgrade the devices and possibly install all components from scratch.

In production, Flash-N-Go System is used to conduct the production test. This de-couples the testing process from the target-end system and makes it possible to test devices with customer-specific OS configurations, with limited testing capabilities.

Flash-N-Go Boot?

Flash-N-Go Boot is a simple, non-interactive and open-source bootloader for i.MX6 and i.MX6ULL devices. With its condensed functionalities, it is capable of initializing the RAM dynamically and booting Linux, Android, and Windows CE.

Even though it uses a serial port to output informative and debugging messages, it does not provide any kind of console interface, network drivers, display drivers or even the capability to write any data to storage media. All installation, configuration, update and other maintenance tasks usually provided by bootloaders like RedBoot, U-Boot, or Barebox are missing in Flash-N-Go Boot on purpose and provided by Flash-N-Go System instead, which is always expected to be installed on a device using Flash-N-Go Boot.

All actions necessary to boot any kind of OS are controlled by one of two simple ASCII-text boot-scripts, which Flash-N-Go Boot looks for in all FAT12/16/32-partitions on the storage medium it is booted from itself. Normally Flash-N-Go Boot looks for a boot-script called boot.cfg. In three special cases it looks for a boot-script called boot-alt.cfg, instead:

  • if no boot.cfg can be found or loaded and executed successfully,

  • if the bootmode-button of the device is pressed during power-up or reset, or

  • if some software - usually a tool called bootselect provided in any OS - has set a special flag in a particular place of non-volatile storage of the system.

Flash-N-Go Boot itself only uses the SoC-internal SRAM for its code and all runtime heap, stack, and data. All other RAM-areas of a device are free to use by boot-scripts and operating systems and as soon as Flash-N-Go Boot has started another binary executable, this, in turn, may also use the SoC-internal SRAM for its own purposes.

By using Flash-N-Go Boot it is possible to use different DDR-memory hardware without adapting the bootloader to the specific RAM configuration, and this makes the SD-RAM equipment of embedded board very flexible. Pre-initialization and matching of the bootloader to board or RAM isn’t necessary.

Flash-N-Go Update?

The Flash-N-Go Update software tool provides an all-in-one update solution for Flash-N-Go System based i.MX6 devices.

Normally coming as a USB flash drive, it uses an auto-start feature of the device to bring up the graphical update process. The available operating systems can be directly downloaded if the device is setup up with internet access and by this provides a way to implement an OTA update behaviour.

Flash-N-Go Update is deprecated and is no longer being supported by SECO.


Basic Flash-N-Go Architecture

The following figure shows the basic boot-up and file system structure of a Flash-N-Go Boot based system.

Basic Flash-N-Go boot-up pattern

The Flash-N-Go architecture consists of the bootloader, the recovery, device-specific data and the target operating system. Flash-N-Go System and the target system may use the device-specific data to initialize and configure hardware interfaces like display, touch and network interfaces.

The first stage bootloader Flash-N-Go Boot initializes the board and decides which OS needs to be booted. The decision is based on the availability of boot-able systems, the hardware boot-mode switch and the internal bootselect setting. The internal boot select setting is stored on the battery-backed RTC, and thus independent of the non-volatile Flash memory (eMMC), but may be impacted by changing the battery.

A regular target OS is booted iff:

  1. A FAT32 partition is available containing a valid boot.cfg file

  2. The bootselect setting set to "regular" or "initialized".

  3. The boot mode button is not pressed.

Otherwise, the Flash-N-Go Boot bootloader will try to load the Flash-N-Go System that resides in a FAT partition containing the boot-alt.cfg file.

Flash-N-Go System is a RAM-based system and is loaded completely into SD-RAM memory by the bootloader and runs from the volatile memory. Thus changes made inside the FnG System, like changes inside the /etc directory will not be stored and lost after reboot. This guarantees a consistent environment after boot and provides a good basis for production tests and installing software.

Because FnG System is designed as a RAM-based system it can be used to change anything on the non-volatile memory including updating Flash-N-Go System itself.

Even though the current systems are Linux based the Flash-N-Go Boot can be used to boot different target OSes like Windows CE or Android.

Flash-N-Go Boot can start the following Linux kernel image and Windows Embedded image types:

  • zImage compressed image

  • uImage compressed image with u-boot header

  • Image uncompressed image

  • BNX (legacy Garz & Fricke) bnx image for Windows Embedded Compact

The shared device-specific data is currently well-supported on iMX6 and iMX6ULL devices. However, i.MX8 devices may use this scheme in the future as well.


Partition layout

The current backing-storage type of Flash-N-Go is eMMC (using the Linux naming mmcblk0). In addition to the partitions for the basic Flash-N-Go components, there may be some more partitions depending on the system configuration.

The default partition layout for the Flash-N-Go on the iMX6 platform is:

Partition

File System

Contents

Partition

File System

Contents

mmcblk0boot0

none

Flash-N-Go Boot

mmcblk0boot1

FAT32

XML based device configuration and touchscreen settings

mmcblk0p1

FAT32

Flash-N-Go System including

  • Linux Kernel

  • Ramdisk-file-system

  • boot-alt.cfg file

The target operating system kernel is usually installed in mmcblk0p2 FAT32 partition and uses a third partition mmcblk0p3 as a non-volatile rootfs partition. However other partition layouts are possible for the target OS like customer-specific partition layouts or Android-based multi-partition layouts.

On the imx8 based systems the default partition layout also contains the partitions for the target OS.

The following table contains all possible partitions. Depending on the selected setup it is possible that that the LINUXB, ROOTFSB and user partition are missing.

Partition

File System

Contents

Partition

File System

Contents

mmcblk0p1

none

Bootloader   

U-Boot placeholder to make the bootloader placement visible

mmcblk0p2

none

Bootloader   

Uboot environment placeholder to make the usage visible

mmcblk0p3

VFAT

Config       

SECO specific config partition, contain xml and other persistent device data

mmcblk0p4

none

Extended Partition

mmcblk0p5

VFAT, 128M

FLASH-N-GO   

Flash-N-Go System Kernel and RAM FS

mmcblk0p6

VFAT, 128M

LINUX       

Kernel, devicetrees and boot.cfg for installation A

mmcblk0p7

VFAT, 128M

LINUXB       

Kernel, devicetrees and boot.cfg for installation B

mmcblk0p8

EXT4, ~1.2GB

ROOTFS 

Root Files System for installation A

mmcblk0p9

EXT4, ~1.2GB

ROOTFSB

Root filessystem for installation B

mmcblk0p10

not in use by default, ~1GB

User partition

 


Booting Flash-N-Go System

There are two possible options for booting the device into Flash-N-Go System instead of booting the target OS. The first one is pressing down and holding the bootmode switch while the power supply is switched on. The location of the bootmode switch is shown in the following figure

Location of the bootmode switch on the side of the device

After a few seconds a Flash-N-Go System prompt should be displayed on the serial console similar to this:

FLASH-N-GO:/

Alternatively, the bootselect tool can be used, available modes are regular for normal target OS and alternative for Flash-N-Go System.

The bootmode switch needs to be held on each boot process. The selection made with bootselect is persistent.


Configuration tools

Several tools on the Flash-N-Go System solution are provided for configuring, testing and flashing the devices.

bootselect

This tool offers the possibility to switch the boot target between the flashed operation system (e.g. Linux, Windows Embedded) on the device and Flash-N-Go System itself. The following code block shows a list of all possible parameters:

FLASH-N-GO:/ bootselect -h Usage: bootselect [-qv] [<bootmode>] When called without parameters, bootselect reads the current boot-mode setting from the RTC-register Options: <bootmode> Writes the given boot-mode into the RTC-register May be one of: initialized regular regularB alternative invalid -v Turns on debug messages on stderr -vv Turns on info messages on stderr -q Turns off warning messages on stderr -qq Turns off all messages on stderr

It is also possible to use abbreviation such as a for alternative and so on.

root@santaro:~# bootselect a alternative root@santaro:~# bootselect r regular

regular: target OS

regularA (or regularB): target OS A or B (in case of A-B partitioning)

alternative: Flash-N-Go System

oneshot (or oneshotA, oneshotB): boot once into the desired mode, then switch to the fallback

  • oneshot: regular, then alternative

  • oneshotA; regularA, then regularB

  • oneshotB: regularB, then regularA

 

The bootselect tool is also part of SECO Nothern Europe formerly Garz & Fricke operating systems which use Flash-N-Go Boot as bootloader. Thus the selection may be done at OS runtime too.

sconfig

sconfig is a small command-line tool that offers functionalities for device configurations like network settings, screen rotation etc. The following code block shows a list of all possible parameters.

xconfig

xconfig is a command-line tool to manipulate the XML-configuration data directly. Care should be taken when using these commands as miss-configured or corrupted XML- configuration data might render a system unusable. The following code block shows a list of all possible parameters.


Some features of on older devices are only supported by older releases of our FnG Infrastructure. For example, FnG Update will only work with FnG System 15 and below.

If you have an older device and need those features, please contact our Technical Support for the appropriate installation procedure.

Manual System Update

The manual system update considers a manual operating system (OS) installation via a console. The progress can be done locally using mass storage devices or using a network connection.

The installation of target OSes, and Flash-N-Go System and Flash-N-Go Boot should work via console one- or two-liners. All device partitioning, deployment actions should be done by shell scripts executed by the simple command. See Booting Flash-N-Go System for instructions on how to boot into the management system.

Establish a network connection

The Ethernet can be set up with the sconfig command-line tool, see also sconfig.

To set the IP address to the static IP 192.168.1.1 with the submask 255.255.255.0 use the following commands:

To set DHCP and reboot the system to apply the network configuration:

Installation via network

The common concept of the installation is always similar.

  1. Set the download source variable

  2. Download the installation script (with curl) and

  3. Execute the installation script (with sh).

These concatenating these steps the installation can be done in one-liner commands.

Example 1: Install Yocto Kirkstone 25.0

Set the variable location, then call curl to download it to pipe to sh

The parameter url of the script should point to the location of the folder where the installation files are located.

Example 2: Install Flash-N-Go System 51

The process is similar to installing the target OS

Offline installation

It is also possible to install FnG System as well as the target OS offline.

To do that, simply download and copy the installation script as well as the corresponding files to a USB stick. After that, simply boot the device into FnG System, mount the USB stick and directly call the script.


Security Considerations

The Flash-N-Go System is designed as a management system to install and update target operating systems and change the device configurations. Thus it runs with root privileges. This may be a concern for some scenarios. Therefore some security considerations are necessary.


License