Skip to content

Reprogramming & Booting the RZ V2L through eMMC, micro SD, and NFS mount

Lucas Keller edited this page Oct 4, 2023 · 13 revisions

Build, Deploy, & Run a Qt-Enabled Image on RzBoard V2L

Note: WORK IN PROGRESS

Building a Qt-enabled yocto image and deploying it to the RzBoard V2L; finally, running QT demo apps!

rzboard_v2l

Difficulty: Intermediate

Tutorial Time

  • Hands-on Estimate: 1 hour

Table of Contents

Prerequisites

Before you begin, make sure you have the following hardware and software in place:

Hardware Requirements

Primary Components

  • RzBoard V2L
  • Build Host
    • 64-bit Ubuntu 20.04 LTS

Peripherals

  • Common Peripherals
    • USB Mouse
    • USB Keyboard
    • USB-Serial adapter cable (I'm using PL2303TA)
    • 1x Ethernet cable
  • For Micro-SD Boot
    • 1x Micro-SD 32 GB
    • 1x micro-SD-USB adapter
  • For eMMC and/or NFS Boot
    • 1x Ethernet Cable

Repository Dependencies

We will be cloning the following repository later in the blog

Introduction

The RZ/V2L is an exciting AT on the edge device, but it also has strong HMI Capabilities! Grouping an AI accelerator, HDMI/MIPI output, and MIPI CSI input together is powerful. Integrating responsive GUIs, even touch screens, along with fast real-time AI is one of the primary goals of the RZ/V2L.

Deploying to RzBoard V2L

Hardware Configuration

Firstly, the RZBoard hardware must be in a SCIF flash configuration.

  1. Power off the RZBoard
  2. Place the RZBoard into "SCIF download boot-mode" by setting:
    1. BOOT2=1 by strapping J19-pin1 J1-pin2
    2. BOOT1=0 by strapping SW1.1 = ON
    3. BOOT0=1 by removing the SD card from MicroSD slot
  3. Connect RZBoard & build host such that they can be on the same subnet. For this demonstration, I connected RZBoard directly to build host via ethernet.
  4. Connect the RZBoard with the build host via the USB-Serial cable. The fly leads will connect with the 4-pin debug UART header.

SCIF_setup

Software & Build-Host Configuration

Additionally, you will need a flash-writer tool to send the data over the USB-serial cable. To download the flash writer and its related dependencies, run the following:

$ cd ~/rz_qt5
$ git clone https://github.com/Avnet/rzboard_flash_util.git
$ cd rzboard_flash_util
$ pip3 install -r requirements.txt

The flash-writer tool makes a few assumptions (README):

  1. The images to be flashed are located in the directory of the flash writer rzboard_flash-util (with the original names output by bitbake)
  2. /dev/ttyUSB0 is used (check out the flash writer docs for overriding the default serial port)

Before running the flash-writer, you can verify your USB-Serial device is protected. I'm using a Prolific PL2303TA which shows up in lsusb like:

$ lsusb
...
Bus 001 Device 007: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
...

Gather the Files

To deploy your qt build, you will need the following files

Image File Name Description
Flash Image Writer Flash_Writer_SCIF_rzboard.mot Application loaded in to received bootloader images over serial and write to eMMC
BL2 Image bl2_bp-rzboard.srec Bootloader
FIP Image fip-rzboard.srec Bootloader, ARM TFA (Trusted Firmware-A) BL31, and u-boot in a combined image
System Image avnet-core-image-rzboard.wic Contains the linux kernel, device tree (dtb), and root filesystem (rootfs) in a minimized format.

Copy the files over to the target directory ~/rz_qt5/rzboard_flash_util

$ cd ~/rz_qt5/yocto_rzboard/build/
$ cp tmp/deploy/images/rzboard/avnet-core-image-rzboard.wic ~/rz_qt5/rzboard_flash_util/
$ cp tmp/deploy/images/rzboard/bl2_bp-rzboard.srec ~/rz_qt5/rzboard_flash_util/
$ cp tmp/deploy/images/rzboard/fip-rzboard.srec ~/rz_qt5/rzboard_flash_util/
$ cp tmp/deploy/images/rzboard/Flash_Writer_SCIF_rzboard.mot ~/rz_qt5/rzboard_flash_util/

Flash the Bootloaders & System Image

Lastly, flash the bootloaders and system image using the --full flash writer parameter. For --full or --rootfs, flash_util.py will try to automatically find the RZBoard IP address, unless you specify a static IP. For this demonstration, I preferred to use a static IP.

The next steps require power cycling, here is a reminder of where the power button is: power_button

When performing a --full flash, follow the flash writer output. The general order of operations will be:

  1. Power down RZBoard, configure for SCIF download boot mode
  2. Give build host 192.168.1.X IP so it can share same subnet with RZBoard. Personally, I ran $ ifconfig eno1 192.168.1.88, as eno1 was the ethernet port connected directly to the RzBoard.
  3. On build host, run $ python flash_util.py --full --static_ip 192.168.1.99 from ~/rz_qt5/rzboard_flash_util
  4. Power up RZBoard (Still in SCIF download boot mode)
  5. Let the flash_util.py script flash the flash writer, bl2, and FIP image.
  6. Wait for the Power on Board. Make sure boot2 strap is NOT on flash log
  7. Power down the RZBoard, removing the BOOT2 flywire strapping J19-pin1 J1-pin2
  8. Power on the RZBoard
  9. Wait for the Finished. Total time: X.Ys log before rebooting the RZBoard

NOTE: Use your prefered parameters/method, but know the RZBoard & build host must be on the same subnet. More information on the flashing utility can be found in the README

$ cd ~/rz_qt5/rzboard_flash_util/
$ python flash_util.py --full --static_ip 192.168.1.99
Please power on board. Make sure boot2 is strapped.
Writing Flash Writer application.
Writing bl2 image.
Writing FIP image.
Power on board. Make sure boot2 strap is NOT on.
Waiting for device...
Setting static IP: 192.168.1.99
Putting device into fastboot mode
Device in fastboot mode
error: no response from target
< waiting for udp:192.168.1.99>
fastboot: verbose: Do flash rawimg /home/ljkeller/code/rzv2l/rzboard_flash_util/avnet-core-image-rzboard.wic
fastboot: verbose: target reported max-download-size of 117440512 bytes
Sending sparse 'rawimg' 1/27 (102256 KB)           OKAY [ 11.173s]
Writing 'rawimg'                                   OKAY [ 20.617s]
Sending sparse 'rawimg' 2/27 (114684 KB)           OKAY [ 12.525s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.997s]
Sending sparse 'rawimg' 3/27 (114684 KB)           OKAY [ 12.511s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.965s]
Sending sparse 'rawimg' 4/27 (114684 KB)           OKAY [ 12.522s]
Writing 'rawimg'                                   OKAY [ 10.126s]
Sending sparse 'rawimg' 5/27 (114684 KB)           OKAY [ 12.532s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.935s]
Sending sparse 'rawimg' 6/27 (114684 KB)           OKAY [ 13.524s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [ 10.106s]
Sending sparse 'rawimg' 7/27 (114684 KB)           OKAY [ 12.520s]
Writing 'rawimg'                                   OKAY [  9.933s]
Sending sparse 'rawimg' 8/27 (114684 KB)           OKAY [ 12.543s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [ 10.112s]
Sending sparse 'rawimg' 9/27 (114684 KB)           OKAY [ 13.457s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.931s]
Sending sparse 'rawimg' 10/27 (114684 KB)          OKAY [ 12.519s]
Writing 'rawimg'                                   OKAY [  9.924s]
Sending sparse 'rawimg' 11/27 (114684 KB)          OKAY [ 12.536s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [ 10.106s]
Sending sparse 'rawimg' 12/27 (114684 KB)          OKAY [ 13.537s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.940s]
Sending sparse 'rawimg' 13/27 (114684 KB)          OKAY [ 12.527s]
Writing 'rawimg'                                   OKAY [  9.937s]
Sending sparse 'rawimg' 14/27 (114684 KB)          OKAY [ 12.523s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.925s]
Sending sparse 'rawimg' 15/27 (114684 KB)          OKAY [ 12.609s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.942s]
Sending sparse 'rawimg' 16/27 (114684 KB)          OKAY [ 12.524s]
Writing 'rawimg'                                   OKAY [ 15.702s]
Sending sparse 'rawimg' 17/27 (114684 KB)          OKAY [ 12.527s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.972s]
Sending sparse 'rawimg' 18/27 (113788 KB)          OKAY [ 12.409s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [ 15.134s]
Sending sparse 'rawimg' 19/27 (114684 KB)          OKAY [ 12.531s]
Writing 'rawimg'                                   OKAY [  9.985s]
Sending sparse 'rawimg' 20/27 (114684 KB)          OKAY [ 12.529s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.960s]
Sending sparse 'rawimg' 21/27 (113976 KB)          OKAY [ 12.466s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.885s]
Sending sparse 'rawimg' 22/27 (114684 KB)          OKAY [ 12.532s]
Writing 'rawimg'                                   OKAY [  9.975s]
Sending sparse 'rawimg' 23/27 (114684 KB)          OKAY [ 12.525s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.932s]
Sending sparse 'rawimg' 24/27 (114684 KB)          OKAY [ 12.515s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.948s]
Sending sparse 'rawimg' 25/27 (114684 KB)          OKAY [ 12.514s]
Writing 'rawimg'                                   OKAY [  9.932s]
Sending sparse 'rawimg' 26/27 (114684 KB)          OKAY [ 12.172s]
Writing 'rawimg'                                   (bootloader) writing
OKAY [  9.925s]
Sending sparse 'rawimg' 27/27 (104524 KB)          OKAY [ 11.985s]
Writing 'rawimg'                                   (bootloader) writing
(bootloader) writing
(bootloader) writing
OKAY [ 73.463s]
Finished. Total time: 693.934s

Feedback and Contributions

We welcome feedback, bug reports, and contributions. If you encounter any issues or have suggestions for improvements, please feel free to open an issue or submit a pull request. Our support will be focused on the meta-rzboard repository.