Difference between revisions of "R-Car/Boards/Yocto-Gen3/v2.23.1"

From eLinux.org
Jump to: navigation, search
(convert html tag to mediawiki format)
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
{{Template:R-Car-Gen3-Navbox}}
 +
{{Template:R-Car-Yocto-Gen3-legacy-header}}
 
{{TOC right}}
 
{{TOC right}}
 +
[[Category:R-Car]]
  
<span style="color: #ff0000;">
+
== Introduction ==
'''''This page is out of date.'''''<br/>
 
'''''Please refer to the [https://elinux.org/R-Car/Boards/Yocto-Gen3 Yocto-Gen3 page] for the latest version.<br/>'''''
 
</span>
 
 
 
 
This page contains information on building and running Yocto on:
 
This page contains information on building and running Yocto on:
 
* [[R-Car/Boards/H3SK | Renesas R-Car-H3 Starter Kit Premier]] (unofficial name - H3ULCB), https://www.renesas.com/us/en/solutions/automotive/adas/solution-kits/r-car-starter-kit.html
 
* [[R-Car/Boards/H3SK | Renesas R-Car-H3 Starter Kit Premier]] (unofficial name - H3ULCB), https://www.renesas.com/us/en/solutions/automotive/adas/solution-kits/r-car-starter-kit.html
Line 18: Line 17:
  
 
== Host PC ==
 
== Host PC ==
Yocto v2.x.y(Ex Yocto v2.23.1) : Ubuntu 14.04 LTS (64bit) is recommended as OS. 32bit version is not supported. <br/>
+
Ubuntu 14.04 LTS (64bit) is recommended as OS. 32bit version is not supported. <br/>
  
 
== Preliminary steps ==
 
== Preliminary steps ==
 
# Download evaluation version of proprietary graphics and multimedia drivers from Renesas.
 
# Download evaluation version of proprietary graphics and multimedia drivers from Renesas.
#: To download Multimedia and Graphics library and related Linux drivers, please use the following link:
+
#: To download Multimedia and Graphics library and related Linux drivers, please use the following link
#: https://www.renesas.com/us/en/solutions/automotive/rcar-download/rcar-demoboard.html
+
#:: https://www.renesas.com/us/en/solutions/automotive/rcar-download/rcar-demoboard.html
 +
#: Download two files:
 +
#:: R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20170828.zip
 +
#:: R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20170828.zip
 
#: <br/>
 
#: <br/>
 
#: Graphic drivers are required for Wayland. Multimedia drivers are optional.
 
#: Graphic drivers are required for Wayland. Multimedia drivers are optional.
Line 46: Line 48:
 
== Building the BSP for Renesas H3 Starter Kit, M3 Starter Kit ==
 
== Building the BSP for Renesas H3 Starter Kit, M3 Starter Kit ==
 
NOTE: to have ADAS View and HAD Solution kits supported follow instructions: [[R-Car/Boards/Yocto-Gen3-ADAS | R-Car Yocto Gen3 ADAS]]
 
NOTE: to have ADAS View and HAD Solution kits supported follow instructions: [[R-Car/Boards/Yocto-Gen3-ADAS | R-Car Yocto Gen3 ADAS]]
 +
 +
=== Build using script ===
 +
This example is for H3ULCB board.<br/>
 +
If you use other board, you need to modify the script.<br/>
 +
# Directory Structure
 +
#: <syntaxhighlight lang="bash">
 +
|--build.sh
 +
`--proprietary
 +
  |--R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20170828.zip
 +
  `--R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20170828.zip
 +
</syntaxhighlight>
 +
# Build script(build.sh)
 +
#: <syntaxhighlight lang="bash">
 +
#!/bin/bash
 +
 +
#Set the target board
 +
TARGET_BOARD=h3ulcb
 +
#TARGET_BOARD=m3ulcb
 +
 +
# Create a directory and switch to it
 +
mkdir build
 +
cd build
 +
WORK=`pwd`
 +
echo $WORK
 +
 +
# Clone basic Yocto layers in parallel
 +
git clone git://git.yoctoproject.org/poky &
 +
git clone git://git.openembedded.org/meta-openembedded &
 +
git clone git://git.linaro.org/openembedded/meta-linaro.git &
 +
git clone git://github.com/renesas-rcar/meta-renesas &
 +
 +
# Wait for all clone operations
 +
wait
 +
 +
# Switch to proper branches/commits
 +
cd $WORK/poky
 +
git checkout -b tmp yocto-2.1.3
 +
cd $WORK/meta-openembedded
 +
git checkout -b tmp 55c8a76da5dc099a7bc3838495c672140cedb78e
 +
cd $WORK/meta-linaro
 +
git checkout -b tmp 2f51d38048599d9878f149d6d15539fb97603f8f
 +
cd $WORK/meta-renesas
 +
git checkout -b tmp 7acbf5e2f99c59478adbc73c6a40d314589a3009
 +
 +
# Apply Linaro-GCC patch file (The patch only adds README.linaro)
 +
cd $WORK/meta-renesas
 +
export PATCH_DIR=meta-rcar-gen3/docs/sample/patch/patch-for-linaro-gcc
 +
patch -p1 < ${PATCH_DIR}/0001-rcar-gen3-add-readme-for-building-with-Linaro-Gcc.patch
 +
unset PATCH_DIR
 +
 +
# Populate meta-renesas with proprietary software packages
 +
cd $WORK/meta-renesas
 +
sh meta-rcar-gen3/docs/sample/copyscript/copy_evaproprietary_softwares.sh -f $WORK/../proprietary
 +
 +
