⚠️ Warning.
The pre-loaded bootloaders (u-boot and ARM Trusted Firmware) on the RZ/V2L Evaluation Kit (SMARC board) are not up to date with the current BSP. It is strongly recommended that the bootloaders generated when building the BSP as described in the Startup Guide document that is distributed with the BSP Package, be programmed into SPI Flash on the board using Flash Writer.
Known issues with pre-loaded loaders.
Renesas has prepared pre-built images available for download from renesas.com.
⭐⭐ RZ/V2L AI SDK Applications Demo SD Image
RZ/V2L DRP-AI Object Detection and Pose Estimation DEMO
RZ/V2L DRP-AI USB Camera HTTP Demo SD Image version
RZ/V2L DRP-AI USB Camera HTTP Demo Pre-build version
Please see the DRP-AI Pretrained Models page for details about pretrained applications.
The RZV2L DRP-AI Demos can be found here.
These demos include pre-build applications, source code and documentation about the DRP-AI.
Information about the RZV2L Simple ISP can be found here.
These demos include pre-build applications, source code and documentation about the DRP-AI and ISP.
📄 Board User Manual
The User Manual for the boards can be found their website pages on renesas.com.
Check the 'General Information' section on this page for the links.
📦 What is included in the kit
🛒 What you will need to purchase
💻 Build Environment
Info |
---|
⚠️ The BSP will only build in Ubuntu 20.04 |
The Renesas RZV AI SDK provides board bring up of the EVK and AI Demos.
Info | ||
---|---|---|
| ||
Please read section V2L Boot Loaders Warning about the factory boot loaders programmed into the EVK boards. |
$ wget https://raw.githubusercontent.com/
Some docker setup instructions and scripts are provided to make it easy to get started.https://github.com/renesas-rz/rzg2_bsp_scripts
/tree/master/docker_setup💾 Downloading the Linux BSP
Up to 5 packages are used to build the BSP.
Please download from the Official RZ/V2L Website. Please look in the "Software Downloads" section.
Links to all the downloads can be found on the 📦 RZ/V2 Linux BSP on this site. Please refer to the sections that support RZ/V2L.
Copy all ZIP file to a Linux PC.
The evaluation versions contain a time limitation that stops the software after a few hours.
(*): Refer to DRP-AI Demos section for changes to the DRP-AI package that could effect you application.
🔨 Building the BSP
Expand | ||
---|---|---|
| ||
These instructions are a summary of what is explained in the package Release Notes.
export WORK_DIR=<set to path to Yocto build directory>
export SRC_DIR=<set to path to Renesas RZV zip file>
mkdir $WORK_DIR
### Extract the BSP Linux package
cd $WORK_DIR
unzip $SRC_DIR/RTK0EF0045Z0024AZJ-v3.0.5.zip
tar -xf ./RTK0EF0045Z0024AZJ-v3.0.5/rzv_vlp_v3.0.5.tar.gz
### Extract the 'RZV2L Graphics Library v1.1.0'
cd $WORK_DIR
unzip $SRC_DIR/RTK0EF0045Z13001ZJ-v1.2.0_EN.zip
tar -zxvf RTK0EF0045Z13001ZJ-v1.2.0_EN/meta-rz-features_graphics_v1.2.0.tar.gz
### Extract the 'RZV2L Video Codec Library v1.1.0' Zip file.
cd $WORK_DIR
unzip $SRC_DIR/RTK0EF0045Z15001ZJ-v1.2.0_EN.zip
tar zxvf RTK0EF0045Z15001ZJ-v1.2.0_EN/meta-rz-features_codec_v1.2.0.tar.gz
### Extract the DRP Support archive file
### Extract the 'DRP-AI Driver Support' package file ( meta-rz-drpai.tar.gz) under the rzv2l_drpai-driver directory.
unzip $SRC_DIR/r11an0549ej0741-rzv2l-drpai-sp.zip -d drp
tar -xvf drp/rzv2l_drpai-driver/meta-rz-drpai.tar.gz
### Extract the ISP Support archive file
### Extract the ISP Support Package ( meta-rz-simple-isp.tar.gz ).
cd $WORK_DIR
unzip $SRC_DIR/r11an0561ej0130-rzv2l-isp-sp.zip
tar -zxvf r11an0561ej0130-rzv2l-isp-sp/meta-rz-simple-isp.tar.gz
### Extract the Multi-OS Package archive file
### Set up the Yocto Environment and copy a default configuration
cd $WORK_DIR
unzip $SRC_DIR/r01an6238ej0112-rzv2l-cm33-multi-os-pkg.zip
tar -zxvf r01an6238ej0112-rzv2l-cm33-multi-os-pkg/meta-rz-features_multi-os_v1.1.2.tar.gz
cd $WORK_DIR
TEMPLATECONF=${WORK_DIR}/meta-renesas/meta-rzv2l/docs/template/conf/ source poky/oe-init-build-env build
bitbake-layers add-layer ../meta-rz-features/meta-rz-graphics
bitbake-layers add-layer ../meta-rz-features/meta-rz-codecs
bitbake-layers add-layer ../meta-rz-features/meta-rz-drpai
bitbake-layers add-layer ../meta-rz-features/meta-rz-simple-isp
bitbake-layers add-layer ../meta-rz-features/meta-rz-multi-os
### Build
MACHINE=smarc-rzv2l bitbake core-image-weston
MACHINE=smarc-rzv2l bitbake core-image-weston -c populate_sdk |
👓 Verification
After the above script is run there will be a new folder call meta-rz-features. This will include, among others sub-folders for the MALI GPU, Video Codec, DRP, and ISP.
meta-rz-features/
├── meta-rz-codecs
├── meta-rz-drpai
├── meta-rz-graphics
├── meta-rz-multi-os
├── meta-rz-simple-isp
└── Readme.md
OSS_Package
This archive contains many of the yocto pacakges used to build the RZ BSP. Between releases some of these packages may no longer be supported in the current Renesas VLP. By modifying the yocto local.conf configuration file to use the packages in this archive allows continued build support of the current released VLP. Add the following to the locat.conf file.
DL_DIR = "Absolute Path to extracted oss_package"
Info | ||
---|---|---|
| ||
Please read section V2L Boot Loaders Warning about the factory boot loaders programmed into the EVK boards. |
$ wget https://raw.githubusercontent.com/renesas-rz/rzg2_bsp_scripts/master/usb_sd_partition/usb_sd_partition.sh
$ chmod +x usb_sd_partition.sh
$ ./usb_sd_partition.sh
# Change to the Yocto output directory that contains the files
$ cd build/tmp/deploy/images/smarc-rzv2l
# Copy the Linux kernel and Device Tree to partition 1
$ sudo cp -v Image /media/$USER/RZ_FAT
$ sudo cp -v r9a07g054l2-smarc.dtb /media/$USER/RZ_FAT
# Copy and expand the Root File System to partition 2
$ sudo tar -xvf core-image-weston-smarc-rzv2l.tar.gz -C /media/$USER/RZ_ext
(or if NOT using graphics)
$ sudo tar -xvf core-image-minimal-smarc-rzv2l.tar.gz -C /media/$USER/RZ_ext
# Make sure all files are finished writing before removing the USB card reader from the PC
$ sync
SOM board uses SD Card socket SOM board uses eMMC Flash (recommended)
SW1-1 = ON/OFF(JTAG) SW1-1 = ON/OFF(JTAG)
SW1-2 = ON SW1-2 = OFF
+-----+ +-----+
| ON | | ON |
| = = | | = |
| | | = |
| 1 2 | | 1 2 |
+-----+ +-----+
Boot the BoardInfo | ||
---|---|---|
| ||
Please see RZ/V2LBootLoadersWarning about the factory programmed evaluation boards |
HTML |
---|
<font size=2><B>Boot using SD Card on Carrier Board (<font color=green>Recommended</font>)</B></font> |
┌─────┬─────┬─────┐
│ │ SOM │ │
│ └─────┘ │
│ Carrier Board │
│ ┌─┐ │
└─────┴─┴─────────┘
↑
SD Card Socket
RZ/V2L EVK Booting Commands:
# Create command macros and save them:
=> setenv sd_boot1 'mmc dev 1 ; fatload mmc 1:1 0x48080000 Image ; fatload mmc 1:1 0x48000000 Image-r9a07g054l2-smarc.dtb'
=> setenv sd_boot2 'setenv bootargs 'root=/dev/mmcblk1p2 rootwait' ; booti 0x48080000 - 0x48000000'
=> setenv bootcmd 'run sd_boot1 sd_boot2'
=> saveenv
# Reset the board and it will automatically boot
HTML |
---|
<font size=2><B>Boot using eMMC Flash on SOM Board (Advanced)</B></font> |
HTML |
---|
<font size=2><B>Boot using SD Card on SOM Board (Advanced)</B></font> |
# Manually enter the following commands to boot
=> mmc dev 0 ; fatload mmc 0:1 0x48080000 Image ; fatload mmc 0:1 0x48000000 Image-r9a07g054l2-smarc.dtb
=> setenv bootargs 'root=/dev/mmcblk0p2 rootwait' ; booti 0x48080000 - 0x48000000
Instructions for RZV Cortex-M33 Multi-OS Package is located below.
Cortex-M33 Multi-OS Package Support
Additional Supported Camera Modules are listed below:
e-CAM20_CURZ is an AR0234-based Full HD Color Global Shutter Camera. It supports the UYVY image format and is provided with an M12 lens holder – which together make it compatible with Renesas ® RZ/V2L. Its key features make e-CAM20_CURZ a perfect fit for applications like AMR, smart shopping, smart traffic, etc. (Order number: e-CAM20_CURZ_1H01R2)
e-CAM21_CURZ is a Full HD Ultra low light camera for Renesas ® RZ/V2L based on the Sony® STARVIS™ IMX462 sensor. It comes with superior NIR performance and is equipped with an inbuilt ISP and an M12 lens holder – making it ideal for applications like people counting, animal tracking, smart agriculture, etc. (Order Number: 2. e-CAM21_CURZ_1H01R2 )
The instructions to enable the RZV2L to boot from eMMC Flash at on the RZG2L Page here
The instructions to enable the RZV2L to load the Linux kernel, DTB, and Filesystem RZG2L Page here
Fix rngd bug that randomly keeps all CPUs busy after startup
RZ MPUs (at least non-secure versions) do not have a hardware random number generation module (/dev/hwrng), but that's the default setting for the systemd rngd service.
With that, rngd occupies the CPU resources to build up entropies during start-up.
Randomly, this process does not end properly and slows down the entire system significantly.
But if an available pseudorandom number generator is selected, rngd finishes properly always.
The following modification is sufficient:
Before you build the BSP, modify
poky/meta/recipes-support/rng-tools/rng-tools/default
from
EXTRA_ARGS="-r /dev/hwrng"
to
EXTRA_ARGS="-r /dev/urandom -x jitter"
However, normally you do not want to modify the original recipe but instead create a new one to override the old one.
mkdir - p meta-renesas/recipes-rzg2l/recipes-support/rng-tools
cd meta-renesas/recipes-rzg2l/recipes-support/rng-tools
vi rng-tools_%.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://default"(1)
mkdir -p rng-tools
vi default
EXTRA_ARGS="-r /dev/urandom -x jitter"
bitbake core-image-weston
(1) Note that this is the new Yocto syntax. For older versions of Yocto you may need to replace : (colon) with _ (underscore): so FILESEXTRAPATHS_prepend
.
Alternatively, you can modify the
/etc/default/rng-tools
file in the current target rootfs accordingly.
This version to the DRP-AI Reserve Area has changed from 0x70000000 to 0x80000000, because of this older versions of the DRP-AI Implementation Source code will fail with the following errors.
[ERROR] Failed to run DRPAI_ASSIGN : errno=22
[ERROR] Failed to run load_data_to_mem : resnet50_cam/drp_desc.bin
[ERROR] Failed to load DRPAI Data
This is due to the generated DRP Translator files map to the older address. Please use the DRP Translator version 1.70 when generating the DRP files and use the latest sample code included in the DRP-AI package version 7.0.
/master/usb_sd_partition/usb_sd_partition.sh
$ chmod +x usb_sd_partition.sh
$ ./usb_sd_partition.sh
# Change to the Yocto output directory that contains the files
$ cd build/tmp/deploy/images/smarc-rzv2l
# Copy the Linux kernel and Device Tree to partition 1
$ sudo cp -v Image /media/$USER/RZ_FAT
$ sudo cp -v r9a07g054l2-smarc.dtb /media/$USER/RZ_FAT
# Copy and expand the Root File System to partition 2
$ sudo tar -xvf core-image-weston-smarc-rzv2l.tar.gz -C /media/$USER/RZ_ext
(or if NOT using graphics)
$ sudo tar -xvf core-image-minimal-smarc-rzv2l.tar.gz -C /media/$USER/RZ_ext
# Make sure all files are finished writing before removing the USB card reader from the PC
$ sync
SOM board uses SD Card socket SOM board uses eMMC Flash (recommended)
SW1-1 = ON/OFF(JTAG) SW1-1 = ON/OFF(JTAG)
SW1-2 = ON SW1-2 = OFF
+-----+ +-----+
| ON | | ON |
| = = | | = |
| | | = |
| 1 2 | | 1 2 |
+-----+ +-----+
Info | ||
---|---|---|
| ||
Please see RZ/V2LBootLoadersWarning about the factory programmed evaluation boards |
HTML |
---|
<font size=2><B>Boot using SD Card on Carrier Board (<font color=green>Recommended</font>)</B></font> |
┌─────┬─────┬─────┐
│ │ SOM │ │
│ └─────┘ │
│ Carrier Board │
│ ┌─┐ │
└─────┴─┴─────────┘
↑
SD Card Socket
RZ/V2L EVK Booting Commands:
# Create command macros and save them:
=> setenv sd_boot1 'mmc dev 1 ; fatload mmc 1:1 0x48080000 Image ; fatload mmc 1:1 0x48000000 Image-r9a07g054l2-smarc.dtb'
=> setenv sd_boot2 'setenv bootargs 'root=/dev/mmcblk1p2 rootwait' ; booti 0x48080000 - 0x48000000'
=> setenv bootcmd 'run sd_boot1 sd_boot2'
=> saveenv
# Reset the board and it will automatically boot
HTML |
---|
<font size=2><B>Boot using eMMC Flash on SOM Board (Advanced)</B></font> |
HTML |
---|
<font size=2><B>Boot using SD Card on SOM Board (Advanced)</B></font> |
# Manually enter the following commands to boot
=> mmc dev 0 ; fatload mmc 0:1 0x48080000 Image ; fatload mmc 0:1 0x48000000 Image-r9a07g054l2-smarc.dtb
=> setenv bootargs 'root=/dev/mmcblk0p2 rootwait' ; booti 0x48080000 - 0x48000000
Instructions for RZV Cortex-M33 Multi-OS Package is located below.
Cortex-M33 Multi-OS Package Support
Additional Supported Camera Modules are listed below:
e-CAM20_CURZ is an AR0234-based Full HD Color Global Shutter Camera. It supports the UYVY image format and is provided with an M12 lens holder – which together make it compatible with Renesas ® RZ/V2L. Its key features make e-CAM20_CURZ a perfect fit for applications like AMR, smart shopping, smart traffic, etc. (Order number: e-CAM20_CURZ_1H01R2)
e-CAM21_CURZ is a Full HD Ultra low light camera for Renesas ® RZ/V2L based on the Sony® STARVIS™ IMX462 sensor. It comes with superior NIR performance and is equipped with an inbuilt ISP and an M12 lens holder – making it ideal for applications like people counting, animal tracking, smart agriculture, etc. (Order Number: 2. e-CAM21_CURZ_1H01R2 )
The instructions to enable the RZV2L to boot from eMMC Flash at on the RZG2L Page here
The instructions to enable the RZV2L to load the Linux kernel, DTB, and Filesystem RZG2L Page here
Fix rngd bug that randomly keeps all CPUs busy after startup
RZ MPUs (at least non-secure versions) do not have a hardware random number generation module (/dev/hwrng), but that's the default setting for the systemd rngd service.
With that, rngd occupies the CPU resources to build up entropies during start-up.
Randomly, this process does not end properly and slows down the entire system significantly.
But if an available pseudorandom number generator is selected, rngd finishes properly always.
The following modification is sufficient:
Before you build the BSP, modify
poky/meta/recipes-support/rng-tools/rng-tools/default
from
EXTRA_ARGS="-r /dev/hwrng"
to
EXTRA_ARGS="-r /dev/urandom -x jitter"
However, normally you do not want to modify the original recipe but instead create a new one to override the old one.
mkdir - p meta-renesas/recipes-rzg2l/recipes-support/rng-tools
cd meta-renesas/recipes-rzg2l/recipes-support/rng-tools
vi rng-tools_%.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://default"(1)
mkdir -p rng-tools
vi default
EXTRA_ARGS="-r /dev/urandom -x jitter"
bitbake core-image-weston
(1) Note that this is the new Yocto syntax. For older versions of Yocto you may need to replace : (colon) with _ (underscore): so FILESEXTRAPATHS_prepend
.
Alternatively, you can modify the
/etc/default/rng-tools
file in the current target rootfs accordingly.
This version to the DRP-AI Reserve Area has changed from 0x70000000 to 0x80000000, because of this older versions of the DRP-AI Implementation Source code will fail with the following errors.
[ERROR] Failed to run DRPAI_ASSIGN : errno=22
[ERROR] Failed to run load_data_to_mem : resnet50_cam/drp_desc.bin
[ERROR] Failed to load DRPAI Data
This is due to the generated DRP Translator files map to the older address. Please use the DRP Translator version 1.70 when generating the DRP files and use the latest sample code included in the DRP-AI package version 7.0.
HTML |
---|
Table of Contents | ||||
---|---|---|---|---|
|
HTML |
---|
<!-- Title: Floating Table of Contents
Author: Wade Tracy
This code sets up the floating table of contents
- Formatting is configured for up to 3 levels of headings
- Control your heading levels from the TOC macro
How to use:
1. Use a page layout that puts at least one column on the right to reserve space for the TOC
2. Insert a TOC macro in the right column of the layout
3. Change the TOC settings and specify ts-toc-btf for the 'CSS Class Name'
4. Somewhere in the page (it won't be visible) insert an HTML macro and paste in this code
5. Feel free to modify css to get the styling you want
-->
<style>
.ts-toc-btf {
float: right;
position: fixed;
width: inherit;
right: 0px;
top: 300px;
background: rgba(229, 232, 232, 0.5);
overflow-wrap: normal;
visibility: hidden;
}
.navigation ul {
list-style-type: none;
padding: 0px;
}
.navigation>ul {
padding: 10px 15px 10px 10px;
}
.navigation ul li {
white-space: nowrap;
}
.navigation ul li a {
padding: 0 0 0 10px;
}
.navigation ul li ul li a {
padding: 0 0 0 20px;
}
.navigation ul li ul li ul li a {
padding: 0 0 0 30px;
}
.navigation ul li li {
white-space: nowrap;
}
.navigation ul li span.active a {
font-weight: bold;
color: #222222;
border-left: 2px solid #222222;
}
.navigation ul li a:link,
.navigation ul li a:visited,
.navigation ul li a:active,
.navigation ul li a:hover,
.navigation ul li a:focus {
color: #4a72c2;
text-decoration: none;
}
</style>
<script type="text/javascript">
/*!
* Scrollspy Plugin
* Author: r3plica
* Licensed under the MIT license
*/
; (function ($, window, document, undefined) {
// Add our plugin to fn
$.fn.extend({
// Scrollspy is the name of the plugin
scrollspy: function (options) {
// Define our defaults
var defaults = {
namespace: 'scrollspy',
activeClass: 'active',
animate: false,
duration: 1000,
offset: 0,
container: window,
replaceState: false
};
// Add any overriden options to a new object
options = $.extend({}, defaults, options);
var add = function (ex1, ex2) {
return parseInt(ex1, 10) + parseInt(ex2, 10);
};
// Find our elements
var findElements = function (links) {
var elements = [];
// Loop through the links
for (var i = 0; i < links.length; i++) {
var link = links[i];
// Get our hash
var hash = $(link).attr("href");
// Store our has as an element
var element = $("[id='" + hash.replace('#','') + "']");
// If we have an element matching the hash
if (element.length > 0) {
// Get our offset
var top = Math.floor(element.offset().top),
bottom = top + Math.floor(element.outerHeight());
// Add to our array
elements.push({ element: element, hash: hash, top: top, bottom: bottom });
}
}
return elements;
};
// Find our link from a hash
var findLink = function (links, hash) {
for (var i = 0; i < links.length; i++) {
var link = $(links[i]);
// If our hash matches the link href
if (link.attr("href") === hash) {
// Return the link
return link;
}
}
};
// Reset classes on our elements
var resetClasses = function (links) {
// For each link
for (var i = 0; i < links.length; i++) {
// Get our current link
var link = $(links[i]);
// Remove the active class
link.parent().removeClass(options.activeClass);
}
};
// Find the nearest heading whether at the top of the screen or off the screen
var getActiveHeadingHash = function (elements) {
// Get the position and store in an object
var position = {
top: add($(this).scrollTop(), Math.abs(options.offset)),
left: $(this).scrollLeft()
};
// Store the nearest heading off the top of the page
var nearest = null;
// Loop through our elements
for (var i = 0; i < elements.length; i++) {
// Get our current item
var current = elements[i];
// If we are within the boundaries of our element return that link
if (position.top >= current.top && position.top <= current.bottom)
return current.hash;
// Otherwise, return the closest of the top of the screen--they are in order
else if (position.top > current.bottom) {
nearest = current.hash;
}
}
return nearest;
};
// Store last fired scroll event
var scrollArea = '';
// For each scrollspy instance
return this.each(function () {
// Declare our global variables
var element = this,
container = $(options.container);
// Get our objects
var links = $(element).find('a');
// Loop through our links
for (var i = 0; i < links.length; i++) {
// Get our current link
var link = links[i];
// Bind the click event
$(link).on("click", function (e) {
// Get our target
var target = $(this).attr("href"),
$target = $(target);
// If we have the element
if ($target.length > 0) {
// Get it's scroll position
var top = add($target.offset().top, options.offset);
// If animation is on
if (options.animate) {
// Animate our scroll
$('html, body').animate({ scrollTop: top }, options.duration);
} else {
// Scroll to our position
window.scrollTo(0, top);
}
location.hash = target;
// Prevent our link
e.preventDefault();
}
});
}
// Set links
resetClasses(links);
// Get our elements (targets of the navigation links)
var elements = findElements(links);
var trackChanged = function() {
// Create a variable for our link
var link;
// get our element
var hash = getActiveHeadingHash(elements);
// Get the link
link = findLink(links, hash);
// If we have a link
if (link) {
// If we have an onChange function
if (options.onChange && (scrollArea !== hash)) {
// Fire our onChange function
options.onChange(current.element, $(element), position);
// set scrollArea
scrollArea = hash;
}
// Update url
if (options.replaceState) {
history.replaceState( {}, '', '/' + hash );
}
// Reset the classes on all other link
resetClasses(links);
// Add our active link to our parent
link.parent().addClass(options.activeClass);
}
// If we don't have a link and we have a exit function
if (!link && (scrollArea !== 'exit') && options.onExit) {
// Fire our onChange function
options.onExit($(element), position);
// Reset the classes on all other link
resetClasses(links);
// set scrollArea
scrollArea = 'exit';
// Update url
if (options.replaceState) {
history.replaceState( {}, '', '/' );
}
}
};
// Add a listener to the window
container.bind('scroll.' + options.namespace, function () {
trackChanged();
});
$(document).ready(function (e) {
trackChanged();
});
});
}
});
})(jQuery, window, document, undefined);
var getMenuWidth = function() {
// Need to get the padding of the main window since menu goes to edge of window
var mainPadding = ($('#main').innerWidth() - $('#main').width()) / 2;
var parentWidth = AJS.$(".ts-toc-btf").parent().parent().outerWidth();
return parentWidth + mainPadding;
};
AJS.$(window).load(function(){
var content_top = AJS.$('#content').offset().top;
var menu_width = getMenuWidth();
var max_width = AJS.$('.ts-toc-btf').width();
AJS.$(".ts-toc-btf")
.addClass('navigation')
.attr('id', 'nav')
.css({'top': content_top, 'visibility': 'visible', 'width': menu_width, 'max-width': max_width});
AJS.$("#nav").scrollspy();
});
AJS.$(window).resize(function() {
var menu_width = getMenuWidth();
AJS.$(".ts-toc-btf")
.css({'width': menu_width});
});
</script> |
Table of Contents | ||||
---|---|---|---|---|
|