.. include:: /keyword.rst ==================== Flash Image to Board ==================== This guide shows how to "flash"(write) the system image into the non-volatile flash memory of Genio EVKs. The flashing process is performed over a USB connection between the target board and the host computer containing the image. In order to write the on-board storage with :doc:`Genio Tools `, you need to set the SoC in **download mode**, which allows AIoT Tools to transfer a **download agent** binary to the SRAM of SoC. The download agent then provides a `fastboot `__ interface for subsequent image transfer and storage write operations. .. note:: Make sure you have install the Genio Tools on your :doc:`Linux ` or :doc:`Windows ` host before continuing the process. .. note:: These pages are only a quick guide on using Genio Tools to flash images. Please read :doc:`/tools/genio-tools` in order to get the most out of Genio Tools. Launch `genio-flash` Tool ========================= Change working directory to the image directory. If you built ``rity-demo-image`` from source, the image is default in: .. tabs:: .. group-tab:: |G350-EVK| .. prompt:: bash $ auto $ cd $BUILD_DIR/tmp/deploy/images/genio-350-evk .. group-tab:: |G510-EVK| .. prompt:: bash $ auto $ cd $BUILD_DIR/tmp/deploy/images/genio-510-evk .. group-tab:: |G700-EVK| .. prompt:: bash $ auto $ cd $BUILD_DIR/tmp/deploy/images/genio-700-evk .. group-tab:: |G1200-EVK| .. prompt:: bash $ auto $ cd $BUILD_DIR/tmp/deploy/images/genio-1200-evk ``BUILD_DIR`` variable set was set within the :ref:`sw/yocto/get-started/build-code:configure build environment` chapter. If you are using a pre-built image, please change to the directory that you've extracted the pre-built image. It should contain a ``partitions.json`` file. To use the default configuration, run the following commands: .. tabs:: .. group-tab:: |G350-EVK| .. prompt:: console $ genio-flash --load-dtbo gpu-mali.dtbo --load-dtbo video.dtbo The default configuration is: * HDMI is enabled, which disables Ethernet. * DSI LCM is disabled. * Cameras are disabled. To enable DSI LCM, and to enable Ethernet, which disables HDMI: .. prompt:: console $ genio-flash --load-dtbo panel-startek-kd070fhfid015.dtbo --load-dtbo net-ethernet.dtbo To enable CSI0 camera, Ethernet, and the StarTek DSI LCM: .. prompt:: console $ genio-flash --load-dtbo camera-ap1302-ar0430-single-csi0.dtbo --load-dtbo net-ethernet.dtbo --load-dtbo panel-startek-kd070fhfid015.dtbo .. group-tab:: |G510-EVK| .. prompt:: console $ genio-flash --load-dtbo gpu-mali.dtbo --load-dtbo apusys.dtbo --load-dtbo video.dtbo .. group-tab:: |G700-EVK| .. prompt:: console $ genio-flash --load-dtbo gpu-mali.dtbo --load-dtbo apusys.dtbo --load-dtbo video.dtbo .. group-tab:: |G1200-EVK| .. prompt:: console $ genio-flash --load-dtbo gpu-mali.dtbo --load-dtbo apusys.dtbo --load-dtbo video.dtbo The additional board features are device tree overlays. You can load multiple overlays by adding multiple ``--load-dtbo`` parameters. The following command can be used to see what overlays are available to be enabled: .. prompt:: console $ genio-flash --list-dtbo By default ``genio-flash`` will use the prefix ``rity-demo-image`` to search for files under image directory. If you are building other images, use ``-i`` option to specify different prefix. For example: .. tabs:: .. group-tab:: |G350-EVK| .. prompt:: console $ genio-flash -i rity-bringup-image --load-dtbo gpu-mali.dtbo --load-dtbo video.dtbo .. note:: * Make sure you load the ``gpu-mali.dtbo``and ``video.dtbo``. GPU and video codec does not work if you omitting these overlays. * DPI-to-HDMI and Ethernet are mutually exclusive on |G350-EVK|. * Once you enable DSI LCM, the HDMI port does not work if the LCM panel is not attached. .. group-tab:: |G510-EVK| .. prompt:: console $ genio-flash -i rity-bringup-image --load-dtbo gpu-mali.dtbo --load-dtbo apusys.dtbo --load-dtbo video.dtbo .. note:: Make sure you load the ``gpu-mali.dtbo``, ``apusys.dtbo``, and ``video.dtbo``. GPU, APU and video codec does not work if you omitting these overlays. .. group-tab:: |G700-EVK| .. prompt:: console $ genio-flash -i rity-bringup-image --load-dtbo gpu-mali.dtbo --load-dtbo apusys.dtbo --load-dtbo video.dtbo .. note:: Make sure you load the ``gpu-mali.dtbo``, ``apusys.dtbo``, and ``video.dtbo``. GPU, APU and video codec does not work if you omitting these overlays. .. group-tab:: |G1200-EVK| .. prompt:: console $ genio-flash -i rity-bsp-image --load-dtbo gpu-mali.dtbo --load-dtbo apusys.dtbo --load-dtbo video.dtbo .. note:: Make sure you load the ``gpu-mali.dtbo``, ``apusys.dtbo``, and ``video.dtbo``. GPU, APU and video codec does not work if you omitting these overlays. ``genio-flash`` should print logs to the terminal similar to this: .. prompt:: bash $ auto AIoT Tools: Yocto Image: name: Rity Demo Image (rity-demo-image) distro: Rity Demo Layer (rity-demo) codename: kirkstone machine: overlays: ['gpu-mali.dtbo', 'apusys.dtbo', 'video.dtbo'] Looking for MediaTek SoC matching USB device 0e8d:0003 The ````, ```` and ```` strings change according to the tool version, IoT Yocto version and Genio EVK used. Once you see line ``Looking for MediaTek SoC matching USB device 0e8d:0003`` prompt, proceed to the next step. Enter Download Mode =================== Follow these steps to make the Genio EVK enter download mode: .. tabs:: .. group-tab:: |G350-EVK| #. Locate the push buttons on the board: .. figure:: /_asset/sw_rity_get-started_flash_download-mode.gif :align: center #. Press and keep pressing the **volume up** button #. Press and release the **reset** button #. Release the **volume up** button .. group-tab:: |G510-EVK| #. Locate the push buttons on the board: .. figure:: /_asset/sw_yocto_flash_g700_dl-buttons.jpg :align: center :width: 640 #. Press and keep pressing the **Download** button. #. Press and release the **RST** button. #. Hold the **Download** button until you see the log ``Erasing 'mmc0'`` message, as shown below: .. group-tab:: |G700-EVK| #. Locate the push buttons on the board: .. figure:: /_asset/sw_yocto_flash_g700_dl-buttons.jpg :align: center :width: 640 #. Press and keep pressing the **Download** button. #. Press and release the **RST** button. #. Hold the **Download** button until you see the log ``Erasing 'mmc0'`` message, as shown below: .. group-tab:: |G1200-EVK| #. Locate the push buttons on the board: .. figure:: /_asset/sw_yocto_flash_g1200_dl-buttons.jpg :align: center :width: 60% #. Press and keep pressing the **Download** button. #. Press and release the **RST** button. #. Hold the **Download** button until you see the log ``Erasing 'mmc0'`` message, as shown below: You should see flashing process start. A typical successful log looks like this: .. code-block:: text AIoT Tools: Yocto Image: name: Rity Demo Image (rity-demo-image) distro: Rity Demo Layer (rity-demo) codename: kirkstone machine: genio-1200-evk overlays: ['gpu-mali.dtbo', 'apusys.dtbo', 'video.dtbo'] Looking for MediaTek SoC matching USB device 0e8d:0003 Opening COM33 using baudate=115200 Connected to MediaTek MT8195 SoC Sending bootstrap to address: 0x201000 Jumping to bootstrap at address 0x201000 in AArch64 mode erasing mmc0 < waiting for any device > Erasing 'mmc0' (bootloader) request sz: 0xe8f800000, real erase len: 0x0 OKAY [ 9.627s] Finished. Total time: 9.655s erasing mmc0boot0 Erasing 'mmc0boot0' (bootloader) request sz: 0x800000, real erase len: 0x800000 OKAY [ 0.013s] Finished. Total time: 0.018s erasing mmc0boot1 Erasing 'mmc0boot1' (bootloader) request sz: 0x800000, real erase len: 0x800000 OKAY [ 0.004s] Finished. Total time: 0.010s flashing mmc0=rity-demo-image-genio-1200-evk.wic.img Sending sparse 'mmc0' 1/9 (262140 KB) OKAY [ 6.440s] Writing 'mmc0' OKAY [ 9.393s] Sending sparse 'mmc0' 2/9 (262140 KB) OKAY [ 6.332s] Writing 'mmc0' OKAY [ 10.185s] Sending sparse 'mmc0' 3/9 (230376 KB) OKAY [ 5.607s] Writing 'mmc0' OKAY [ 8.196s] Sending sparse 'mmc0' 4/9 (262140 KB) OKAY [ 6.362s] Writing 'mmc0' OKAY [ 9.354s] Sending sparse 'mmc0' 5/9 (262140 KB) OKAY [ 6.401s] Writing 'mmc0' OKAY [ 10.089s] Sending sparse 'mmc0' 6/9 (262140 KB) OKAY [ 6.413s] Writing 'mmc0' OKAY [ 9.291s] Sending sparse 'mmc0' 7/9 (242392 KB) OKAY [ 5.924s] Writing 'mmc0' OKAY [ 8.585s] Sending sparse 'mmc0' 8/9 (262140 KB) OKAY [ 6.417s] Writing 'mmc0' OKAY [ 9.288s] Sending sparse 'mmc0' 9/9 (129780 KB) OKAY [ 3.159s] Writing 'mmc0' OKAY [ 4.605s] Finished. Total time: 132.157s flashing mmc0boot0=bl2.img Sending 'mmc0boot0' (205 KB) OKAY [ 0.007s] Writing 'mmc0boot0' OKAY [ 0.026s] Finished. Total time: 0.054s flashing mmc0boot1=u-boot-env.bin Sending 'mmc0boot1' (4 KB) OKAY [ 0.002s] Writing 'mmc0boot1' OKAY [ 0.015s] Finished. Total time: 0.028s Rebooting OKAY [ 0.002s] Finished. Total time: 0.002s .. note:: If you are experiencing issues flashing on Windows, please refer to the :ref:`troubleshooting guide `. Flash a Single Partition ======================== During development, you might want to update a single partition instead of completely re-write the entire storage. For example, after modifying and rebuilding the kernel image, it is much faster to just flash the fitImage. There are 4 partitions that can be updated individually on open SDK: ``mmc0boot0``, ``mmc0boot1``, ``bootloaders``, ``kernel``. The ``mmc0`` and rootfs partitions do not support individual updates. To flash just one partition, you can run the following command: .. prompt:: bash $ auto $ genio-flash $PARTITION $ genio-flash kernel # example to update kernel partition The following table shows common ``$PARTITION`` used in `rity-demo-image`: .. csv-table:: :header: "Partition", "File" :widths: 10, 10 `mmc0`, "N/A" `mmc0boot0`, ``bl2.img`` `mmc0boot1`, ``u-boot-env.bin`` "bootloaders", ``fip.bin`` "kernel", ``fitImage`` "rootfs", "N/A" .. hint:: See the :doc:`Genio Tools ` page for more information on how to utilise :command:`genio-flash`.