cd $WORK
 +
source poky/oe-init-build-env
 +
 +
#cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/linaro-gcc/bsp/*.conf ./conf/.
 +
#cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/linaro-gcc/gfx-only/*.conf ./conf/.
 +
cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/linaro-gcc/mmp/*.conf ./conf/.
 +
 +
cd $WORK/build
 +
cp conf/local-wayland.conf conf/local.conf
 +
echo "DISTRO_FEATURES_append = \" use_eva_pkg\"" >> $WORK/build/conf/local.conf
 +
 +
bitbake core-image-weston
 +
 +
</syntaxhighlight>
 +
# build
 +
#: <syntaxhighlight lang="bash">
 +
./build.sh
 +
</syntaxhighlight>
 +
#: If the build completes successfully, all the necessary files are generated in a following directory:
 +
#: <syntaxhighlight lang="text">
 +
./build/build/tmp/deploy/images/<target_board_name>
 +
</syntaxhighlight>
 +
 +
=== Build using manual steps ===
 
# Create a directory and switch to it
 
# Create a directory and switch to it
 
#: Warning! Yocto builds require a lot of disk space (up to 100 GB). Make sure you have got enough before starting the build.
 
#: Warning! Yocto builds require a lot of disk space (up to 100 GB). Make sure you have got enough before starting the build.
Line 147: Line 227:
 
== Build SDK ==
 
== Build SDK ==
 
* After building BSP you may build SDK:
 
* After building BSP you may build SDK:
*: <syntaxhighlight>bitbake core-image-weston -c populate_sdk</syntaxhighlight>
+
*: <syntaxhighlight lang="text">bitbake core-image-weston -c populate_sdk</syntaxhighlight>
 
* After build finished the SDK installation script may be found in following path:
 
* After build finished the SDK installation script may be found in following path:
*: <syntaxhighlight>tmp/deploy/sdk/poky-glibc-x86_64-core-image-weston-aarch64-toolchain-*.sh</syntaxhighlight>
+
*: <syntaxhighlight lang="text">tmp/deploy/sdk/poky-glibc-x86_64-core-image-weston-aarch64-toolchain-*.sh</syntaxhighlight>
 
* Install SDK by run the following command and follow instructions on the screen:
 
* Install SDK by run the following command and follow instructions on the screen:
*: <syntaxhighlight>./tmp/deploy/sdk/poky-glibc-x86_64-core-image-weston-aarch64-toolchain-*.sh</syntaxhighlight>
+
*: <syntaxhighlight lang="text">./tmp/deploy/sdk/poky-glibc-x86_64-core-image-weston-aarch64-toolchain-*.sh</syntaxhighlight>
  
 
== Running Yocto images ==
 
== Running Yocto images ==
Line 199: Line 279:
 
cp $WORK/build/tmp/deploy/images/h3ulcb/Image-r8a7795-h3ulcb-4x2g.dtb /var/lib/tftpboot/
 
cp $WORK/build/tmp/deploy/images/h3ulcb/Image-r8a7795-h3ulcb-4x2g.dtb /var/lib/tftpboot/
 
</syntaxhighlight>
 
</syntaxhighlight>
#: [http://elinux.org/R-Car/Boards/H3SK#H3SK_has_two_kinds_of_boards/ Which is my H3SK board WS2.0 or WS1.1?]
+
#: [https://elinux.org/R-Car/Boards/H3SK#H3SK_has_several_kinds_of_boards Which version is my H3SK board?]
 
# Verify that TFTP server is working.
 
# Verify that TFTP server is working.
 
#: <syntaxhighlight lang="bash">
 
#: <syntaxhighlight lang="bash">
Line 232: Line 312:
 
# Export root FS to NFS. (Change IMAGE and MACHINE to fit your build).
 
# Export root FS to NFS. (Change IMAGE and MACHINE to fit your build).
 
## Unpack rootfs to a dedicated directory:
 
## Unpack rootfs to a dedicated directory:
##: <syntaxhighlight>
+
##: <syntaxhighlight lang="text">
 
IMAGE=weston
 
IMAGE=weston
 
MACHINE=h3ulcb|m3ulcb
 
MACHINE=h3ulcb|m3ulcb
Line 246: Line 326:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
##: add
 
##: add
##: <syntaxhighlight>
+
##: <syntaxhighlight lang="text">
 
/nfs/h3ulcb *(rw,no_subtree_check,sync,no_root_squash,no_all_squash)
 
/nfs/h3ulcb *(rw,no_subtree_check,sync,no_root_squash,no_all_squash)
 
/nfs/m3ulcb *(rw,no_subtree_check,sync,no_root_squash,no_all_squash)
 
/nfs/m3ulcb *(rw,no_subtree_check,sync,no_root_squash,no_all_squash)
Line 270: Line 350:
 
Replace xx:xx:xx:xx:xx:xx with the MAC address of your board. It should be on the sticker on top of the Ethernet port.<br/>
 
Replace xx:xx:xx:xx:xx:xx with the MAC address of your board. It should be on the sticker on top of the Ethernet port.<br/>
 
  -->
 
  -->
#: <syntaxhighlight>
+
#: <syntaxhighlight lang="text">
 
setenv ipaddr <board-ip>
 
setenv ipaddr <board-ip>
 
setenv serverip <your-computer-ip>
 
setenv serverip <your-computer-ip>
Line 278: Line 358:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
#: Replace <board-ip> with the proper IP address for the board.  Replace <your-computer-ip> with the IP address of your computer, where tftp and nfs servers are installed. Replace <nfs-path> with the exported path of the root FS. <br/> For example:
 
#: Replace <board-ip> with the proper IP address for the board.  Replace <your-computer-ip> with the IP address of your computer, where tftp and nfs servers are installed. Replace <nfs-path> with the exported path of the root FS. <br/> For example:
#: <syntaxhighlight>
+
#: <syntaxhighlight lang="text">
 
setenv ipaddr 192.168.1.3
 
setenv ipaddr 192.168.1.3
 
setenv serverip 192.168.1.2
 
setenv serverip 192.168.1.2
Line 286: Line 366:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
#: You can also use
 
#: You can also use
#: <syntaxhighlight>
+
#: <syntaxhighlight lang="text">
 
dhcp
 
dhcp
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 292: Line 372:
 
#: '''Note:''' You can always see the environment with ''printenv'' command.  Refer to [http://www.denx.de/wiki/U-Boot/Documentation U-Boot manual] for details.
 
#: '''Note:''' You can always see the environment with ''printenv'' command.  Refer to [http://www.denx.de/wiki/U-Boot/Documentation U-Boot manual] for details.
 
# Verify the connection over Ethernet from U-Boot:
 
# Verify the connection over Ethernet from U-Boot:
#: <syntaxhighlight>
+
#: <syntaxhighlight lang="text">
 
ping <your-computer-ip>
 
ping <your-computer-ip>
 
</syntaxhighlight>
 
</syntaxhighlight>
 
#: You should see:
 
#: You should see:
#: <syntaxhighlight>
+
#: <syntaxhighlight lang="text">
 
=> ping 192.168.1.2
 
=> ping 192.168.1.2
 
ravb:0 is connected to ravb.  Reconnecting to ravb
 
ravb:0 is connected to ravb.  Reconnecting to ravb
Line 307: Line 387:
 
#: Refer to [[R-Car/Boards/H3SK#Power_on_the_board_and_go_to_U-Boot_prompt|H3SK board page]], [[R-Car/Boards/M3SK#Power_on_the_board_and_go_to_U-Boot_prompt|M3SK board page]] for more information.
 
#: Refer to [[R-Car/Boards/H3SK#Power_on_the_board_and_go_to_U-Boot_prompt|H3SK board page]], [[R-Car/Boards/M3SK#Power_on_the_board_and_go_to_U-Boot_prompt|M3SK board page]] for more information.
 
# The board should boot the kernel:
 
# The board should boot the kernel:
#: <syntaxhighlight>
+
#: <syntaxhighlight lang="text">
 
NOTICE:  BL2: R-Car Gen3 Initial Program Loader(CA57) Rev.1.0.10
 
NOTICE:  BL2: R-Car Gen3 Initial Program Loader(CA57) Rev.1.0.10
 
NOTICE:  BL2: PRR is R-Car H3 ES1.0
 
NOTICE:  BL2: PRR is R-Car H3 ES1.0
Line 414: Line 494:
 
Starting kernel ...                                                                                                                         
 
Starting kernel ...                                                                                                                         
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
=== Loading kernel and rootfs via eMMC/SD card ===
== How to prepare and boot from eMMC/SD card ==
 
 
This section describes steps that are necessary for preparing and booting from SD card.
 
This section describes steps that are necessary for preparing and booting from SD card.
  
=== Preparing eMMC/SD card ===
+
==== Preparing eMMC/SD card ====
 
In order to prepare you SD card, follow these instructions on host machine:
 
In order to prepare you SD card, follow these instructions on host machine:
 
# Partion your SD card to set 1 partition and ID=83 (Linux)
 
# Partion your SD card to set 1 partition and ID=83 (Linux)
Line 445: Line 524:
 
#: NOTE: probably you need to be a root user, hence use "sudo"
 
#: NOTE: probably you need to be a root user, hence use "sudo"
  
=== Configure U-Boot to boot from SD card ===
+
==== Configure U-Boot to boot from SD card ====
 
* Proper U-Boot command to boot from SD:
 
* Proper U-Boot command to boot from SD:
*: <syntaxhighlight>
+
*: <syntaxhighlight lang="text">
 
# setenv bootargs 'rw root=/dev/mmcblk1p1 rootwait'
 
# setenv bootargs 'rw root=/dev/mmcblk1p1 rootwait'
 
# ext2load mmc 0:1 0x48080000 /boot/Image
 
# ext2load mmc 0:1 0x48080000 /boot/Image
Line 459: Line 538:
 
*:: I switched to 'rootfstype=ext4' in my bootargs, and the kernel booted OK.
 
*:: I switched to 'rootfstype=ext4' in my bootargs, and the kernel booted OK.
 
* Example of U-Boot environment variables:
 
* Example of U-Boot environment variables:
*: <syntaxhighlight>
+
*: <syntaxhighlight lang="text">
 
baudrate=115200
 
baudrate=115200
 
bootargs_emmc=rw root=/dev/mmcblk0p1 rootwait
 
bootargs_emmc=rw root=/dev/mmcblk0p1 rootwait
Line 504: Line 583:
 
         14039040 Image-4.9.0-yocto-standard
 
         14039040 Image-4.9.0-yocto-standard
 
           69584 Image-r8a7795-h3ulcb.dtb
 
           69584 Image-r8a7795-h3ulcb.dtb
</syntaxhighlight>
 
 
== Build scripts examples ==
 
# Build preparation
 
#: YOCTO_VERSION and META_VERSION must be changed depending your Yocto version.
 
#: <syntaxhighlight lang="bash">
 
#!/bin/sh
 
 
# Create a directory and switch to it
 
mkdir build
 
cd build
 
WORK=`pwd`
 
echo $WORK
 
 
# For Yocto v2.23.1
 
YOCTO_VERSION=yocto-2.1.3
 
META_VERSION=krogoth
 
 
# Clone basic Yocto layers in parallel
 
git clone -b $YOCTO_VERSION --depth 1 git://git.yoctoproject.org/poky &
 
git clone -b $META_VERSION --depth 1 git://git.linaro.org/openembedded/meta-linaro.git &
 
git clone -b $META_VERSION --depth 1 git://git.openembedded.org/meta-openembedded &
 
git clone -b $META_VERSION --depth 1 git://github.com/renesas-rcar/meta-renesas &
 
 
# Wait for all clone operations
 
wait
 
 
# Apply Linaro-GCC patch file (The patch only adds README.linaro)
 
cd $WORK/meta-renesas
 
export PATCH_DIR=meta-rcar-gen3/docs/sample/patch/patch-for-linaro-gcc
 
patch -p1 < ${PATCH_DIR}/0001-rcar-gen3-add-readme-for-building-with-Linaro-Gcc.patch
 
unset PATCH_DIR
 
 
# Make sure proprietary driver modules are downloaded to $WORK/proprietary folder
 
# If the modules are not downloaded, copy_evaproprietary_softwares.sh warns it
 
# See https://www.renesas.com/en-us/solutions/automotive/rcar-demoboard.html (need to login!)
 
# $ ls -1 $WORK/proprietary/*.zip
 
# R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20170828.zip
 
# R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20170828.zip
 
 
# Populate meta-renesas with proprietary software packages
 
cd $WORK/meta-renesas
 
sh meta-rcar-gen3/docs/sample/copyscript/copy_evaproprietary_softwares.sh -f $WORK/proprietary
 
</syntaxhighlight>
 
# Building yocto for H3ULCB board
 
#: <syntaxhighlight lang="bash">
 
#!/bin/sh
 
 
cd build
 
WORK=`pwd`
 
echo $WORK
 
 
cd $WORK
 
source poky/oe-init-build-env
 
 
#cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/h3ulcb/linaro-gcc/bsp/*.conf ./conf/.
 
#cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/h3ulcb/linaro-gcc/gfx-only/*.conf ./conf/.
 
cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/h3ulcb/linaro-gcc/mmp/*.conf ./conf/.
 
 
cd $WORK/build
 
cp conf/local-wayland.conf conf/local.conf
 
echo "DISTRO_FEATURES_append = \" use_eva_pkg\"" >> $WORK/build/conf/local.conf
 
 
bitbake core-image-weston
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Latest revision as of 20:13, 29 June 2020

This page is out of date.
Please refer to the Yocto-Gen3 page for the latest version.

Introduction

This page contains information on building and running Yocto on:

NOTE: USE OFFICIAL DOCUMENTATION provided with R-Car BSPs FOR H3SK/M3SK boards

Yocto versions

Poky-2.1.3 is supported with Yocto v2.23.1.
Specific commit of meta-openembedded is required.

Host PC

Ubuntu 14.04 LTS (64bit) is recommended as OS. 32bit version is not supported.

Preliminary steps

  1. Download evaluation version of proprietary graphics and multimedia drivers from Renesas.
    To download Multimedia and Graphics library and related Linux drivers, please use the following link
    https://www.renesas.com/us/en/solutions/automotive/rcar-download/rcar-demoboard.html
    Download two files:
    R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20170828.zip
    R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20170828.zip

    Graphic drivers are required for Wayland. Multimedia drivers are optional.
  2. Install required packages
    Ubuntu and Debian
    sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
         build-essential chrpath socat libsdl1.2-dev xterm python-crypto cpio python python3 \
         python3-pip python3-pexpect xz-utils debianutils iputils-ping libssl-dev
    
    Fedora
    sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch \
         diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath \
         ccache perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue socat \
         SDL-devel xterm python-crypto cpio python python3 python3-pip python3-pexpect \
         ghc-lzma-conduit iputils openssl
    
    Refer to Yocto Project Quick Start for more information.


Building the BSP for Renesas H3 Starter Kit, M3 Starter Kit

NOTE: to have ADAS View and HAD Solution kits supported follow instructions: R-Car Yocto Gen3 ADAS

Build using script

This example is for H3ULCB board.
If you use other board, you need to modify the script.

  1. Directory Structure
    |--build.sh
    `--proprietary
       |--R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20170828.zip
       `--R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20170828.zip
    
  2. Build script(build.sh)
    #!/bin/bash
    
    #Set the target board
    TARGET_BOARD=h3ulcb
    #TARGET_BOARD=m3ulcb
    
    # Create a directory and switch to it
    mkdir build
    cd build
    WORK=`pwd`
    echo $WORK
    
    # Clone basic Yocto layers in parallel
    git clone git://git.yoctoproject.org/poky &
    git clone git://git.openembedded.org/meta-openembedded &
    git clone git://git.linaro.org/openembedded/meta-linaro.git &
    git clone git://github.com/renesas-rcar/meta-renesas &
    
    # Wait for all clone operations
    wait
    
    # Switch to proper branches/commits
    cd $WORK/poky
    git checkout -b tmp yocto-2.1.3
    cd $WORK/meta-openembedded
    git checkout -b tmp 55c8a76da5dc099a7bc3838495c672140cedb78e
    cd $WORK/meta-linaro
    git checkout -b tmp 2f51d38048599d9878f149d6d15539fb97603f8f
    cd $WORK/meta-renesas
    git checkout -b tmp 7acbf5e2f99c59478adbc73c6a40d314589a3009
    
    # Apply Linaro-GCC patch file (The patch only adds README.linaro)
    cd $WORK/meta-renesas
    export PATCH_DIR=meta-rcar-gen3/docs/sample/patch/patch-for-linaro-gcc
    patch -p1 < ${PATCH_DIR}/0001-rcar-gen3-add-readme-for-building-with-Linaro-Gcc.patch
    unset PATCH_DIR
    
    # Populate meta-renesas with proprietary software packages
    cd $WORK/meta-renesas
    sh meta-rcar-gen3/docs/sample/copyscript/copy_evaproprietary_softwares.sh -f $WORK/../proprietary
    
    cd $WORK
    source poky/oe-init-build-env
    
    #cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/linaro-gcc/bsp/*.conf ./conf/.
    #cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/linaro-gcc/gfx-only/*.conf ./conf/.
    cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/${TARGET_BOARD}/linaro-gcc/mmp/*.conf ./conf/.
    
    cd $WORK/build
    cp conf/local-wayland.conf conf/local.conf
    echo "DISTRO_FEATURES_append = \" use_eva_pkg\"" >> $WORK/build/conf/local.conf
    
    bitbake core-image-weston
    
  3. build
    ./build.sh
    
    If the build completes successfully, all the necessary files are generated in a following directory:
    ./build/build/tmp/deploy/images/<target_board_name>
    

Build using manual steps

  1. Create a directory and switch to it
    Warning! Yocto builds require a lot of disk space (up to 100 GB). Make sure you have got enough before starting the build.
    mkdir build
    cd build
    export WORK=`pwd`
    
  2. Clone basic Yocto layers:
    cd $WORK
    git clone git://git.yoctoproject.org/poky
    git clone git://git.openembedded.org/meta-openembedded
    git clone git://git.linaro.org/openembedded/meta-linaro.git
    git clone git://github.com/renesas-rcar/meta-renesas
    
  3. Switch to proper branches/commits
    cd $WORK/poky
    git checkout -b tmp yocto-2.1.3
    cd $WORK/meta-openembedded
    git checkout -b tmp 55c8a76da5dc099a7bc3838495c672140cedb78e
    cd $WORK/meta-linaro
    git checkout -b tmp 2f51d38048599d9878f149d6d15539fb97603f8f
    cd $WORK/meta-renesas
    git checkout -b tmp 7acbf5e2f99c59478adbc73c6a40d314589a3009
    
    Another versions are not tested for compatibility.
    Legacy BSP instruction can be found here R-Car Yocto Gen3 legacy
  4. Apply Linaro-GCC patch file:
    cd $WORK/meta-renesas
    export PATCH_DIR=meta-rcar-gen3/docs/sample/patch/patch-for-linaro-gcc
    patch -p1 < ${PATCH_DIR}/0001-rcar-gen3-add-readme-for-building-with-Linaro-Gcc.patch
    unset PATCH_DIR
    
  5. Download proprietary driver modules to $WORK/proprietary folder
    You should see the following files:
    $ ls -1 $WORK/proprietary/*.zip
    R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20170828.zip
    R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20170828.zip
    
  6. Populate meta-renesas with proprietary software packages.
    export PKGS_DIR=$WORK/proprietary
    cd $WORK/meta-renesas
    sh meta-rcar-gen3/docs/sample/copyscript/copy_evaproprietary_softwares.sh -f $PKGS_DIR
    unset PKGS_DIR
    
  7. Setup build environment
    cd $WORK
    source poky/oe-init-build-env
    
  8. Prepare default configuration files.
    cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/<h3ulcb|m3ulcb>/linaro-gcc/mmp/*.conf ./conf/
    cd $WORK/build
    cp conf/local-wayland.conf conf/local.conf
    
  9. (Edit $WORK/build/conf/local.conf to enable/disable graphics and multimedia proprietary drivers support)
  10. Edit local.conf with evaluation packages requirements:
    DISTRO_FEATURES_append = " use_eva_pkg"
    
  11. Start the build
    bitbake core-image-weston
    
  12. Building image can take up to a few hours depending on your host system performance.
    After the build has been completed successfully, you should see the output similar to:
    NOTE: Tasks Summary: Attempted 4704 tasks of which 31 didn't need to be rerun and all succeeded.
    
    and the command prompt should return.
  13. Bitbake has generated all the necessary files in ./tmp/deploy/images directory.
    You can verify its content:
    $ ls -1 `find ./tmp/deploy/images/h3ulcb/ -maxdepth 1 -type l -print`
    ./tmp/deploy/images/h3ulcb/core-image-weston-h3ulcb.cpio.gz
    ./tmp/deploy/images/h3ulcb/core-image-weston-h3ulcb.ext4
    ./tmp/deploy/images/h3ulcb/core-image-weston-h3ulcb.manifest
    ./tmp/deploy/images/h3ulcb/core-image-weston-h3ulcb.tar.bz2
    ./tmp/deploy/images/h3ulcb/Image
    ./tmp/deploy/images/h3ulcb/Image-h3ulcb.bin
    ./tmp/deploy/images/h3ulcb/Image-r8a7795-es1-h3ulcb.dtb
    ./tmp/deploy/images/h3ulcb/Image-r8a7795-h3ulcb-4x2g.dtb
    ./tmp/deploy/images/h3ulcb/Image-r8a7795-h3ulcb.dtb
    ./tmp/deploy/images/h3ulcb/modules-h3ulcb.tgz
    ./tmp/deploy/images/h3ulcb/u-boot.bin
    ./tmp/deploy/images/h3ulcb/u-boot-elf-h3ulcb.srec
    ./tmp/deploy/images/h3ulcb/u-boot-elf.srec
    ./tmp/deploy/images/h3ulcb/u-boot-h3ulcb.bin
    
    Image is a Kernel image, *.dtb is a blob file, core-image-weston-h3ulcb.tar.bz2 is the rootfs, modules-h3ulcb.tgz are kernel modules.
  14. You can now proceed with running Yocto images


Build SDK

  • After building BSP you may build SDK:
    bitbake core-image-weston -c populate_sdk
    
  • After build finished the SDK installation script may be found in following path:
    tmp/deploy/sdk/poky-glibc-x86_64-core-image-weston-aarch64-toolchain-*.sh
    
  • Install SDK by run the following command and follow instructions on the screen:
    ./tmp/deploy/sdk/poky-glibc-x86_64-core-image-weston-aarch64-toolchain-*.sh
    

Running Yocto images

Linux kernel can be booted from microSD card or from TFTP. Root FS can be mounted from micro SD card or via NFS.

Loading kernel via TFTP and rootfs via NFS

Follow these steps to setup working TFTP and NFS server:

  1. Setup a TFTP server.
    Ubuntu
    Install tftpd-hpa package along with tftp tools:
    sudo apt-get install tftp tftpd-hpa
    
    Fedora
    1. Install necessary packages:
      sudo yum install tftp-server tftp
      
      tftp-server is a part of xinetd. See Fedora manual for more information.
    2. Enable TFTP server:
      sudo vi /etc/xinetd.d/tftp
      
      Set
      disable = no
      
      Save file and exit.
    3. Start xinetd:
      sudo systemctl start xinetd.service
      sudo systemctl enable xinetd.service
      
  2. Copy Image and Image-r8a7795-h3ulcb.dtb (for ws2.0 silicon) and/or Image-r8a7795-h3ulcb-4x2g.dtb (for RTP0RC77951SKBX010SA03(DDR 8GiB)) and/or Image-r8a7795-es1-h3ulcb.dtb (for ws1.1) from $WORK/build/tmp/deploy/images/h3ulcb/ to TFTP server root.
    Ubuntu
    cp $WORK/build/tmp/deploy/images/h3ulcb/Image /srv/tftp/
    cp $WORK/build/tmp/deploy/images/h3ulcb/Image-r8a7795-es1-h3ulcb.dtb /srv/tftp/
    cp $WORK/build/tmp/deploy/images/h3ulcb/Image-r8a7795-h3ulcb.dtb /srv/tftp/
    cp $WORK/build/tmp/deploy/images/h3ulcb/Image-r8a7795-h3ulcb-4x2g.dtb /srv/tftp/
    
  1. Fedora
    cp $WORK/build/tmp/deploy/images/h3ulcb/Image /var/lib/tftpboot/
    cp $WORK/build/tmp/deploy/images/h3ulcb/Image-r8a7795-es1-h3ulcb.dtb /var/lib/tftpboot/
    cp $WORK/build/tmp/deploy/images/h3ulcb/Image-r8a7795-h3ulcb.dtb /var/lib/tftpboot/
    cp $WORK/build/tmp/deploy/images/h3ulcb/Image-r8a7795-h3ulcb-4x2g.dtb /var/lib/tftpboot/
    
    Which version is my H3SK board?
  2. Verify that TFTP server is working.
    tftp localhost -c get Image && ls Image
    
  3. Setup NFS server.
    Debian/Ubuntu
    1. Install necessary packages:
      sudo apt-get install nfs-kernel-server nfs-common
      
    2. Start NFS server:
      sudo /etc/init.d/nfs-kernel-server start
      
    Fedora
    1. Install necessary packages:
      • sudo yum install nfs-utils
        
    2. Enable and start nfs server:
      sudo systemctl enable rpcbind.service 
      sudo systemctl enable nfs-server.service 
      sudo systemctl enable nfs-lock.service 
      sudo systemctl enable nfs-idmap.service
      sudo systemctl start rpcbind.service 
      sudo systemctl start nfs-server.service 
      sudo systemctl start nfs-lock.service 
      sudo systemctl start nfs-idmap.service
      
  4. Export root FS to NFS. (Change IMAGE and MACHINE to fit your build).
    1. Unpack rootfs to a dedicated directory:
      IMAGE=weston
      MACHINE=h3ulcb|m3ulcb
      NFS_ROOT=/nfs/${MACHINE}
      sudo mkdir -p "${NFS_ROOT}"
      sudo rm -rf "${NFS_ROOT}"/*
      sudo tar -xjf "${WORK}/build/tmp/deploy/images/${MACHINE}/core-image-${IMAGE}-${MACHINE}-*.tar.bz2" -C "${NFS_ROOT}"
      sync
      
    2. Edit /etc/exports:
      sudo vi /etc/exports
      
      add
      /nfs/h3ulcb	*(rw,no_subtree_check,sync,no_root_squash,no_all_squash)
      /nfs/m3ulcb	*(rw,no_subtree_check,sync,no_root_squash,no_all_squash)
      
      Save the file and exit.
    3. Force NFS server to re-read /etc/exports
      sudo exportfs -a
      
  5. Verify that NFS is working.
    [builduser@buildmachine ~]$ showmount -e localhost
    Export list for localhost:
    /nfs/h3ulcb *
    /nfs/m3ulcb *
    
  6. Boot into U-Boot command prompt
    1. Connect to serial console over microUSB using minicom or picocom.
    2. Switch the board on or reset it. Press any key to stop U-Boot automatic countdown.
    Refer to H3SK board page, M3SK board page for more information.
  7. Configure Ethernet, TFTP, and kernel command line in U-Boot:
    setenv ipaddr <board-ip>
    setenv serverip <your-computer-ip>
    setenv bootcmd 'tftp 0x48080000 Image; tftp 0x48000000 Image-r8a7795-h3ulcb.dtb; booti 0x48080000 - 0x48000000'
    setenv bootargs 'ignore_loglevel rw root=/dev/nfs nfsroot=<your-computer-ip>:<nfs-path>,nfsvers=3 ip=<board-ip>:<your-computer-ip>::255.255.255.0:h3ulcb'
    saveenv
    
    Replace <board-ip> with the proper IP address for the board. Replace <your-computer-ip> with the IP address of your computer, where tftp and nfs servers are installed. Replace <nfs-path> with the exported path of the root FS.
    For example:
    setenv ipaddr 192.168.1.3
    setenv serverip 192.168.1.2
    setenv bootcmd 'tftp 0x48080000 Image; tftp 0x48000000 Image-r8a7795-h3ulcb.dtb; booti 0x48080000 - 0x48000000'
    setenv bootargs 'ignore_loglevel rw root=/dev/nfs nfsroot=192.168.1.2:/nfs/h3ulcb,nfsvers=3 ip=192.168.1.3:192.168.1.2::255.255.255.0:h3ulcb'
    saveenv
    
    You can also use
    dhcp
    
    command to obtain information from DHCP server.
    Note: You can always see the environment with printenv command. Refer to U-Boot manual for details.
  8. Verify the connection over Ethernet from U-Boot:
    ping <your-computer-ip>
    
    You should see:
    => ping 192.168.1.2
    ravb:0 is connected to ravb.  Reconnecting to ravb
    ravb Waiting for PHY auto negotiation to complete.. done
    ravb: 100Base/Full
    Using ravb device
    host 192.168.1.2 is alive
    
  9. Reset the board by pushing reset button
    Refer to H3SK board page, M3SK board page for more information.
  10. The board should boot the kernel:
    NOTICE:  BL2: R-Car Gen3 Initial Program Loader(CA57) Rev.1.0.10
    NOTICE:  BL2: PRR is R-Car H3 ES1.0
    NOTICE:  BL2: Boot device is HyperFlash(80MHz)
    NOTICE:  BL2: LCM state is CM
    NOTICE:  BL2: AVS setting succeeded. DVFS_SetVID=0x52
    NOTICE:  BL2: DDR1600(rev.0.10)
    NOTICE:  BL2: DRAM Split is 4ch
    NOTICE:  BL2: QoS is default setting(rev.0.32)
    NOTICE:  BL2: Lossy Decomp areas
    NOTICE:       Entry 0: DCMPAREACRAx:0x80000540 DCMPAREACRBx:0x570
    NOTICE:       Entry 1: DCMPAREACRAx:0x40000000 DCMPAREACRBx:0x0
    NOTICE:       Entry 2: DCMPAREACRAx:0x20000000 DCMPAREACRBx:0x0
    NOTICE:  BL2: v1.1(release):c2f9fc9
    NOTICE:  BL2: Built : 00:36:25, Nov 20 2016
    NOTICE:  BL2: Normal boot
    NOTICE:  BL2: dst=0xe631a1a8 src=0x8180000 len=512(0x200)
    NOTICE:  BL2: dst=0x43f00000 src=0x8180400 len=6144(0x1800)
    NOTICE:  BL2: dst=0x44000000 src=0x81c0000 len=65536(0x10000)
    NOTICE:  BL2: dst=0x44100000 src=0x8200000 len=524288(0x80000)
    NOTICE:  BL2: dst=0x50000000 src=0x8640000 len=1048576(0x100000)
    
    
    U-Boot 2015.04 (Nov 20 2016 - 00:54:11)
    
    CPU: Renesas Electronics R8A7795 rev 1.0
    Board: H3ULCB
    I2C:   ready
    DRAM:  3.9 GiB
    MMC:   sh-sdhi: 0, sh-sdhi: 1
    In:    serial
    Out:   serial
    Err:   serial
    Net:   ravb
    Hit any key to stop autoboot:  0 
    ravb Waiting for PHY auto negotiation to complete.. done
    ravb: 100Base/Full
    BOOTP broadcast 1
    BOOTP broadcast 2
    BOOTP broadcast 3
    DHCP client bound to address 192.166.10.31 (1287 ms)
    Using ravb device
    TFTP from server 192.166.10.1; our IP address is 192.166.10.31
    Filename 'Image'.
    Load address: 0x48080000
    Loading: #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             ####################################################
             627 KiB/s
    done
    Bytes transferred = 13905920 (d43000 hex)
    ravb:0 is connected to ravb.  Reconnecting to ravb
    ravb Waiting for PHY auto negotiation to complete. done
    ravb: 100Base/Full
    Using ravb device
    TFTP from server 192.166.10.1; our IP address is 192.166.10.31
    Filename 'Image-r8a7795-h3ulcb.dtb'.
    Load address: 0x48000000
    Loading: #############
             12.7 KiB/s
    done
    Bytes transferred = 66470 (103a6 hex)
    ## Flattened Device Tree blob at 48000000
       Booting using the fdt blob at 0x48000000
       Using Device Tree in place at 0000000048000000, end 00000000480133a5
    
    Starting kernel ...
    

Loading kernel and rootfs via eMMC/SD card

This section describes steps that are necessary for preparing and booting from SD card.

Preparing eMMC/SD card

In order to prepare you SD card, follow these instructions on host machine:

  1. Partion your SD card to set 1 partition and ID=83 (Linux)
    Make sure the SD card doesn't contain any important files.
    WARNING! These steps may erase the SD card completely. All files my be lost.
    $ fdisk /dev/mmcblk0
    -> d
    -> n
    -> p
    -> 1
    -> t
    -> 83
    
  2. Format this partition to ext3 (or ext4)
    $ mkfs.ext3 /dev/mmcblk0p1
    
  3. Mount this partition on your host to any directory and upack the core-image-weston-*.tar.bz2 into mounted folder. And Copy Image and Image-r8a7795-h3ulcb.dtb (for ws2.0 silicon) and/or Image-r8a7795-h3ulcb-4x2g.dtb (for RTP0RC77951SKBX010SA03(DDR 8GiB)) and/or Image-r8a7795-es1-h3ulcb.dtb (for ws1.1) from $WORK/build/tmp/deploy/images/h3ulcb/ to sd card /boot. In case of m3ulcb copy dtb from $WORK/build/tmp/deploy/images/m3ulcb/.
    $ mount /dev/mmcblk0p1 /mnt
    $ cd <your_yocto_build_directory>
    $ tar xfj  build/tmp/deploy/images/h3ulcb/core-image-weston-h3ulcb-*.rootfs.tar.bz2  -C /mnt
    $ cp $WORK/build/tmp/deploy/images/h3ulcb/XXXX.dtb /mnt/boot/
    
    NOTE: probably you need to be a root user, hence use "sudo"

Configure U-Boot to boot from SD card

  • Proper U-Boot command to boot from SD:
    # setenv bootargs 'rw root=/dev/mmcblk1p1 rootwait'
    # ext2load mmc 0:1 0x48080000 /boot/Image
    # ext2load mmc 0:1 0x48000000 /boot/Image-r8a7795-h3ulcb.dtb
    # booti 0x48080000 - 0x48000000
    
    Note from user:
    When I created my image with mkfs.ext3, and booted with rootfstype=ext3, the kernel could not find mount the filesystem.
    The kernel boot gave an error message:
    "EXT4-fs (mmcblk1p1): couldn't mount as ext3 due to feature incompatibilities".
    I switched to 'rootfstype=ext4' in my bootargs, and the kernel booted OK.
  • Example of U-Boot environment variables:
    baudrate=115200
    bootargs_emmc=rw root=/dev/mmcblk0p1 rootwait
    bootargs_nfs=rw root=/dev/nfs rootwait ip=dhcp
    bootargs_sd0=rw root=/dev/mmcblk1p1 rootwait
    bootcmd=run bootcmd_sd0
    bootcmd_emmc=set bootargs ${bootargs_emmc};ext2load mmc 1:1 0x48080000 /boot/Image;ext2load mmc 1:1 0x48000000 /boot/${dtb};run booti_cmd
    bootcmd_nfs=set bootargs ${bootargs_nfs};bootp 0x48080000 Image;tftp 0x48000000 ${dtb};run booti_cmd
    bootcmd_sd0=set bootargs ${bootargs_sd0};ext2load mmc 0:1 0x48080000 /boot/Image;ext2load mmc 0:1 0x48000000 /boot/${dtb};run booti_cmd
    bootdelay=3
    booti_cmd=booti 0x48080000 - 0x48000000
    dtb=Image-r8a7795-h3ulcb.dtb
    ethact=ravb
    ethaddr=2E:09:0A:00:BE:11
    fdt_high=0xffffffffffffffff
    initrd_high=0xffffffffffffffff
    stderr=serial
    stdin=serial
    stdout=serial
    ver=U-Boot 2015.04 (Sep 23 2016 - 13:45:29)<br>
    Environment size: 1092/131068 bytes
    
  • To verify the SD card, type the following in U-Boot prompt:
    => mmc dev 0 
    switch to partitions #0, OK
    mmc0 is current device
    => mmc info
    Device: sh-sdhi
    Manufacturer ID: 3
    OEM: 5344
    Name: SL64G 
    Tran Speed: 50000000
    Rd Block Len: 512
    SD version 3.0
    High Capacity: Yes
    Capacity: 59.5 GiB
    Bus Width: 4-bit
    Erase Group Size: 512 Bytes
    => ext2ls mmc 0:1 /boot
    <DIR>       4096 .
    <DIR>       4096 ..
    <SYM>         32 Image
            14039040 Image-4.9.0-yocto-standard
               69584 Image-r8a7795-h3ulcb.dtb
    

FAQ

Discussion site

http://elinux.org/Talk:R-Car/Boards/Yocto-Gen3

How do I increase USB bandwidth

  1. Download:
    M3SK File:M3v10 usb20 iso mode.zip
    H3SK WS1.1 (RTP0RC7795SKBX0010SA00) File:H3v11 usb20 iso mode.zip
    H3SK WS2.0 (RTP0RC77951SKBX010SA00) File:H3v20 usb20 iso mode.zip
  2. Setting
    # <Install Driver>
    $ modprobe qos
    # <Change directory to csv path>
    $ cd /path_to_csv
    # <Store QoS parameters to QoS SRAM>
    $ qos_tp setall file.csv
    # <Reflect Qos SRAM to QoS controller>
    $ qos_tp switch
    

Known issues and limitations

TBD