/**************************************************************************** ** ** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use the contact form at ** http://qt.digia.com/ ** ** This file is part of Qt Enterprise Embedded. ** ** Licensees holding valid Qt Enterprise licenses may use this file in ** accordance with the Qt Enterprise License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. ** ** If you have questions regarding the use of this file, please use ** the contact form at http://qt.digia.com/ ** ****************************************************************************/ /*! \contentspage{index.html}{Qt Enterprise Embedded} \page index.html \nextpage qtee-overview.html \title Qt Enterprise Embedded \SDK provides a fully-integrated solution to get you started immediately with software development on your embedded device with a tailored user experience for embedded Linux and embedded Android. \SDK contains the tools you need for fast, easy, and fully-integrated embedded device application development. It comes with \B2Q, a light-weight UI stack for embedded systems, and the Qt Creator integrated development environment (IDE) with preconfigured build targets for hardware platforms, as well as an emulator for testing the applications. \e{\b{IMPORTANT:} Make sure to follow the \l{Installation Guide} closely!} \section1 Contents \list \li \l{About Qt Enterprise Embedded} \li \l{Installation Guide} \li \l{Supported Platforms} \li \l{Preparing Hardware} \list \li \l{Preparing Nexus 7}{Nexus 7 (2012) (embedded Android)} \li \l{Preparing Sabre Lite i.MX 6}{Sabre Lite i.MX 6 (embedded Android and Linux)} \li \l{Preparing BeagleBone Black}{BeagleBone Black (embedded Android and Linux)} \li \l{Preparing BeagleBoard-xM}{BeagleBoard-xM (embedded Linux)} \li \l{Preparing Raspberry Pi}{Raspberry Pi Model B (embedded Linux)} \endlist \li \l{Building and Running Embedded Applications} \list \li \l{Special Build & Run Options} \endlist \li \l{Customization} \li \l{Building Your Own Embedded Linux Image} \li \l{ChangeLog} \li \l{Troubleshooting} \li \l{License Information} \endlist \section1 Reference Documentation \list \li \l{Add-On QML Types} \endlist */ /*! \contentspage{index.html}{Qt Enterprise Embedded} \page qtee-overview.html \previouspage index.html \nextpage qtee-installation-guide.html \title About Qt Enterprise Embedded \SDK has two main parts: \list \li Development environment that is installed on a Linux development desktop by using an online installer \li \B2Q \endlist \section1 About the Development Environment The development is done with the Qt Enterprise libraries and device deployment can be done with one click directly from Qt Creator to a device connected via USB. Alternatively, you can deploy the application locally directly to the \B2Q Emulator that is running the full target software stack as in the device. As with any Qt based application, the same application can be deployed to desktop and mobile OS targets as well. \section1 About \B2Q \e{\b{\B2Q}} is a light-weight, Qt-optimized, full software stack for embedded systems that is installed into the actual target device. This is done by flashing the device's memory card or internal memory directly with a pre-built image that comes with the development environment. \B2Q supports two different operating systems: \list \li \b{\B2QA} where the software stack is based on the Android Kernel (version 4.1 or higher) and selected middleware. It includes a lean software stack where Qt/QML replaces the top Java graphical layer and removes the Zygote process layer as well the Android home screen enabling better and faster development where modern UIs are at the forefront. \li \b{\B2QL} where the software stack is using the traditional embedded Linux kernel built with the Yocto Poky reference system (Yocto 1.5 \e Dora release). The Embedded Linux variant is designed for great customization possibilities. It contains only components required in the embedded device, resulting in smaller image sizes while keeping valuable development tools available. \endlist Both versions have been tested and verified on a number of different hardware configurations. \B2Q support is not limited to the devices used as reference platforms, it can be made to run on a variety of hardware. \section1 About Qt \l{http://qt.digia.com/}{Qt} is a full development framework with tools designed to streamline the creation of applications and user interfaces for desktop, embedded, and mobile platforms. \list \li \b{Qt Framework} - intuitive APIs for C++ and CSS/JavaScript-like programming with \b{Qt Quick} for rapid UI creation \li \b{Qt Creator IDE} - powerful cross-platform integrated development environment, including UI designer tools and on-device debugging \li \b{Tools and toolchains} - internationalization support, embedded toolchains and more. \endlist With Qt, you can reuse code efficiently to target multiple platforms with one code base. The modular C++ class library and development tools enable developers to create applications for one platform and easily build and run to deploy also on other platforms. \section1 \B2Q vs Qt for Android \image b2qt-vs-qt-for-android.png \e{\b{Qt for Android}} is a port of the Qt Framework to be used for application development on the Android platform. Its purpose is to enable development of applications that can run on Android devices. For developers writing applications for the Android ecosystem, Qt for Android is the right choice. \b{\B2QA} tries to strip down the Android stack to the bare minimum, relying only on basic Linux features. The majority of the Android stack, such as \e{Dalvik virtual machine} is not running in \B2Q, resulting in faster startup times, lower memory consumption and overall better performance. */ /*! \page qtee-installation-guide.html \title Installation Guide \previouspage qtee-overview.html \nextpage qtee-supported-platforms.html To successfully set up \SDK, you must closely follow the instructions in this section and perform all the described tasks. In case of problems, see the \l{Troubleshooting} information and the \l {Known Issues} in \SDK \l {product page}. \target Requirements for Development Host \section1 Requirements for Development Host A 64-bit Linux system is required to install and use \SDK. Instructions in this documentation assume Ubuntu Linux 64-bit 12.04 LTS or later. Other Linux distributions may work, but have not been tested. C/C++ build essentials must be installed. \target Installing 32-bit Support Libraries \section1 1. Installing 32-bit Support Libraries Some of the build tools in \SDK are 32-bit programs, and on 64-bit systems they require support libraries for running 32-bit code. To install the required packages in recent versions of Ubuntu, use the following command in a terminal: \badcode sudo apt-get install g++-multilib zlib1g:i386 \endcode For older Ubuntu versions such as 12.04, instead do: \badcode sudo apt-get install g++-multilib ia32-libs \endcode \target Installing VirtualBox \section1 2. Installing VirtualBox The \B2Q emulator in \SDK relies on VirtualBox virtualization software. You can download it from \l{https://www.virtualbox.org/wiki/Linux_Downloads} or install it via distribution tools. If you have older Ubuntu versions such as 12.04 you have to install a newer version of VirtualBox than your distribution does provide. You have to add a foreign package source: \badcode wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add - echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list sudo apt-get update \endcode Now install VirtualBox on your computer \badcode sudo apt-get install virtualbox-4.3 \endcode To configure VirtualBox: \list 1 \li Start the VirtualBox user interface. \li Select \b{File > Preferences} > \b{Network} to open VirtualBox network settings. \li Create a new network named \e{vboxnet0} and edit its properties: \list 1 \li Change the IPv4 address to \c{192.168.56.1} and the IPv4 network mask to \c{255.255.255.0}. \li In the \b{DCHP Server} tab, select the \b{Enable Server} check box. \li Change the server address to \c{192.168.56.1}. \li Change both the lower and upper address bounds to \c{192.168.56.101}. \endlist \endlist If a firewall is enabled on the development host, it needs to allow TCP and UDP packets between your host and the virtual machine. \section1 3. Installing \SDK \list 1 \li Download the binary \SDK installer, and make sure it is executable by using one of the following methods: \list \li Enter the \c{chmod +x } command. \li Right-click the file, and select \b{Properties} > \b{Permissions} > \b{Allow executing file as program}. \endlist \li Run the installer and follow its instructions. \endlist \note Do not execute the installer as root user or with sudo. The installer will let you select a directory where \SDK will be installed. In this documentation, the installation directory is referred to as \b{\c{}}. The default installation directory is \tt{~/Qt}. \target Installing Boot to Qt on Target Devices \section1 4. Install \B2Q on Target Devices \e{If you target only the emulator, you can skip this step.} Before you can deploy and test your Qt application on hardware, you must flash the target device with an image that contains the \B2Q stack. The steps vary from device to device. Follow the instructions specific to your device in \l {Preparing Hardware}. \section1 5. Setting up USB Access to Embedded Devices \e{If you target only the emulator, you can skip this step.} \include b2qt-post-install-setup.qdocinc setting up usb access \section1 6. Configuring a Device Kit in Qt Creator \include b2qt-post-install-setup.qdocinc configuring device kit You are now ready to start developing for your device. For more information, see \l{Building and Running an Example}. */ /*! \page qtee-preparing-hardware.html \title Preparing Hardware \previouspage qtee-supported-platforms.html \nextpage qtee-building-and-running.html Before you can deploy and test your Qt application on hardware, you must flash the target device with an image that contains the \B2Q stack. These steps vary from device to device: \list \li \l{Nexus 7 (2012) (embedded Android)} \li \l{Sabre Lite i.MX 6 (embedded Android and Linux)} \li \l{BeagleBone Black (embedded Android and Linux)} \li \l{BeagleBoard-xM (embedded Linux)} \li \l{Raspberry Pi Model B (embedded Linux)} \endlist If you use only the emulator, you can skip this step and continue straight to \l {Building and Running an Example}. */ /*! \target Nexus 7 (2012) (embedded Android) \page qtee-preparing-hardware-nexus-7.html \title Preparing Nexus 7 \previouspage qtee-installation-guide.html \nextpage qtee-building-and-running.html Take the following steps to prepare a \l{http://www.google.com/nexus/7/specs/}{Nexus 7 (2012)} for \B2Q. \section1 Unlocking Nexus 7 Bootloader You must unlock the Nexus 7 Bootloader to be able to install custom software. You need to do this only once. \list 1 \li Power off the device. \li Connect the device to the development host with a USB cable. \li To start the Nexus up in \e{fastboot} mode, press the power button for a second, and then keep the \b {Volume Down} key pressed down, until you see a screen with a green robot with its front panel open. \note If the ordinary startup screen appears instead, power off the device and try again. \li On the development host, enter the following command: \badcode sudo /Tools/b2qt/fastboot oem unlock \endcode \li Press the power button to confirm that you want to unlock the bootloader when the prompt appears on the Nexus screen. \li Wait a few seconds, and check that the text line stating the \c{LOCK STATE} now says \c{UNLOCKED}. \endlist \section1 Updating a Nexus 7 with \B2Q Images \note It is important that you repeat the steps in this section after you update \SDK. To update an unlocked Nexus 7 device with a \B2Q image: \list 1 \li Make sure that the device is in \e{fastboot} mode and that it is connected to the development host via USB. \li Re-flash the \e{boot}, \e{system}, and \e{userdata} partitions on the device, by entering the following commands in the following order: \badcode cd sudo ./Tools/b2qt/fastboot flash boot Boot2Qt-2.x/nexus7-eAndroid/images/boot.img sudo ./Tools/b2qt/fastboot flash system Boot2Qt-2.x/nexus7-eAndroid/images/system.img sudo ./Tools/b2qt/fastboot flash userdata Boot2Qt-2.x/nexus7-eAndroid/images/data.img \endcode \li Once the flashing is completed successfully, reboot the device: \badcode sudo ./Tools/b2qt/fastboot reboot \endcode \endlist \note You must install proprietary drivers for the Nexus 7 to boot correctly. Until then, the screen will briefly show the "Google" logo and then go black, instead of showing the \B2Q welcome screen or demo. \section1 Installing Proprietary Drivers Download the proprietary drivers for your Nexus 7. The following script downloads the third party drivers from \l{https://developers.google.com/android/nexus/drivers#grouperjdq39} {https://developers.google.com/android/nexus/drivers#grouperjdq39} \badcode cd ./Boot2Qt-2.x/nexus7-eAndroid/images/download.sh \endcode \note Only the version "Android 4.2.2 (JDQ39 to JDQ39E)" works with the current \B2Q image. To install the drivers to Nexus 7: \list 1 \li Power on the device and connect it to the development host via USB. Also check that the device is \e{not} in fastboot mode. \li Run the driver extractors: \badcode cd Boot2Qt-2.x/nexus7-eAndroid/images/drivers ./extract-nvidia-grouper.sh ./extract-asus-grouper.sh ./extract-invensense-grouper.sh cd - \endcode \note Carefully read the license terms enclosed in each individual extractor. \li Find out the serial number of the connected Nexus 7 device: \badcode ./Tools/b2qt/adb devices \endcode \li Deploy the drivers to your device: \badcode ./Boot2Qt-2.x/nexus7-eAndroid/images/deploy.sh \endcode \endlist After the installation is complete, power on the device and check that the \B2Q welcome screen and/or demo appear. \section1 Setting up USB Access \include b2qt-post-install-setup.qdocinc setting up usb access \section1 Configuring a Device Kit in Qt Creator \include b2qt-post-install-setup.qdocinc configuring device kit You are now ready to start developing for your device. For more information, see \l{Building and Running an Example}. */ /*! \target BeagleBoard-xM (embedded Linux) \page qtee-preparing-hardware-beagleboard.html \title Preparing BeagleBoard-xM \previouspage qtee-installation-guide.html \nextpage qtee-building-and-running.html Take the following steps to prepare a \l{http://beagleboard.org/hardware-xM} {BeagleBoard-xM} for \B2Q. \note It is important that you repeat the steps in this section after you update \SDK. The image containing \B2Q stack for BeagleBoard-xM are included in \SDK, ready to be copied to an SD card. \section1 Preparing an SD Card An SD card of at least 512 MB capacity is needed. \include detect-sd-card-device-name.qdocinc instructions \section1 Installing the \B2Q Image To write the image to the SD card: \badcode cd sudo Boot2Qt-2.x/beagleboard-eLinux/images/deploy.sh /dev/ \endcode After the image has been deployed, power on the device and check that the \B2Q welcome screen and/or demo appear. \section1 Setting up USB Access \include b2qt-post-install-setup.qdocinc setting up usb access \section1 Configuring a Device Kit in Qt Creator \include b2qt-post-install-setup.qdocinc configuring device kit You are now ready to start developing for your device. For more information, see \l{Building and Running an Example}. */ /*! \target Sabre Lite i.MX 6 (embedded Android and Linux) \page qtee-preparing-hardware-imx6.html \title Preparing Sabre Lite i.MX 6 \previouspage qtee-installation-guide.html Take the following steps to prepare a \l{http://boundarydevices.com/products/sabre-lite-imx6-sbc/}{Sabre Lite i.MX 6} for \B2Q. \note It is important that you repeat the steps in this section after you update \SDK. The images containing the \B2Q stack for Sabre Lite i.MX 6 are included in \SDK, ready to be copied to an SD card. \section1 Preparing an SD Card For \B2QA, an SD card of at least 4 GB capacity is needed. For \B2QL, a card of at least 512 MB capacity is sufficient. \include detect-sd-card-device-name.qdocinc instructions \section1 Installing the Android image \e{If installing} \B2QL, \e{you can skip this step and proceed to} \l{Installing the Boot to Qt Image}. Download the package \e{imx6-jb-20130628.tar.gz} from \l{http://boundarydevices.com/android-jellybean-on-i-mx6-with-no-disclaimers/}{Boundary Devices Android Jellybean i.MX6 images} (registration required). Use the following commands to create an SD card containing the downloaded image: \list 1 \li Extract the downloaded package: \badcode ~/$ mkdir bd-android ~/$ cd bd-android ~/bd-android$ tar zxvf ~/Downloads/imx6-jb-20130628.tar.gz \endcode \li Run device/boundary/mksdcard.sh: \badcode ~/bd-android$ sudo device/boundary/mksdcard.sh /dev/ ~/bd-android$ sync \endcode \endlist \section1 Installing the \B2Q Image Make sure you have the required tools installed in your development machine: \badcode sudo apt-get install u-boot-tools \endcode Then, upgrade the SD card with \B2Q. Use one of the commands below, depending on whether you are developing for embedded Android or Linux: \list \li \b{\B2QA} \badcode cd ./Boot2Qt-2.x/iMX6-eAndroid/images/deploy.sh /dev/ \endcode \li \b{\B2QL} \badcode cd sudo ./Boot2Qt-2.x/iMX6-eLinux/images/deploy.sh /dev/ \endcode \endlist After the installation is complete, insert the SD card, power on the device and check that the \B2Q welcome screen and/or demo appear. \section1 Setting up USB Access \include b2qt-post-install-setup.qdocinc setting up usb access \section1 Configuring a Device Kit in Qt Creator \include b2qt-post-install-setup.qdocinc configuring device kit You are now ready to start developing for your device. For more information, see \l{Building and Running an Example}. */ /*! \target Raspberry Pi Model B (embedded Linux) \page qtee-preparing-hardware-rasberrypi.html \title Preparing Raspberry Pi \previouspage qtee-installation-guide.html \nextpage qtee-building-and-running.html Take the following steps to prepare a \l{http://www.raspberrypi.org/} {Raspberry Pi} for \B2Q. \note Ethernet networking is required to connect the device to Qt Creator. This means that the support is currently limited to Raspberry Pi Model B, which includes an Ethernet port. \note It is important that you repeat the steps in this section after you update \SDK. The image containing \B2Q stack for Raspberry Pi is included in the SDK, ready to be copied to an SD card. \section1 Preparing an SD Card An SD card of at least 512 MB capacity is sufficient. \include detect-sd-card-device-name.qdocinc instructions \section1 Installing the \B2Q Image To write the image to the SD card: \badcode cd sudo Boot2Qt-2.x/raspberrypi-eLinux/images/deploy.sh /dev/ \endcode After the image has been deployed, insert the SD card, power on the device and check that the \B2Q welcome screen and/or demo appear. \section1 Configuring a Device Kit in Qt Creator \include b2qt-post-install-setup.qdocinc configuring network device You are now ready to start developing for your device. For more information, see \l{Building and Running an Example}. */ /*! \target BeagleBone Black (embedded Android and Linux) \page qtee-preparing-hardware-beaglebone.html \title Preparing BeagleBone Black \previouspage qtee-installation-guide.html Take the following steps to prepare a \l{http://beagleboard.org/products/beaglebone%20black}{BeagleBone Black} for \B2Q. \note It is important that you repeat the steps in this section after you update \SDK. The images containing the \B2Q stack for BeagleBone Black are included in \SDK, ready to be copied to an SD card. \section1 Preparing an SD Card For \B2QA, an SD card of at least 2 GB capacity is needed. For \B2QL, a card of at least 512 MB capacity is sufficient. \include detect-sd-card-device-name.qdocinc instructions \section1 Installing the Android image \e{If installing} \B2QL, \e{you can skip this step and proceed to} \l{Installing the Boot to Qt Image}. Download the package \e{TI_Android_JB_4.2.2_DevKit_4.1.1_beagleboneblack.tar.gz} from \l{http://downloads.ti.com/sitara_android/esd/TI_Android_DevKit/TI_Android_JB_4_2_2_DevKit_4_1_1/index_FDS.html} {Texas Instruments} (search for \e {BeagleBone Black} in the list of download packages). Use the following commands to create an SD card containing the downloaded image: \list 1 \li Extract the downloaded package: \badcode ~$ tar zxvf ~/Downloads/TI_Android_JB_4.2.2_DevKit_4.1.1_beagleboneblack.tar.gz \endcode \li Run beagleboneblack/mkmmc-android.sh: \badcode ~$ cd beagleboneblack ~/beagleboneblack$ sudo ./mkmmc-android.sh /dev/ \endcode \endlist \section1 Installing the \B2Q Image Then, upgrade the SD card with \B2Q. Use one of the commands below, depending on whether you are developing for embedded Android or Linux: \list \li \b{\B2QA} \badcode cd ./Boot2Qt-2.x/beaglebone-eAndroid/images/deploy.sh /dev/ \endcode \li \b{\B2QL} \badcode cd sudo ./Boot2Qt-2.x/beaglebone-eLinux/images/deploy.sh /dev/ \endcode \endlist After the installation is complete, insert the SD card, power on the device and check that the \B2Q welcome screen and/or demo appear. \section1 Setting up USB Access \include b2qt-post-install-setup.qdocinc setting up usb access \section1 Configuring a Device Kit in Qt Creator \include b2qt-post-install-setup.qdocinc configuring device kit You are now ready to start developing for your device. For more information, see \l{Building and Running an Example}. */ /*! \target i.MX53 Quick Start Board (embedded Linux) \page qtee-preparing-hardware-imx53qsb.html \title Preparing i.MX53 Quick Start Board \previouspage qtee-installation-guide.html \nextpage qtee-building-and-running.html Take the following steps to prepare a \l{http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=IMX53QSB} {i.MX53 Quick Start Board} for \B2Q. \note Ethernet networking is required to connect the device to Qt Creator. \note It is important that you repeat the steps in this section after you update \SDK. As i.MX53 Quick Start Board is not a \SDK reference board, there is no ready-made image containing a \B2Q stack available. Instead, you must build it yourself using the Yocto recipes and build scripts from the \B2Q source packages. For more information, see \l{Building Your Own Embedded Linux Image}. \section1 Preparing an SD Card An SD card of at least 512 MB capacity is sufficient. \include detect-sd-card-device-name.qdocinc instructions \section1 Installing the \B2Q Image To write the image to the SD card: \badcode cd sudo deploy.sh /dev/ \endcode After the image has been deployed, insert the SD card, power on the device and check that the \B2Q welcome screen and/or demo appear. \section1 Configuring a Device Kit in Qt Creator \include b2qt-post-install-setup.qdocinc configuring network device You are now ready to start developing for your device. For more information, see \l{Building and Running an Example}. */ /*! \page qtee-building-and-running.html \title Building and Running Embedded Applications \previouspage qtee-preparing-hardware.html \nextpage qtee-custom-build-steps.html \section1 Building and Running an Example After you complete the installation and configuration steps for \SDK and the target devices, you can test the setup by creating a simple \l{Qt Quick} application and running it on the device: \list 1 \li Make sure that your device is powered on and connected to the development host. \li In Qt Creator, select \b File > \b {New File or Project} > \b Applications > \b{Qt Quick Application} > \b{Choose}. \li Choose a location for your new project. \li In the \b{Qt Quick Component Set} dialog, select \b{Qt Quick 2.0}. \li In the \b{Kit Selection} dialog, select the kits for your devices. You can also select the emulator kit to test running the project in the emulator. \li Click \b{Next} and finish the wizard. \li In \b Projects > \b {Build & Run}, select the correct kit for your connected device. \li To build and run the project, click \inlineimage qtcreator-run.png \endlist \section1 Building and Running \B2Q Demos You can find the \B2Q demo applications in Qt Creator. \list 1 \li Go to \b Welcome > \b Examples. \li Select a \e Boot2Qt Qt version from the drop-down list. \li Select a demo you want to build. \li In \b Projects > \b {Build & Run}, select the correct kit for your connected device or emulator. \li To build and run the project, click \inlineimage qtcreator-run.png \endlist \section1 Setting Up an Already Existing Project for Deployment New Qt Quick application projects generated by Qt Creator always have the correct settings for deployment on the device or emulator. However, other projects need some changes. This includes projects created using the \b File > \b {New File or Project} > \b Applications > \b{Qt Widget Application} template. As a general rule, application binaries and resources are deployed to the \c {/data/user/qt/} directory. Therefore, the \c path variable for the \c INSTALLS targets needs to be adjusted accordingly in .pro files. Open the .pro file and define the \c target.path and \c INSTALLS variables as follows: \badcode target.path = /data/user/qt/$$TARGET INSTALLS += target \endcode Above, \c {$$TARGET} expands to the application target (executable) name. \section2 Deploying Application Resources If the application depends on additional resources (such as QML files and images), you need to deploy them as well. For example: \badcode appFiles.files = *.png qml appFiles.path = /data/user/qt/$$TARGET INSTALLS += appFiles \endcode Above, all PNG images from the application source directory, and the entire \e qml subdirectory are included in the deployment. Alternatively, the files used by the application can be stored into the application executable using the \l{The Qt Resource System}{Qt resource system}. This way, simply deploying the application binary is all that's required. */ /*! \page qtee-custom-build-steps.html \title Special Build & Run Options \previouspage qtee-building-and-running.html \nextpage qtee-customization.html Qt Creator allows you to execute custom commands on the embedded device connected to the development host, both during the build process and during deployment of your application. \section1 Custom Build Steps To add a custom step to be executed during the build: \list 1 \li In Qt Creator, go to \b Projects > \b {Build Settings} \li Select \b Build configuration for the \e {\B2Q} version you want to customize. \li Click \b {Add Build Step} and select \b {Custom Remote Command (via adb shell)}. \li Enter the command to be executed. \endlist \section1 Custom Deployment Steps To add a custom step to be executed during deployment: \list 1 \li In Qt Creator, go to \b Projects > \b {Run Settings} \li Select \b Run configuration for the \e {\B2Q} version you want to customize. \li Click \b {Add Deploy Step} and select \b {Custom Remote Command (via adb shell)}. \li Enter the command to be executed. \endlist \sa {Booting to a Custom Application} */ /*! \page qtee-customization.html \title Customization \previouspage qtee-building-and-running.html \nextpage qtee-custom-embedded-linux-image.html \section1 Environment and Input By default, the basic environment variables and startup options of \B2Q applications are set in the file \c {/system/bin/appcontroller.conf} in embedded Android devices and in \c{/etc/appcontroller.conf} in embedded Linux devices. You can customize this file if you target a hardware device that has other input devices than the ones that the \B2Q stack is configured for by default. On some devices, the root file system (where this file resides) is mounted read-only at boot time. To allow modification, remount it read-write by entering the following command: \badcode /Tools/b2qt/adb remount \endcode In the \c{appcontroller.conf} file, the input devices are specified by the lines similar to these: \badcode env=QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event0 \endcode Usually, you do not need to change this setting. USB input devices, such as keyboards and mice, are automatically recognized. The mouse pointer is shown automatically if a mouse is connected. However, hotplugging may not work, which means that the input devices, such as a keyboard and mouse, have to be connected at boot time. On some devices, for example the i.MX6 Sabre Lite, the touchscreen device is specified explicitly in \c QT_QPA_GENERIC_PLUGINS. This is necessary because the automatic device discovery would fail to find the touchscreen. \section1 Booting to a Custom Application After you have deployed your own application to the device, it will be launched on boot, instead of the \B2Q demo launcher. To prevent this behavior, remove or disable the \b {Make this application the default one} step from the \b{Run Settings} for your project in the Qt Creator \b Projects mode. To remove your application from the default startup, use the following command: \badcode /Tools/b2qt/adb shell appcontroller --remove-default \endcode \section1 Switching Between Portrait and Landscape Views Depending on device screen dimensions and application requirements, it might be desirable to change the default view orientation. The following example shows how to rotate your application in QML. \qml import QtQuick 2.0 Item { id: root width: 800 height: 1280 // Container element for rotating Rectangle { id: main // Swap the width and height of the root item width: root.height height: root.width anchors.centerIn: parent // Rotate 90 degrees clockwise around transformOrigin rotation: 90 // The rotated content Text { text: qsTr("Hello World") anchors.centerIn: parent } MouseArea { anchors.fill: parent onClicked: { Qt.quit(); } } } } \endqml \section1 Disabling Screen Composer on Embedded Android By default, the \B2Q stack uses Android's screen composer, \e Surfaceflinger. It is required for Qt Multimedia functionality, i.e. video playback and camera. If that functionality is not required, Surfaceflinger may be disabled. This can in some situations improve performance. \list 1 \li Edit \c {/system/bin/appcontroller.conf} to set the value of the environment variable \c QT_QPA_EGLFS_NO_SURFACEFLINGER to \c 1 instead of \c 0. \li Disable the startup of \c surfaceflinger at boot-up. Either change \c /init.rc, or simply rename the \c {/system/bin/surfaceflinger} executable. \endlist */ /*! \page qtee-custom-embedded-linux-image.html \title Building Your Own Embedded Linux Image \previouspage qtee-customization.html \nextpage qtee-changelog.html \B2QL is built using the tools and resources from the \l {Yocto Project}, and is based on Yocto's reference distribution (\e Poky). You can use the same tools to build custom \B2Q images, and have control over which packages are included in the build and how the software stack is configured. \section2 Note About Support Services for Yocto Tools By default, Digia will only provide customer support for the Yocto recipes on the reference platforms, as delivered with \SDK, and setting up the development environment for them. Receiving support for any other configuration requires a separate service agreement between a customer and Digia. \section1 Requirements You should be familiar with the Yocto tools and the concept of \e {recipes}. For more information, see Yocto Project \l{https://www.yoctoproject.org/documentation/current}{documentation}. To get started, you need the following: \list \li Install the \B2Q \e source packages. You can find these by running the \e MaintenanceTool application located in the \SDK installation directory and selecting \e {Package Manager}. The \e {Yocto meta layer} package contains the additional recipes required to make the image compatible with \B2Q. \li Install the dependencies for the Yocto tools. In Ubuntu, the following packages are required: \badcode sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath libsdl1.2-dev xterm \endcode \endlist \section1 Setting Up Yocto Build Environment Run the setup script that initializes the Yocto environment: \badcode cd /Boot2Qt-2.x/sources/b2qt-yocto-meta/b2qt-init-build-env . \endcode \section1 Building the Image and Toolchain After the Yocto environment is set up, you need to configure the build environment for your target device. Using Raspberry Pi as an example: \badcode export TEMPLATECONF=meta-b2qt/conf export MACHINE=raspberrypi source poky/oe-init-build-env build-raspberrypi \endcode Yocto recipes for \B2QL have two main targets to build: The target image, and the external toolchain that is used for building the Qt framework and applications. \badcode bitbake b2qt-embedded-image bitbake meta-toolchain-b2qt-embedded-sdk \endcode The target rootfs image is located in the \c /tmp/deploy/images//b2qt-embedded-image-.tar.gz, and the new toolchain is in \c /tmp/deploy/sdk/b2qt-eglibc-x86_64-meta-toolchain-b2qt-embedded-sdk--toolchain-1.5.sh \note The generated target image does not yet include Qt libraries, you need to build Qt and add it into the image yourself. \section1 Building Qt and Addons \e {Build scripts} source package contains scripts that can be used to build Qt and all additional Qt addons that are part of \B2QL image. To setup build environment for your target hardware, run the initialization script. Using Raspberry Pi as an example: \badcode /Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-common/init_build_env.sh /Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-linux/config.raspberrypi \endcode \note You can use the same build directory for Qt and the Yocto image. The toolchain and the target image are then used from the Yocto build directory. You can use following scripts to build different parts of the \B2Q stack. \badcode /Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-linux/build_qt.sh /Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-linux/build_extras.sh /Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-linux/build_image.sh \endcode After \e {embedded-linux/build_image.sh} has finished, you can flash the device with the updated image located in the build folder. \section1 Configuring Qt Creator After you have built the \B2Q stack, you must also set up Qt Creator in order to start developing for your device. The following script does this for you. \badcode /Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-common/setup_qtcreator.sh \endcode This will set up a new kit in Qt Creator, using the toolchain and Qt from your build directory. The new kit is visible under \b Tools > \b Options > \b {Build & Run} > \b Kits. \section1 Using Network Connection for ADB By default, \B2Q uses USB cable for communication between device and Qt Creator. On \B2QL, you can change the device to use ethernet network connection for the communication. To enable network connection, you need to modify file \c /etc/default/adbd located on the devices, and change value of \c USE_ETHERNET to \c 'yes'. This can also be done with \c adb, while the device is still connected via USB. \badcode /Tools/b2qt/adb shell sed -i -e 's/USE_ETHERNET=no/USE_ETHERNET=yes/' /etc/default/adbd \endcode \note You need to restart the device for this change to take effect. \include b2qt-post-install-setup.qdocinc configuring network device */ /*! \page qtee-supported-platforms.html \title Supported Platforms \previouspage qtee-installation-guide.html \nextpage qtee-preparing-hardware.html \section1 Supported Target Devices The \B2Q stack can be made to run on a variety of hardware. \B2QA requires hardware that has support for the Android operating system, version 4.0 or later. Approximate minimal hardware requirements for running \B2Q are: \list \li 256 MB of RAM \li 500 MHz CPU, 1 GHz preferred for 60-FPS velvet-smooth UI \li OpenGL ES 2.0 support \li Android 4.0+ compatible hardware \endlist \B2Q has been tested to work on the following reference devices: \list \li \l{http://www.google.com/nexus/7/specs/}{Google/Asus Nexus 7 (2012)} \li \l{http://beagleboard.org/hardware-xM}{BeagleBoard-xM} \li \l{http://beagleboard.org/products/beaglebone%20black}{BeagleBone Black} \li \l{http://boundarydevices.com/products/sabre-lite-imx6-sbc/}{Freescale i.MX6 Sabre Lite board (Boundary Devices)} \li \l{http://www.raspberrypi.org/faqs}{Raspberry Pi Model B} \endlist \section1 Supported Development Environment The development environment supported by \SDK is Ubuntu Linux 64-bit (12.04 LTS or 12.10). \sa {Requirements for Development Host} */ /*! \page qtee-licenses.html \title License Information \previouspage qtee-troubleshooting.html \nextpage qtee-qml-reference.html \section1 Licensing \SDK is licensed under the Qt Enterprise commercial license. For more information, see \l {http://qt.digia.com/licensing}. Evaluation licenses are also available, see \l {product page}{\SDK} on qt.digia.com. \section1 3rd Party Software Licenses The third-party licenses used in \SDK are listed in the file \c {/Licenses/ThirdPartySoftware_Listing.txt}. \section1 Embedded Android Images The embedded Android platform is built from the \e {Android Open Source Project}, source code available at \l {http://android.googlesource.com/}. The open source licenses and notices are collected into the file \c {/etc/NOTICE.html.gz} in the target images. \section1 Embedded Linux Images The embedded Linux platform is built using tools from the \l {Yocto Project}. The open source licenses and notices are located in \list \li \c /usr/share/common-licenses/license.manifest \li \c /usr/share/licenses/* \endlist \section1 Android GNU C++ Run-time Licensing The Android platform does not provide a full implementation of the C++ run-time. Instead, apps that depend on features such as STL, exceptions, or RTTI, must include an additional native run-time library that provides the features they need. \B2QA uses the GNU libstdc++ library distributed as part of the \e {Android Open Source Project}. This library is included in the images for \B2QA, and will be loaded by the application on start-up to meet the run-time requirements of Qt. The GNU C++ run-time is licensed under the \l{http://gcc.gnu.org/onlinedocs/libstdc++/manual/appendix_gpl.html}{GNU General Public License version 3} with an exception which grants permission for run-time linking and usage of the library by an application which would otherwise violate the terms of the main license. For more information about this exception, see \l{http://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html}{the official license page}. */ /*! \page qtee-changelog.html \title ChangeLog \previouspage qtee-customization.html \nextpage qtee-troubleshooting.html \section1 \B2Q 2.1.0 \list \li Release date: Apr. 15, 2014 \endlist \section2 Changes \b {New Features}: \list \li \l {Qt Data Visualization} version 1.0 was added to the \B2Q stack \li \l {Enginio Data Storage} version 1.0 was added to the \B2Q stack \li \l {Qt Quick Enterprise Controls} was updated to version 1.1 \li \l {Qt Serial Port} support was added to the \B2Q stack \li Bluetooth on \B2QL: Support for bluez was added \li Added support for building \B2QL for i.MX53 from sources \endlist \b {Improvements}: \list \li Qt Creator plugin for \B2Q now supports incremental deployment, custom adb commands \li Adb now easily usable over IP on all devices on \B2QL \li Update new content to device without erasing it first on \B2QL \li All images now contain generally used CA certificates \li Toolchains updated to support Qt WebEngine \li Documentation was added for QML types provided by the \l {WiFi Module} \li Emulator: Debug logging functionality was added \li Various documentation improvements \li \SDK installer error handling was improved \li 3rd party license information was updated \li Launcher Settings application UI was improved \endlist \b {Fixed Bugs}: \list \li \B2QL: OpenSSL Heartbleed bug was fixed \li \B2QA: Qt debug symbols were missing \li QEglFSCompositor::render() using incorrect vertices for full-screen quad, resulting in bad texture sampling \li Use damaged rect instead of full texture upload for raster windows \li Emulator: Crash when launching multiple instances \li Emulator: State transitions were not working properly \li \B2QA emulator: C++ debugging was fixed \li Emulators: Qt Quick applications don't exit on Qt.quit() \li Banding was visible on Raspberry Pi \li Qt Creator: adb failed to connect \li QtCreator: Different Virtual Machiness with the same OS were not handled properly \li Qt Creator: Tabstop order in device wizard was incorrect \li Qt 5 Everywhere demo: not all internet radio station were working \endlist \b {Fixed Known Issues}: \list \li Embedded Android: Arabic Numbers Not Always Rendered Correctly \endlist \section1 \B2Q 2.0.0 \list \li Release date: Feb. 25, 2014 \endlist \section2 Changes \b {New Features}: \list \li \B2Q stack was updated to use Qt 5.2.1 on embedded Android and Linux \li Building your own \B2Q embedded Linux stack was enabled \li Emulator graphics performance and quality was improved (GL-streaming) \li BeagleBone Black was added as a reference device \li \l {Qt Virtual Keyboard} was integrated into \B2Q \li \l {Qt Quick Enterprise Controls} was added to the \B2Q stack \li \l {Qt Charts} was added to the \B2Q stack \li \B2Q source code was made available via online installer \li WiFi networking support/configuration were implemented on embedded Android \li Ethernet connectivity was enabled on embedded Android \endlist \b {Improvements}: \list \li Updated GDB for embedded Android toolchain \li Enterprise demos (Charts, Enterprise Controls) were added \li Embedded Linux: Moved to use Yocto 1.5 (Dora) \li Demos available as examples in Qt Creator \li Embedded Android emulator updated to Android 4.2.2 \endlist \b {Fixed Bugs}: \list \li Embedded Android emulator: Missing Mesa headers \li Embedded Linux emulator: Black screen in camera demo \li Emulator tries to load host plugins \li Sensors not working in emulators \li Empty \c HOME environment variable in processes launched by appcontroller \li Embedded Android emulator: C++ debugging fails \li Qt add-ons not installed to host \endlist \b {Fixed Known Issues}: \list \li Qt SQL: QML LocalStorage Fails to Connect to Database on Embedded Android \li Qt XML Patterns: Module not Available on embedded Android \li Qt Multimedia: Audio is Muted on Nexus 7 \li Unnecessary Warnings Displayed by the Installer \li Virtual Keyboard: Backspace Removes Two Characters \endlist \section1 \B2Q 1.0.1 \list \li Release date: Dec. 5, 2013 \endlist \section2 Changes \list \li Emulator: Remote control widget version shown together with emulator version \li Emulator: Mouse events are sent instead of touch events \li Emulator: Raster window support added \li Emulator: emulatorproxyd shows its version on startup \li Emulator: Detect some network problems \li Emulator: Fixed issues related to startup \li Emulator: Updated source code license headers \li Emulator: Show all VirtualBox errors \li Emulator: Video playback support on embedded Linux \endlist */ /*! \page qtee-troubleshooting.html \title Troubleshooting \previouspage qtee-changelog.html \nextpage qtee-licenses.html \note An updated version of this information may be available in Digia customer portal, see \l {Known Issues} in \SDK \l {product page}. \section1 General Issues \section2 I have problems deploying/launching the application in Qt Creator Check that the device is properly connected to the development host via USB or Ethernet (depending on the device). See \l{Connectivity Issues}. If using the emulator, see \l{Installing VirtualBox}. \section2 I have problems deploying/launching a Qt or Qt Quick example application Because of a technical peculiarity in \c{qmake}, it is not possible to get correct deployment setup for any application that is placed inside a Qt source code tree. The workaround is to copy the example sources to a location outside the Qt source tree, and open this copy of the example application instead. \section2 I have problems launching or running applications on hardware after updating the SDK Remember to repeat the process of updating also your device with the latest version of \B2Q. See \l{Installing Boot to Qt on Target Devices}. \section2 Booting Sabre Lite i.MX 6 stops with \e {6x_bootscript not found} error Check the U-Boot version number. It should start with either \c{2012} or \c{2013}. If it is \c{2009.xx}, an upgrade of the bootloader is required. For more information, see: \list \li \l http://boundarydevices.com/6q_bootscript/ \li \l http://boundarydevices.com/switching-u-boot-versions-on-i-mx6/ \endlist \section2 How do I restore my Nexus 7 to factory settings? Go to \l{https://developers.google.com/android/nexus/images} and download the correct file for your device. Unpack it, and then enter the following commands: \badcode /Tools/b2qt/adb reboot bootloader /Tools/b2qt/fastboot -w update .zip \endcode \section2 How do I shut down the Nexus 7? If the \B2Q demo launcher is running, start the \b {Launcher Settings} app, and select \b {Shut Down} to power off the device. Otherwise, make sure the Nexus 7 is connected to the development host, and run the following command in a terminal: \badcode /Tools/b2qt/adb shell reboot -p \endcode If the device is in the fastboot mode, use the volume button to display the \b {Power off} option and press the power button to power off the device. Alternatively, press and hold the power button for 10 seconds. This will force a reboot. \section2 How do I get HDMI output working properly on BeagleBone Black? Depending on the HDMI monitor, the cable, and the build variant of the BeagleBone Black device, it may not be able to drive an HDMI display in a stable way; the image may disappear or stutter. These issues are not caused by the \B2Q stack. More details and possible solutions can be found \l {http://www.elinux.org/Beagleboard:BeagleBoneBlack_HDMI}{here}. \section2 Trying to build for the emulator target fails with error message \e{make: i686-android-linux-g++: Command not found} You need to install support libraries in order to run 32-bit programs in a 64-bit Linux operating system. See \l{Installing 32-bit Support Libraries}. \section2 Something crashed! The following command shows the system log: \badcode /Tools/b2qt/adb logcat \endcode \section2 Mouse or touch input does not work See \l{Customization}. \note Hotplugging does not currently work, and therefore, any input device must be present at boot time to be recognized. \section2 Application stops with \e{EGLFS: OpenGL windows cannot be mixed with others.} OpenGL and Qt Quick 2 applications can only have one fullscreen window existing at a time. Trying to create another OpenGL window, or trying to mix an OpenGL window with a raster one will display the above message and abort the application. \note For raster windows (software rendered content based on QWidget or QPainter), there is no such limitation. \section2 I cannot edit the contents of appcontroller.conf on the device The file system where this file is located may be mounted as read-only. See \l{Customization}. \section2 C++11 features do not work on Android To enable C++11 features in the compiler, add \e{CONFIG += c++11} to the .pro file. On Embedded Linux this will be enough because there the toolchain contains a more recent version of gcc (4.8.x). On Embedded Android however the toolchain is based on gcc 4.6. This offers limited support for C++11 and Qt's own C++11 support is disabled, meaning that adding \e{c++11} to \e{CONFIG} will have no effect. There is still a possibility however to manually enable some level of C++11 support just for the application, by adding \e{QMAKE_CXXFLAGS += -std=c++11} to the .pro file. \section1 Connectivity Issues \section2 I cannot connect to my hardware device via USB See \l{5. Setting up USB Access to Embedded Devices}. \section2 adb fails with "error: more than one device and emulator" You have to specify which Android device you want \c{adb} to talk to, using adb's \c{-s } option. Use the following command to find to see the serial number of the connected devices: \badcode /Tools/b2qt/adb devices \endcode \section2 The emulator cannot connect to the Internet By default, the VirtualBox is configured to use a host-only network, so external connections do not work in the emulator. You may be able to enable Internet connectivity with another virtual network adapter in NAT mode by adapting \l{http://askubuntu.com/questions/293816/in-virtualbox-how-do-i-set-up-host-only-virtual-machines-that-can-access-the-in}{these} instructions. \section2 The emulator is stuck in \e{Waiting for display data} or fails to start properly Check the output of the following command: \badcode /Tools/b2qt/adb devices \endcode If the emulator (192.168.56.101) is not listed there, try connecting to it: \badcode /Tools/b2qt/adb connect 192.168.56.101 \endcode If the emulator is already listed, try disconnecting it: \badcode /Tools/b2qt/adb disconnect 192.168.56.101 \endcode And then close the emulator and retry. \section2 What are the user and password to access my embedded Linux device? Embedded Linux devices can be accessed using user \c{root} and an empty password. */ /*! \page qtee-qml-reference.html \title Add-On QML Types \previouspage qtee-licenses.html The following QML modules are included in the \B2Q stack and provide additional QML types that are useful in an embedded application: \annotatedlist qtee-qmlmodules \section1 WiFi Module \annotatedlist wifi-qmltypes */