R-Car/Boards/Yocto-Gen3/v3.21.0

This page contains information on building and running Yocto on: NOTE: USE OFFICIAL DOCUMENTATION provided with R-Car BSPs FOR H3SK/M3SK boards
 * 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
 * Renesas R-Car-M3 Starter Kit Pro (unofficial name - M3ULCB), https://www.renesas.com/us/en/solutions/automotive/adas/solution-kits/r-car-starter-kit.html
 * Infotainment Carrier Board For R-Car Starter Kit(Kingfisher)

Yocto versions
Poky-2.1.3 is supported with Yocto v2.23.1. Poky-2.4.2 is supported with Yocto v3.9.0. Poky-2.4.3 is supported with Yocto v3.13.0, v3.15.0, v3.19.0, v3.21.0. Specific commit of meta-openembedded is required.

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. Yocto v3.x.y(Ex Yocto v3.21.0) : Ubuntu 16.04 LTS (64bit) is recommended as OS. 32bit version is not supported.

Preliminary steps
 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 Graphic drivers are required for Wayland. Multimedia drivers are optional. 

 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  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`  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 

 Switch to proper branches/commits   For Yocto v2.23.1 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   For Yocto v3.9.0 cd $WORK/poky git checkout -b tmp 342fbd6a3e57021c8e28b124b3adb241936f3d9d cd $WORK/meta-openembedded git checkout -b tmp dacfa2b1920e285531bec55cd2f08743390aaf57 cd $WORK/meta-linaro git checkout -b tmp 75dfb67bbb14a70cd47afda9726e2e1c76731885 cd $WORK/meta-renesas git checkout -b tmp fd078b6ece537d986852cb827bd21e022a797b2f </li>  For Yocto v3.13.0 (Note: https://elinux.org/R-Car/Boards/Yocto-Gen3#Known_issues_and_limitations (No.3)) cd $WORK/poky git checkout -b tmp 7e7ee662f5dea4d090293045f7498093322802cc cd $WORK/meta-openembedded git checkout -b tmp 352531015014d1957d6444d114f4451e241c4d23 cd $WORK/meta-linaro git checkout -b tmp 75dfb67bbb14a70cd47afda9726e2e1c76731885 cd $WORK/meta-renesas git checkout -b tmp 00f70f062aace04c051fa92d3cd7b887718fc313 </li>  For Yocto v3.15.0 (Note: https://elinux.org/R-Car/Boards/Yocto-Gen3#Known_issues_and_limitations (No.4)) cd $WORK/poky git checkout -b tmp 7e7ee662f5dea4d090293045f7498093322802cc cd $WORK/meta-openembedded git checkout -b tmp 352531015014d1957d6444d114f4451e241c4d23 cd $WORK/meta-linaro git checkout -b tmp 75dfb67bbb14a70cd47afda9726e2e1c76731885 cd $WORK/meta-renesas git checkout -b tmp 8af0b7d6e445b532088a068dc012757001be3a1f </li>  For Yocto v3.19.0 cd $WORK/poky git checkout -b tmp 7e7ee662f5dea4d090293045f7498093322802cc cd $WORK/meta-openembedded git checkout -b tmp 352531015014d1957d6444d114f4451e241c4d23 cd $WORK/meta-linaro git checkout -b tmp 75dfb67bbb14a70cd47afda9726e2e1c76731885 cd $WORK/meta-renesas git checkout -b tmp 20fcc94a8d05eda80250f27e87aaa3cfc3275300 </li>  For Yocto v3.21.0 (2019/12/26 updated) cd $WORK/poky git checkout -b tmp 7e7ee662f5dea4d090293045f7498093322802cc cd $WORK/meta-openembedded git checkout -b tmp 352531015014d1957d6444d114f4451e241c4d23 cd $WORK/meta-linaro git checkout -b tmp 75dfb67bbb14a70cd47afda9726e2e1c76731885 cd $WORK/meta-renesas git checkout -b tmp ad3a8cfee5b6a6fab17cf1c6e5af851eaec75bd7

[Linux BSP] Edit two Yocto recipe files as follows. 1. meta-renesas/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_4.14.bb (Line 12,13,14,15) 2. meta-renesas/meta-rcar-gen3/recipes-kernel/linux-libc-headers/linux-libc-headers_4.14.bb (Line 5,6,7,8) <Before> RENESAS_BSP_URL = " ¥ git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas-bsp.git" BRANCH = "v4.14.75-ltsi/rcar-3.9.6" SRCREV = "1d76a004d3a19367669b861559c1fbbf546b3065" <After> RENESAS_BSP_URL = " ¥ git://github.com/renesas-rcar/linux-bsp.git" BRANCH = "v4.14.75-ltsi/rcar-3.9.7" SRCREV = "59ccbcefaebb4a33110e11fb87f3811cd59f192d"

[LINUX BSP IPL] Edit one Yocto recipe file as follows. meta-renesas/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bb (Line 14,15,16) <Before> BRANCH = "rcar_gen3" SRC_URI = "git://github.com/renesas-rcar/arm-trusted-firmware.git;branch=${BRANCH}" SRCREV = "236f8fbb57af7f899980bbd5a03feb12d6462970" <After> BRANCH = "rcar_gen3" SRC_URI = "git://github.com/renesas-rcar/arm-trusted-firmware.git;branch=${BRANCH}" SRCREV = "c8b88aa5dc11be44dee1f67a894bb0076fb5f1db" </li> </ol> Another versions are not tested for compatibility. Legacy BSP instruction can be found here R-Car Yocto Gen3 legacy </li>

 Apply Linaro-GCC patch file:   For Yocto v2.23.1 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 </li> </ol> </li>  Download proprietary driver modules to $WORK/proprietary folder. You should see the following files:   For Yocto v2.23.1 $ 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 </li>  For Yocto v3.9.0 $ ls -1 $WORK/proprietary/*.zip R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20180627.zip R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20180627.zip </li>  For Yocto v3.13.0 $ ls -1 $WORK/proprietary/*.zip R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20181029.zip R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20181029.zip </li>  For Yocto v3.15.0 $ ls -1 $WORK/proprietary/*.zip R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20181225.zip R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20181225.zip </li> For Yocto v3.19.0 $ ls -1 $WORK/proprietary/*.zip R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20190507.zip R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20190507.zip </li> For Yocto v3.21.0 $ ls -1 $WORK/proprietary/*.zip R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20190722.zip R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20190722.zip </li>

</ol> </li>  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 </li>

<li> Setup build environment cd $WORK source poky/oe-init-build-env </li>

<li> Prepare default configuration files. <ol> <li> For Yocto v2.23.1 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 </li> <li> For Yocto v3.9.0 or later cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/<h3ulcb|m3ulcb>/poky-gcc/mmp/*.conf ./conf/ cd $WORK/build cp conf/local-wayland.conf conf/local.conf </li> </ol>

<li> (Edit $WORK/build/conf/local.conf to enable/disable graphics and multimedia proprietary drivers support) </li>

<li> Edit local.conf with evaluation packages requirements: <ol> <li> For Yocto v2.23.1 or later (to enable EVA_ prefix during packages install) DISTRO_FEATURES_append = " use_eva_pkg" </li> </ol> </li>

<li> Start the build

bitbake core-image-weston </li>

<li> 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. </li>

<li> 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. </li> <li> You can now proceed with running Yocto images </li> </ol>

OpenCL support
The following page describes how to enable OpenCL and Caffe support: R-Car/Boards/Yocto-Gen3/OpenCL

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: <ol> <li> Setup a TFTP server.

Ubuntu
Install tftpd-hpa package along with tftp tools: sudo apt-get install tftp tftpd-hpa

Fedora
<ol> <li> Install necessary packages: sudo yum install tftp-server tftp tftp-server is a part of xinetd. See Fedora manual for more information. </li> <li> Enable TFTP server: sudo vi /etc/xinetd.d/tftp Set disable = no Save file and exit. </li> <li> Start xinetd: sudo systemctl start xinetd.service sudo systemctl enable xinetd.service </li> </ol>

</li>

<li> 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/

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 is my H3SK board WS2.0 or WS1.1? </li>

<li> Verify that TFTP server is working. tftp localhost -c get Image && ls Image </li>

<li> Setup NFS server.

Debian/Ubuntu
<ol> <li> Install necessary packages: sudo apt-get install nfs-kernel-server nfs-common </li> <li> Start NFS server: sudo /etc/init.d/nfs-kernel-server start </li> </ol>

Fedora
<ol> <li> Install necessary packages: sudo yum install nfs-utils </li> <li> 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 </li> </ol> </li>

<li> Export root FS to NFS. (Change IMAGE and MACHINE to fit your build). <ol> <li> 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 </li> <li> 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. </li> <li> Force NFS server to re-read /etc/exports sudo exportfs -a </li> </ol> </li> <li> Verify that NFS is working. [builduser@buildmachine ~]$ showmount -e localhost Export list for localhost: /nfs/h3ulcb * /nfs/m3ulcb * </li>

<li> Boot into U-Boot command prompt

<ol> <li> Connect to serial console over microUSB using minicom or picocom. </li> <li> Switch the board on or reset it. Press any key to stop U-Boot automatic countdown. </li> </ol> Refer to H3SK board page, M3SK board page for more information. </li>

<li> 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. </li>

<li> 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 </li>

<li> Reset the board by pushing reset button Refer to H3SK board page, M3SK board page for more information. </li>

<li> 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) Booting using the fdt blob at 0x48000000 Using Device Tree in place at 0000000048000000, end 00000000480133a5
 * 1) Flattened Device Tree blob at 48000000

Starting kernel ...                                                                                                                        </li> </ol>

How to prepare and boot from 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:
 * 1) setenv bootargs 'rw root=/dev/mmcblk1p1 rootwait'
 * 2) ext2load mmc 0:1 0x48080000 /boot/Image
 * 3) ext2load mmc 0:1 0x48000000 /boot/Image-r8a7795-h3ulcb.dtb
 * 4) 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) 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

Build scripts examples
<ol>

<li> Build preparation

YOCTO_VERSION and META_VERSION must be changed depending your Yocto version.
 * 1) !/bin/sh

mkdir build cd build WORK=`pwd` echo $WORK
 * 1) Create a directory and switch to it

YOCTO_VERSION=yocto-2.1.3 META_VERSION=krogoth
 * 1) For Yocto v2.23.1


 * 1) For Yocto v3.9.0
 * 2) YOCTO_VERSION=yocto-2.4.2
 * 3) META_VERSION=rocko


 * 1) For Yocto v3.13.0, v3.15.0, v3.19.0, v3.21.0
 * 2) YOCTO_VERSION=yocto-2.4.3
 * 3) META_VERSION=rocko

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 &
 * 1) Clone basic Yocto layers in parallel

wait
 * 1) Wait for all clone operations

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
 * 1) Apply Linaro-GCC patch file (The patch only adds README.linaro)


 * 1) Make sure proprietary driver modules are downloaded to $WORK/proprietary folder
 * 2) If the modules are not downloaded, copy_evaproprietary_softwares.sh warns it
 * 3) See https://www.renesas.com/en-us/solutions/automotive/rcar-demoboard.html (need to login!)
 * 4) $ ls -1 $WORK/proprietary/*.zip
 * 5) R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20170828.zip
 * 6) R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20170828.zip

cd $WORK/meta-renesas sh meta-rcar-gen3/docs/sample/copyscript/copy_evaproprietary_softwares.sh -f $WORK/proprietary </li>
 * 1) Populate meta-renesas with proprietary software packages

<li> Building yocto for H3ULCB board <ol> <li> For Yocto v2.23.1
 * 1) !/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/mmp/*.conf ./conf/.
 * 1) cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/h3ulcb/linaro-gcc/bsp/*.conf ./conf/.
 * 2) cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/h3ulcb/linaro-gcc/gfx-only/*.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 </li> </ol> <ol> <li> For Yocto v3.9.0 or later
 * 1) !/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/poky-gcc/mmp/*.conf ./conf/.
 * 1) cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/h3ulcb/poky-gcc/bsp/*.conf ./conf/.
 * 2) cp $WORK/meta-renesas/meta-rcar-gen3/docs/sample/conf/h3ulcb/poky-gcc/gfx-only/*.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 </li> </ol> </li>

</ol>

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

How do I increase USB bandwidth
<ol>

<li> Download: M3SK H3SK WS1.1 (RTP0RC7795SKBX0010SA00) H3SK WS2.0 (RTP0RC77951SKBX010SA00) </li>

<li> 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 </li> </ol>

How do access to USB memory from U-boot(Yocto v3.13.0 or later)
<ol> <li>Some USB memory may not be recognized. => usb start starting USB... USB0:  USB EHCI 1.10 scanning bus 0 for devices... EHCI timed out on TD - token=0x80008d80

USB device not accepting new address (error=80000000) 1 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found => </li> <li>[How to fix] Set the "usb_pgood_delay 2000" variable => setenv usb_pgood_delay 2000 => saveenv => reset => usb start </li> </ol>

Known issues and limitations
<ol> <li> [SW limitation] Yocto v3.4 or later doesn't support RTP0RC7795SKBX0010SA00(H3 v1.1 Starter Kit). Please use the H3 v2.0 SK <li> [Known issue] If you encounter a kernel hang-up while using Yocto v3.4.0 or later, please refer to the following pages. H3 SK: No.1 of https://elinux.org/R-Car/Boards/H3SK#Known_Issues M3 SK: No.2 of https://elinux.org/R-Car/Boards/M3SK#Known_Issues </li> <li> [SW limitations] Yocto v3.13.0 <ol> <li>[U-boot]Reading environment variables from eMMC may fail. Loading Environment from MMC... *** Warning - No block device, using default environment </li> <li>[U-boot]SD SDR50/104 card may not be recognized. Ex) => ext4ls mmc 0 timeout during DMA timeout during DMA timeout during DMA timeout during DMA timeout during DMA error during DMA => </li>
 * Unrecognized filesystem type **

<li>[Kernel] When using GStreamer, once playing audio at specific sampling rate, the audio with a different sampling rate cannot be played back. And some movie files cannot be played back. Ex) root@m3ulcb:~# gst-launch-1.0 filesrc location=sample.wav ! wavparse ! audioconvert ! alsasink Setting pipeline to PAUSED ... Pipeline is PREROLLING ... [ 273.920848] rcar_sound ec500000.sound: SSI parent/child should use same rate [  273.927930] rcar_sound ec500000.sound: ssi[0] : prepare error -22 [  273.934055] rcar_sound ec500000.sound: ASoC: cpu DAI prepare error: -22 ERROR: from element /GstPipeline:pipeline0/GstAlsaSink:alsasink0: Could not get/set sett ings from/on resource. Additional debug info: ../../../gst-plugins-base-1.12.2/ext/alsa/gstalsasink.c(617): set_hwparams : /GstPipel ine:pipeline0/GstAlsaSink:alsasink0: Unable to set hw params for playback: Invalid argument ERROR: pipeline doesn't want to preroll. Setting pipeline to NULL ... Freeing pipeline ... root@m3ulcb:~# </li> </ol> </li> <li> [SW limitations] Yocto v3.15.0 <ol> <li>[U-boot]Reading environment variables from eMMC on M3 Starter Kit may fail. communication out of sync </li> <li> [U-boot]Reading environment variables from eMMC on H3 v2 Starter Kit may fail. Loading Environment from MMC... timeout during DMA *** Warning - !read failed, using default environment Workaround patch: https://github.com/u-boot/u-boot/commit/f58d6771a2afad71594c1264aadde461210a4675 U-boot binary </li> </ol> </li> </ol>