This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
agl-distro:agl-raspberrypi [2017/06/12 12:28] leonanavi [Download Latest Stable Release] Update version to Chinook 3.0.3 |
agl-distro:agl-raspberrypi [2022/10/07 19:37] vinodahuja |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== AGL for Raspberry Pi ====== | ====== AGL for Raspberry Pi ====== | ||
- | AGL has been initially ported to Raspberry Pi 2 and 3 by Leon Anavi thanks to the existing knowledge for enabling hardware graphics acceleration in Wayland and Weston from the Tizen Project and GENIVI Development Platform. | + | Please refer to AGL docs for setting up [[https://docs.automotivelinux.org/en/needlefish/#0_Getting_Started/2_Building_AGL_Image/5_2_Raspberry_Pi_4/ | AGL on Raspberry Pi]] |
- | Follow the [[agl-distro:source-code|general steps for building AGL]], download master branch and set **raspberrypi2** or **raspberrypi3** as a machine depending on the version and the model of your Raspberry Pi. | ||
- | |||
- | ====== Introduction: Building target AGL image with Yocto project ====== | ||
- | |||
- | The standard Yocto process is made of the following steps: | ||
- | |||
- | * Setting up your operating system. | ||
- | * Setting up the build environment for R-Car BSP. | ||
- | * Downloading the proprietary drivers and installing them in the build environment (if needed). | ||
- | * Build the image. | ||
- | * Boot using SD-CARD. | ||
- | * Create an SD-CARD. | ||
- | * Configure to boot on SD-CARD. | ||
- | * Copy the image to the SD-CARD. | ||
- | * Boot the board on it. | ||
- | |||
- | For convenience, the resulting development images are made available [[https://download.automotivelinux.org/AGL/snapshots/master/latest/|Here]] | ||
- | |||
- | If you want to bypass the build phase and quick boot the board, you can download the image tarball and the kernel then follow the installation procedure. | ||
- | |||
- | ===== Setting up your operating system ===== | ||
- | |||
- | The very first step is to ensure that your system can run the build system of the Yocto Project. | ||
- | |||
- | **Important**: it only runs on Linux | ||
- | |||
- | * if your system is Windows© or iOS© you should use a virtualization solution (Virtualbox, VMWare ...) to run a Linux VM on your system. | ||
- | |||
- | For AGL 2.1, Yocto Project 2.1, known as krogoth, has been selected for the BSP and build system. | ||
- | |||
- | Reference data for configuring your system can be found in the Yocto documentation [[http://www.yoctoproject.org/docs/2.0/ref-manual/ref-manual.html#detailed-supported-distros|Here]] | ||
- | |||
- | Here after an extract of this documentation for most common Linux distributions: | ||
- | |||
- | * The build system should be able to run on any modern distributions that has the following versions for: | ||
- | * Python | ||
- | * Git 1.7.8 or greater | ||
- | * tar 1.24 or greater | ||
- | * GCC, … | ||
- | |||
- | === Note: === | ||
- | |||
- | * Python 2.7.3 or greater excluding Python 3.x, which is not supported. | ||
- | |||
- | ==== Ubuntu and Debian ==== | ||
- | |||
- | The essential and graphical support packages you need for a supported Ubuntu or Debian distribution are shown in the following command: | ||
- | |||
- | <code> | ||
- | sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \ | ||
- | build-essential chrpath socat libsdl1.2-dev xterm cpio curl | ||
- | </code> | ||
- | === Note: === | ||
- | |||
- | * Also note that for this tutorial, the utility 'curl' has been added to the list of packages to install. | ||
- | |||
- | ==== Fedora ==== | ||
- | |||
- | The essential and graphical packages you need for a supported Fedora distribution are shown in the following command: | ||
- | |||
- | <code> | ||
- | 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 curl | ||
- | </code> | ||
- | ==== OpenSUSE ==== | ||
- | |||
- | The essential and graphical packages you need for a supported OpenSUSE distribution are shown in the following command: | ||
- | |||
- | <code> | ||
- | sudo zypper install python gcc gcc-c++ git chrpath make wget python-xml \ | ||
- | diffstat texinfo python-curses patch socat libSDL-devel xterm curl | ||
- | </code> | ||
- | ==== CentOS ==== | ||
- | |||
- | The essential and graphical packages you need for a supported CentOS distribution are shown in the following command: | ||
- | |||
- | <code> | ||
- | sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch \ | ||
- | diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath \ | ||
- | socat SDL-devel xterm curl | ||
- | </code> | ||
- | ====== Download AGL Source Code ====== | ||
- | |||
- | The AGL source code and Yocto layers are maintained on the AGL Gerrit server.\\ | ||
- | For information on how to create accounts for gerrit see [[start/getting-started|Getting Started with AGL]]. | ||
- | |||
- | ===== Setting up the build environment ===== | ||
- | |||
- | In the following, your top level directory is noted as “AGL_TOP”.\\ | ||
- | For example, we will set AGL_TOP to point to a directory “$HOME/workspace_agl”: | ||
- | |||
- | <code> | ||
- | export AGL_TOP=$HOME/workspace_agl | ||
- | mkdir -p $AGL_TOP | ||
- | </code> | ||
- | ===== Prepare Repo Tool ===== | ||
- | |||
- | AGL Uses the 'repo' tool for managing repositories.\\ | ||
- | You need to setup layers of AGL.\\ | ||
- | You can use the commands below to prepare Repo: | ||
- | |||
- | <code> | ||
- | mkdir -p ~/bin | ||
- | export PATH=~/bin:$PATH | ||
- | curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo | ||
- | chmod a+x ~/bin/repo | ||
- | </code> | ||
- | === Note: === | ||
- | |||
- | * More information about the tool 'repo' [[https://source.android.com/source/using-repo.html|Here]] | ||
- | |||
- | ===== Download source ===== | ||
- | |||
- | You can choose your source release | ||
- | |||
- | ==== Download Latest Stable Release ==== | ||
- | |||
- | To download all layers for the for the latest stable release, Chinook 3.0.3: | ||
- | |||
- | <code> | ||
- | cd $AGL_TOP | ||
- | repo init -b chinook -m chinook_3.0.3.xml -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo | ||
- | repo sync | ||
- | </code> | ||
- | ==== Download Latest on Chinook Branch ==== | ||
- | |||
- | To download all layers on the current release branch which may be in the midst of testing or changes prior to the next stable release: | ||
- | |||
- | <code> | ||
- | cd $AGL_TOP | ||
- | repo init -b chinook -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo | ||
- | repo sync | ||
- | </code> | ||
- | ==== Download Master Branch ==== | ||
- | |||
- | To download all code from master: | ||
- | |||
- | <code> | ||
- | cd $AGL_TOP | ||
- | repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo | ||
- | repo sync | ||
- | </code> | ||
- | ===== Set up Build Environment Info ===== | ||
- | |||
- | AGL has created a set up script for defining the target build and desired optional features.\\ | ||
- | To get a complete list of the options available run. | ||
- | |||
- | <code> | ||
- | cd $AGL_TOP | ||
- | source meta-agl/scripts/aglsetup.sh -h | ||
- | </code> | ||
- | Once you run aglsetup.sh with your desired parameters, you can build any target desired. | ||
- | |||
- | ===== Features supported by aglsetup ===== | ||
- | |||
- | Here is the list of features for AGL 2.1 that can be specified in the aglsetup.sh command line: | ||
- | |||
- | * in **meta-agl** | ||
- | * **agl-archiver**: | ||
- | * **agl-devel**: activate development options (empty root password, debugger, strace, valgrind …) | ||
- | * **agl-isafw**: | ||
- | * **agl-netboot**: enable network boot support through TFTP and NBD (see meta-netboot layer) | ||
- | * in **meta-agl-devel** | ||
- | * **agl-oem-extra-libs**: | ||
- | * **agl-renesas-kernel**: | ||
- | * in **meta-agl-extra** | ||
- | * **agl-appfw-smack**: enables IoT.bzh Application Framework + SMACK + Cynara | ||
- | * **agl-demo**: enable layer meta-agl-demo and meta-qt5 - required to build * agl-demo-platform | ||
- | * **agl-localdev**: add a local layer named “meta-localdev” in meta directory and a local.dev.inc conf file if present | ||
- | * **agl-sota**: enable SOTA components and dependencies (meta-sota, meta-filesystems, meta-ruby, meta-rust are added) | ||
- | |||
- | For newer features or to get more details on a given feature, take a look at the configuration files stored for each feature and/or each machine in meta-agl/templates and meta-agl-extra/templates. | ||
- | |||
- | ====== Building the AGL Demo Platform for Raspberry Pi ====== | ||
- | |||
- | ===== Raspberry Pi 3 ===== | ||
- | |||
- | To build AGL demo platform for Raspberry Pi 3 use machine **raspberrypi3** and feature **agl-demo**: | ||
- | |||
- | <code> | ||
- | source meta-agl/scripts/aglsetup.sh -m raspberrypi3 agl-demo agl-netboot agl-appfw-smack | ||
- | bitbake agl-demo-platform | ||
- | </code> | ||
- | ===== Raspberry Pi 2 ===== | ||
- | |||
- | To build AGL demo platform for Raspberry Pi 2 use machine **raspberrypi2** and feature **agl-demo**: | ||
- | |||
- | <code> | ||
- | source meta-agl/scripts/aglsetup.sh -m raspberrypi2 agl-demo agl-netboot agl-appfw-smack | ||
- | bitbake agl-demo-platform | ||
- | </code> | ||
- | ====== Booting AGL Demo Platform on Raspberry Pi ====== | ||
- | |||
- | Follow the steps below to copy the image to microSD card and to boot it on Raspberry Pi 2 or 3: | ||
- | |||
- | * Connect your sdcard in your linux machine. | ||
- | * Copy output image from build machine to linux machine that is connected your sdcard. (Often, those are same machines) | ||
- | * Output Image location in build machine for Raspberry Pi 2: //tmp/deploy/images/raspberrypi2/agl-demo-platform-raspberrypi2.rpi-sdimg// | ||
- | * Output Image location in build machine for Raspberry Pi 3: //tmp/deploy/images/raspberrypi3/agl-demo-platform-raspberrypi3.rpi-sdimg// | ||
- | * Unmount the microSD card and after that flash output image to it card with root user: | ||
- | |||
- | //Note: the sdimage files can also be named rpi-sdimg-ota in case you have the **"agl-sota"** feature enabled// | ||
- | |||
- | <code> | ||
- | sudo umount [sdcard device] | ||
- | sudo dd if=[output image] of=[sdcard device] bs=4M | ||
- | sync | ||
- | </code> | ||
- | * Plug your microSD card into Raspberry Pi 2 or 3 and boot the board | ||
- | |||
- | ====== Troubleshooting ====== | ||
- | |||
- | ===== Extended attributes MUST be copied ===== | ||
- | |||
- | **IMPORTANT, The extended attribute set during image construction MUST be copied to the SD card.** | ||
- | |||
- | When using tar to create the SDcard, it is a common error to not copy the extended attributes. Find below instruction for using tar. | ||
- | |||
- | Verify that **tar** version is 1.28 or newer: | ||
- | |||
- | <code> | ||
- | tar --version | ||
- | tar (GNU tar) 1.28 | ||
- | [snip] | ||
- | </code> | ||
- | If it is not the case, a native up-to-date version of tar is also generated while building AGL distribution: | ||
- | |||
- | <code> | ||
- | tmp/sysroots/x86_64-linux/usr/bin/tar-native/tar --version | ||
- | tar (GNU tar) 1.28 | ||
- | [snip] | ||
- | </code> | ||
- | To copy Automotive Grade Linux (AGL) files AND EXTENDED ATRIBUTES onto the SDcard using tar the command is: | ||
- | |||
- | <code> | ||
- | tar --extract --numeric-owner --preserve-permissions --preserve-order --totals \ | ||
- | --xattrs-include='*' --directory=DESTINATION_DIRECTORY --file=agl-demo-platform.....tar.bz2 | ||
- | </code> | ||
- | ===== meta-rust ===== | ||
- | |||
- | Due to a known bug in the upstream of meta-rust the Yocto/OE recipe for rust-cross may fail while building RVI SOTA Client or another application written in the Rust programming language.\\ | ||
- | Until the complete resolution of the issue the workaround is to disable all use of the CXX11 ABI by applying the following lines to **conf/local.conf**: | ||
- | |||
- | <code> | ||
- | LD_CXXFLAGS_append = " -D_GLIBCXX_USE_CXX11_ABI=0" | ||
- | TARGET_CXXFLAGS_append = " -D_GLIBCXX_USE_CXX11_ABI=0" | ||
- | CXXFLAGS_append = " -D_GLIBCXX_USE_CXX11_ABI=0" | ||
- | | ||
- | BUILD_CXXFLAGS_remove_pn-gcc-runtime = "-D_GLIBCXX_USE_CXX11_ABI=0" | ||
- | TARGET_CXXFLAGS_remove_pn-gcc-runtime = "-D_GLIBCXX_USE_CXX11_ABI=0" CXXFLAGS_remove_pn-gcc-runtime = "-D_GLIBCXX_USE_CXX11_ABI=0" | ||
- | </code> | ||
- | ===== Disabling Homescreen in AGL 3.0.x CC release ===== | ||
- | |||
- | **Problem**: new installed applications are not available on Homescreen and even if started manually through afm-util, the application starts but no surface appears. | ||
- | |||
- | **Answer**: this is due to IVI-Shell integration with Qt and Homescreen. | ||
- | |||
- | To disable IVI-Shell and revert to the "plain old" weston desktop, you can follow the 4 steps below: | ||
- | |||
- | * Modify ///etc/xdg/weston/weston.ini// and comment the line mentioning IVI-shell. For example on Porter board: | ||
- | |||
- | <code> | ||
- | [core] | ||
- | backend=drm-backend.so | ||
- | #shell=ivi-shell.so | ||
- | ... | ||
- | </code> | ||
- | * modify ///usr/lib/systemd/user/afm-user-daemon.service// and comment the line specifying QT Wayland backend: | ||
- | |||
- | <code> | ||
- | ... | ||
- | #Environment=QT_WAYLAND_SHELL_INTEGRATION=ivi-shell | ||
- | ... | ||
- | </code> | ||
- | * disable Homescreen services: | ||
- | |||
- | <code> | ||
- | # systemctl disable HomeScreenAppFrameworkBinderAGL.service | ||
- | # systemctl disable HomeScreen.service | ||
- | # systemctl disable InputEventManager.service | ||
- | # systemctl disable WindowManager.service | ||
- | </code> | ||
- | * Reboot your target and you should then be able to start apps on the standard weston screen using afm-util | ||
- | |||
- | ====== Commercial Licensed Packages ====== | ||
- | |||
- | Append to following lines to **conf/local.conf** to include libomxil under a commercial license to your build: | ||
- | |||
- | <code> | ||
- | # For libomxil | ||
- | LICENSE_FLAGS_WHITELIST = "commercial" | ||
- | |||
- | IMAGE_INSTALL_append = " libomxil" | ||
- | </code> | ||
- | ====== Raspberry Pi Touchscreen with Rotation ====== | ||
- | |||
- | If you have Raspberry Pi official 7" touchscreen connected, you can rotate it with these lines in /etc/xdg/weston/weston.ini | ||
- | |||
- | <code> | ||
- | root@raspberrypi3:/etc/xdg/weston# cat weston.ini | ||
- | [core] | ||
- | backend=drm-backend.so | ||
- | shell=desktop-shell.so | ||
- | |||
- | [shell] | ||
- | locking=true | ||
- | # Uncomment below to hide panel | ||
- | #panel-location=none | ||
- | |||
- | [launcher] | ||
- | icon=/usr/share/weston/terminal.png | ||
- | path=/usr/bin/weston-terminal | ||
- | |||
- | [launcher] | ||
- | icon=/usr/share/weston/icon_flower.png | ||
- | path=/usr/bin/weston-flower | ||
- | |||
- | [output] | ||
- | name=DSI-1 | ||
- | transform=270 | ||
- | </code> | ||
- | ====== Debugging ====== | ||
- | |||
- | It is possible to debug AGL images on Raspberry Pi using 3.3V USB to serial cable, such as [[https://www.olimex.com/Products/Components/Cables/USB-Serial-Cable/USB-Serial-Cable-F/|Olimex USB-Serial-Cable-F]], connected to the UART of the board. Follow the instructions below to connect a cable to the board (do it on your own risk, no warranty is provided): | ||
- | |||
- | * Connect the BLUE wire if you are using Olimex USB-Serial-Cable-F to pin 6 of Raspberry Pi, | ||
- | * Connect the RX line of the cable (GREEN wire if you are using Olimex USB-Serial-Cable-F) to pin 8 (TX line) of Raspberry Pi, | ||
- | * Connect the TX line of the cable (RED wire if you are using Olimex USB-Serial-Cable-F) to pin 10 (RX line) of Raspberry Pi. | ||
- | |||
- | {{:agl-distro/RaspberryPi2-ModelB-debug-serial-cable.jpg| Olimex USB-Serial-Cable-F attached to Raspberry PI 2 for debugging through the serial console}} | ||
- | |||
- | * Plug the USB connector of the cable to your computer and use your favorite tool for serial communication, for example on Ubuntu and other Linux distributions you may use screen: | ||
- | |||
- | <code> | ||
- | sudo screen /dev/ttyUSB0 115200 | ||
- | </code> | ||
- | Pay attention that the colors of the cable may vary depending on the vendor. If you have USB console cable from Adafruit please have a look [[https://learn.adafruit.com/adafruits-raspberry-pi-lesson-5-using-a-console-cable/connect-the-lead|here]]. | ||