Difference between revisions of "Buildroot"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
Line 10: Line 10:
 
   | colspan=2 | Image Files
 
   | colspan=2 | Image Files
 
|-
 
|-
   | rk3399-sd-buildroot-linux-4.4-arm64-YYYYMMDD.img.zip
+
   | rk3399-sd-buildroot-linux-4.19-arm64-YYYYMMDD.img.zip
 
   | OS image booting from SD card
 
   | OS image booting from SD card
 
|-
 
|-
Line 21: Line 21:
 
Password: rockchip<br />
 
Password: rockchip<br />
 
<br />
 
<br />
 +
To change the password, please modify the following file:
 +
<syntaxhighlight lang="bash">
 +
buildroot/configs/rockchip/network.config
 +
</syntaxhighlight>
 
==Obtain Source Code==
 
==Obtain Source Code==
 
===Install repo Utility===
 
===Install repo Utility===
 
Install the repo utility:
 
Install the repo utility:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git clone https://github.com/friendlyarm/repo
+
git clone https://github.com/friendlyarm/repo --depth 1
cp repo/repo /usr/bin/
+
sudo cp repo/repo /usr/bin/
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===Download Source Code===
 
===Download Source Code===
Line 32: Line 36:
 
====1: Retrieve Repo Package from Cloud Storage====
 
====1: Retrieve Repo Package from Cloud Storage====
 
Download link: [http://download.friendlyarm.com/{{#replace:{{#replace:{{BASEPAGENAME}}| |}}|/zh|}} Click to enter]<br />
 
Download link: [http://download.friendlyarm.com/{{#replace:{{#replace:{{BASEPAGENAME}}| |}}|/zh|}} Click to enter]<br />
File location: sources/linuxsdk-friendlyelec-YYYYMMDD.tar (YYYYMMDD stands for the data when the package is generated)<br />
+
File location: sources/buildroot-rk3399-YYYYMMDD.tar (YYYYMMDD stands for the data when the package is generated)<br />
 
After you get a tar package, untar it and run the following command to extract it:
 
After you get a tar package, untar it and run the following command to extract it:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
tar xvf /path/to/netdisk/sources/linuxsdk-friendlyelec-YYYYMMDD.tar
+
tar xvf /path/to/netdisk/sources/buildroot-rk3399-YYYYMMDD.tar
cd linuxsdk-friendlyelec
+
cd buildroot-rk3399
 
repo sync -l --no-clone-bundle
 
repo sync -l --no-clone-bundle
 
</syntaxhighlight>
 
</syntaxhighlight>
 
If you want to get the latest official source code you can run the following commands:
 
If you want to get the latest official source code you can run the following commands:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cd linuxsdk-friendlyelec
+
cd buildroot-rk3399
 
repo sync --no-clone-bundle
 
repo sync --no-clone-bundle
 
</syntaxhighlight>
 
</syntaxhighlight>
 
====2: Retrive Repo Package from Github====
 
====2: Retrive Repo Package from Github====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
mkdir linuxsdk-friendlyelec
+
mkdir buildroot-rk3399
cd linuxsdk-friendlyelec
+
cd buildroot-rk3399
repo init -u https://github.com/friendlyarm/buildroot_manifests -b friendlyelec -m rk3399_linux_release.xml --repo-url=https://github.com/rockchip-linux/repo --no-clone-bundle
+
repo init -u https://github.com/friendlyarm/buildroot_manifests \
 +
    -b rockchip-kernel4.19 -m rk3399.xml --repo-url=https://github.com/friendlyarm/repo \
 +
    --no-clone-bundle
 
repo sync -c --no-clone-bundle
 
repo sync -c --no-clone-bundle
 
</syntaxhighlight>
 
</syntaxhighlight>
 
====Get Latest Version with Sync====
 
====Get Latest Version with Sync====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cd linuxsdk-friendlyelec
+
cd buildroot-rk3399
 
repo sync -c --no-clone-bundle
 
repo sync -c --no-clone-bundle
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 67: Line 73:
  
 
==Compile Source Code==
 
==Compile Source Code==
===Setup Compilation Environment===
+
===Setup Development Environment===
Under Ubuntu (Recommended: 18.04 64bit) on a host PC run the following command:
+
You need a host PC running a 64-bit Ubuntu 18.04 system and run the following command on the PC:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo apt-get update
+
wget -O - https://raw.githubusercontent.com/friendlyarm/build-env-on-ubuntu-bionic/master/install.sh | bash
sudo apt-get -y install git time aria2 wget make lsb-release openssh-client vim tree exfat-fuse exfat-utils u-boot-tools mediainfo \
+
    libasound2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libxcb-xinerama0 libxcb-xinerama0-dev \
+
    libopenal-dev libalut-dev libpulse-dev libuv1-dev libmicrohttpd-dev libssl-dev bridge-utils ifplugd \
+
    libbluetooth3-dev libjpeg8 libjpeg8-dev libjpeg-turbo8 libjpeg-turbo8-dev libvpx-dev \
+
    libgtk2.0-dev libnss3 libgconf-2-4 gconf2 gconf2-common libx11-dev libxext-dev libxtst-dev \
+
    libxrender-dev libxmu-dev libxmuu-dev libxfixes-dev libxfixes3 libpangocairo-1.0-0 \
+
    libpangoft2-1.0-0 libdbus-1-dev libdbus-1-3 libusb-0.1-4 libusb-dev \
+
    bison build-essential gperf flex ruby python libasound2-dev libbz2-dev libcap-dev \
+
    libcups2-dev libdrm-dev libegl1-mesa-dev libgcrypt11-dev libnss3-dev libpci-dev libpulse-dev libudev-dev \
+
    libxtst-dev gyp ninja-build  \
+
    libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev \
+
    libfontconfig1-dev libxss-dev libsrtp0-dev libwebp-dev libjsoncpp-dev libopus-dev libminizip-dev \
+
    libavutil-dev libavformat-dev libavcodec-dev libevent-dev libcups2-dev libpapi-dev \
+
    gcc-aarch64-linux-gnu g++-aarch64-linux-gnu gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf \
+
    qemu-user-static debootstrap whiptail bsdtar bc device-tree-compiler \
+
    swig python-dev python3-dev liblz4-tool
+
sudo apt-get -y install kmod cpio rsync patchelf
+
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Auto Compilation===
+
===Build buildroot in Docker container===
 +
Please use the Docker image provided by this link, for details, please refer to the README document:<br />
 +
https://github.com/friendlyarm/friendlyelec-ubuntu18-docker<br />
 +
 
 +
===Get Help Info===
 +
Run the build.sh script without any options it will print the help information:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
./build.sh
+
./build.sh  
 
</syntaxhighlight>
 
</syntaxhighlight>
===Compile Partial Code===
+
Let's take RK3399 as an example, the help information will be presented as follows:
 +
<syntaxhighlight lang="bash">
 +
USAGE: ./build.sh <parameter>
 +
 
 +
# Select Board Type:
 +
  ./build.sh nanopc_t4.mk
 +
  ./build.sh nanopi_m4.mk
 +
  ./build.sh nanopi_neo4.mk
 +
  ./build.sh nanopi_r4s.mk
 +
  ./build.sh som-rk3399.mk
 +
 
 +
# Select Module:
 +
  ./build.sh all                -compile all
 +
  ./build.sh uboot              -compile uboot
 +
  ./build.sh kernel            -compile kernel
 +
  ./build.sh buildroot          -compile buildroot
 +
  ./build.sh sd-img            -generate an image for an sd card
 +
  ./build.sh emmc-img          -generate an image for emmc (the generated image should be flased to an SD card and then flashed to emm with this SD card)
 +
# Clean:
 +
  ./build.sh clean              -remove old images
 +
  ./build.sh cleanall
 +
</syntaxhighlight>
 +
 
 +
===Auto Compile===
 +
For a first time compilation you need to select an board. Let's take the NanoPi R4S as an example:
 +
<syntaxhighlight lang="bash">
 +
./build.sh nanopi_r1.mk
 +
</syntaxhighlight>
 +
After the script is done successfully all components including a u-boot, a kernel and a buildroot will be compiled, and an image file will be generated.
 +
 
 +
===Compile Individual Component===
 
====kernel====
 
====kernel====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 103: Line 127:
 
./build.sh uboot
 
./build.sh uboot
 
</syntaxhighlight>
 
</syntaxhighlight>
====rootfs====
+
====buildroot====
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
./build.sh rootfs
+
./build.sh buildroot
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===Generate Image for SD Card===
 
===Generate Image for SD Card===
Line 111: Line 135:
 
sudo ./build.sh sd-img
 
sudo ./build.sh sd-img
 
</syntaxhighlight>
 
</syntaxhighlight>
Flash an image to an SD card:
+
If an img file is generated successfully you will see the following messages. You can use the "dd" command to flash the img file to an SD card. Note: you will need to replace "/dev/sdX" with the actual device name which your system recognizes the device as:<br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
./friendlyelec/rk3399/sd-fuse_rk3399/fusing.sh /dev/sdX buildroot
+
Run the following for sdcard install:
 +
    sudo dd if=out/Buildroot_20211213_NanoPi-R4S_arm64_sd.img bs=1M of=/dev/sdX
 
</syntaxhighlight>
 
</syntaxhighlight>
The "/dev/sdX" needs to be replaced with your actual SD card device name.
+
===Generate emmc (eflasher) Image===
===Generate Image for EMMC(Eflasher)===
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo ./build.sh emmc-img
 
sudo ./build.sh emmc-img
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
If an img file is generated successfully you will see the following messages. You can use the "dd" command to flash the img file to an SD card. Note: you will need to replace "/dev/sdX" with the actual device name which your system recognizes the device as:<br />
===Check Help Info===
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
# ./build.sh help
+
Run the following for sdcard install:
====USAGE: build.sh modules====
+
    sudo dd if=out/Buildroot_20211213_NanoPi-R4S_arm64_eflasher.img bs=1M of=/dev/sdX
uboot              -build uboot
+
kernel            -build kernel
+
rootfs            -build default rootfs, currently build buildroot as default
+
buildroot          -build buildroot rootfs
+
ramboot            -build ramboot image
+
yocto              -build yocto rootfs, currently build ros as default
+
ros                -build ros rootfs
+
debian            -build debian rootfs
+
pcba              -build pcba
+
recovery          -build recovery
+
all                -build uboot, kernel, rootfs, recovery image
+
cleanall          -clean uboot, kernel, rootfs, recovery
+
firmware          -pack all the image we need to boot up system
+
updateimg          -pack update image
+
sd-img            -pack sd-card image, used to create bootable SD card
+
emmc-img          -pack sd-card image, used to install buildroot to emmc
+
save              -save images, patches, commands used to debug
+
default            -build all module
+
 
</syntaxhighlight>
 
</syntaxhighlight>
Comments on popular parameters:<br />
+
Use this SD card to boot the eflasher system and run eflasher commands to install an OS to emmc. After installation is done, take off the SD card of the board and boot your system buildroot will load from eMMC.
uboot              -compile uboot only<br />
+
kernel            -compile kernel only<br />
+
rootfs            -compile buildroot only<br />
+
buildroot          -compile buildroot only<br />
+
sdimg              -generate an image which can be flashed to an SD card with the "dd" command and to eMMC with eFlasher<br />
+
<br />
+
  
 
==Customize Buildroot==
 
==Customize Buildroot==
 
===Structure of Directories===
 
===Structure of Directories===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
├── linuxsdk-friendlyelec
+
├── buildroot-xxyyzz
│  ├── app
+
│  ├── buildroot -> buildroot's source code
│  ├── buildroot buildroot's root directory
+
│  └── toolchain -> cross-compiler, used for compiling a u-boot and kernel
│  ├── build.sh -> device/rockchip/common/build.sh script for auto-compilation
+
│  ├── build.sh -> build script
│  ├── device configuration files
+
│  ├── device/friendlyelec -> configuration file for friendlyelec boards
│  ├── distro debian's root directory
+
│  ├── kernel -> kernel
│  ├── docs documents
+
│  └── u-boot -> u-boot
│  ├── envsetup.sh -> buildroot/build/envsetup.sh
+
│  └── app -> rockchip app
│  ├── external
+
│  └── external -> rockchip buildroot package
│  ├── friendlyelec configuration files for FriendlyElec's RK3399
+
│  └── rkbin -> rockchip loader binaries
│  ├── kernel kernel
+
│  └── scripts -> script files for generating an img
│  ├── Makefile -> buildroot/build/Makefile
+
│  ├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh script to update rockdev
+
│  ├── prebuilts
+
│  ├── rkbin  
+
│  ├── rkflash.sh -> device/rockchip/common/rkflash.sh flashing script
+
│  ├── rootfs directory of debian's root file system
+
│  ├── tools tools and utilities for flashing and packaging
+
│  └── u-boot u-boot
+
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 
====Update Buildroot Configurations====
 
====Update Buildroot Configurations====
 
* List Available Configurations
 
* List Available Configurations
Line 181: Line 173:
 
make list-defconfigs
 
make list-defconfigs
 
</syntaxhighlight>
 
</syntaxhighlight>
Here is what you would get:<br />
+
The configuration of FriendlyELEC RK3399:<br />
rockchip_rk3399_defconfig           - Build for rockchip_rk3399<br />
+
friendlyelec_rk3399_defconfig           - Build for friendlyelec_rk3399<br />
 
* Update Configurations Using menuconfig
 
* Update Configurations Using menuconfig
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
make rockchip_rk3399_defconfig
+
make friendlyelec_rk3399_defconfig
 
make menuconfig
 
make menuconfig
 
make savedefconfig
 
make savedefconfig
diff .defconfig configs/rockchip_rk3399_defconfig
+
diff .defconfig configs/friendlyelec_rk3399_defconfig
cp .defconfig configs/rockchip_rk3399_defconfig
+
cp .defconfig configs/friendlyelec_rk3399_defconfig
 
</syntaxhighlight>
 
</syntaxhighlight>
 
* Recompile
 
* Recompile
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
cd ../
 
cd ../
./build.sh rootfs
+
./build.sh buildroot
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===Customize File System===
 
===Customize File System===
Put your files in the friendlyelec/rk3399/fs-overlay-64 directory and recompile "rootfs"
+
Put the file in device/friendlyelec/rk3399/common-files, then repackage the img:
 +
<syntaxhighlight lang="bash">
 +
sudo ./build.sh sd-img
 +
sudo ./build.sh emmc-img
 +
</syntaxhighlight>
 
===Update U-boot and Kernel===
 
===Update U-boot and Kernel===
 
You can do it by directly updating the files in the u-boot and kernel directories.
 
You can do it by directly updating the files in the u-boot and kernel directories.
Line 217: Line 213:
 
==Q&A==
 
==Q&A==
 
===Generate Image File for Flashing with USB Type-C===
 
===Generate Image File for Flashing with USB Type-C===
After you run the "build.sh emmc-img" command a "buildroot" directory will be generated under the "friendlyelec/rk3399/sd-fuse_rk3399" directory. You can use the android_tools to load all the files under this "buildroot" directory.
+
After you run the "build.sh emmc-img" command a "buildroot" directory will be generated under the "scripts/sd-fuse" directory. You can use the android_tools to load all the files under this "buildroot" directory.
 
+
==Report bug==
 +
Please mail-to:techsupport@friendlyarm.com<br />
 
==Update Log==
 
==Update Log==
 +
===2021-12-23===
 +
* Simplify the build script and update buildroot
 
===May-16-2019===
 
===May-16-2019===
 
* Released English version
 
* Released English version

Revision as of 07:51, 23 December 2021

查看中文

1 Introduction to Buildroot

Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation. It contains a boot-loader, kernel, rootfs, various libraries and utilities(e.g. qt, gstreamer, busybox etc).

FriendlyELEC's Buildroot is based on Rockchip's version which is made with linux-sdk and maintained with git. FriendlyELEC's version is synced with Rockchip's version;


2 Download Images of Trial Version

Visit Download LinkDownload:

Image Files
rk3399-sd-buildroot-linux-4.19-arm64-YYYYMMDD.img.zip OS image booting from SD card
rk3399-eflasher-buildroot-YYYYMMDD.img.zip Image used to flash to eMMC

After extract the file you can use either dd or the win32image utility to flash the image to an SD card.

3 User Name and Password

User name: root
Password: rockchip

To change the password, please modify the following file:

buildroot/configs/rockchip/network.config

4 Obtain Source Code

4.1 Install repo Utility

Install the repo utility:

git clone https://github.com/friendlyarm/repo --depth 1
sudo cp repo/repo /usr/bin/

4.2 Download Source Code

You can retrieve a project's source code in either of the following two ways. The first works better with Mainland Chinese users:

4.2.1 1: Retrieve Repo Package from Cloud Storage

Download link: Click to enter
File location: sources/buildroot-rk3399-YYYYMMDD.tar (YYYYMMDD stands for the data when the package is generated)
After you get a tar package, untar it and run the following command to extract it:

tar xvf /path/to/netdisk/sources/buildroot-rk3399-YYYYMMDD.tar
cd buildroot-rk3399
repo sync -l --no-clone-bundle

If you want to get the latest official source code you can run the following commands:

cd buildroot-rk3399
repo sync --no-clone-bundle

4.2.2 2: Retrive Repo Package from Github

mkdir buildroot-rk3399
cd buildroot-rk3399
repo init -u https://github.com/friendlyarm/buildroot_manifests \
    -b rockchip-kernel4.19 -m rk3399.xml --repo-url=https://github.com/friendlyarm/repo \
    --no-clone-bundle
repo sync -c --no-clone-bundle

4.2.3 Get Latest Version with Sync

cd buildroot-rk3399
repo sync -c --no-clone-bundle

If your network connection is broken during sync you can run the following script to do it:

#! /bin/bash
repo sync -c --no-clone-bundle
while [ $? -ne 0 ]; 
do  
    repo sync -c --no-clone-bundle
done

5 Compile Source Code

5.1 Setup Development Environment

You need a host PC running a 64-bit Ubuntu 18.04 system and run the following command on the PC:

wget -O - https://raw.githubusercontent.com/friendlyarm/build-env-on-ubuntu-bionic/master/install.sh | bash

5.2 Build buildroot in Docker container

Please use the Docker image provided by this link, for details, please refer to the README document:
https://github.com/friendlyarm/friendlyelec-ubuntu18-docker

5.3 Get Help Info

Run the build.sh script without any options it will print the help information:

./build.sh

Let's take RK3399 as an example, the help information will be presented as follows:

USAGE: ./build.sh <parameter>
 
# Select Board Type:
  ./build.sh nanopc_t4.mk
  ./build.sh nanopi_m4.mk
  ./build.sh nanopi_neo4.mk
  ./build.sh nanopi_r4s.mk
  ./build.sh som-rk3399.mk
 
# Select Module:
  ./build.sh all                -compile all
  ./build.sh uboot              -compile uboot
  ./build.sh kernel             -compile kernel
  ./build.sh buildroot          -compile buildroot
  ./build.sh sd-img             -generate an image for an sd card
  ./build.sh emmc-img           -generate an image for emmc (the generated image should be flased to an SD card and then flashed to emm with this SD card)
# Clean:
  ./build.sh clean              -remove old images
  ./build.sh cleanall

5.4 Auto Compile

For a first time compilation you need to select an board. Let's take the NanoPi R4S as an example:

./build.sh nanopi_r1.mk

After the script is done successfully all components including a u-boot, a kernel and a buildroot will be compiled, and an image file will be generated.

5.5 Compile Individual Component

5.5.1 kernel

./build.sh kernel

5.5.2 u-boot

./build.sh uboot

5.5.3 buildroot

./build.sh buildroot

5.6 Generate Image for SD Card

sudo ./build.sh sd-img

If an img file is generated successfully you will see the following messages. You can use the "dd" command to flash the img file to an SD card. Note: you will need to replace "/dev/sdX" with the actual device name which your system recognizes the device as:

Run the following for sdcard install:
    sudo dd if=out/Buildroot_20211213_NanoPi-R4S_arm64_sd.img bs=1M of=/dev/sdX

5.7 Generate emmc (eflasher) Image

sudo ./build.sh emmc-img

If an img file is generated successfully you will see the following messages. You can use the "dd" command to flash the img file to an SD card. Note: you will need to replace "/dev/sdX" with the actual device name which your system recognizes the device as:

Run the following for sdcard install:
    sudo dd if=out/Buildroot_20211213_NanoPi-R4S_arm64_eflasher.img bs=1M of=/dev/sdX

Use this SD card to boot the eflasher system and run eflasher commands to install an OS to emmc. After installation is done, take off the SD card of the board and boot your system buildroot will load from eMMC.

6 Customize Buildroot

6.1 Structure of Directories

├── buildroot-xxyyzz
│   ├── buildroot -> buildroot's source code
│   └── toolchain -> cross-compiler, used for compiling a u-boot and kernel
│   ├── build.sh -> build script
│   ├── device/friendlyelec -> configuration file for friendlyelec boards
│   ├── kernel -> kernel
│   └── u-boot -> u-boot
│   └── app -> rockchip app
│   └── external -> rockchip buildroot package
│   └── rkbin -> rockchip loader binaries
│   └── scripts -> script files for generating an img

6.1.1 Update Buildroot Configurations

  • List Available Configurations
cd buildroot
make list-defconfigs

The configuration of FriendlyELEC RK3399:
friendlyelec_rk3399_defconfig - Build for friendlyelec_rk3399

  • Update Configurations Using menuconfig
make friendlyelec_rk3399_defconfig
make menuconfig
make savedefconfig
diff .defconfig configs/friendlyelec_rk3399_defconfig 
cp .defconfig configs/friendlyelec_rk3399_defconfig
  • Recompile
cd ../
./build.sh buildroot

6.2 Customize File System

Put the file in device/friendlyelec/rk3399/common-files, then repackage the img:

sudo ./build.sh sd-img
sudo ./build.sh emmc-img

6.3 Update U-boot and Kernel

You can do it by directly updating the files in the u-boot and kernel directories.

6.4 Use Cross Compiler in SDK

export PATH=$PWD/buildroot/output/rockchip_rk3399/host/bin/:$PATH
aarch64-buildroot-linux-gnu-g++ -v

Version information:
gcc version 6.4.0 (Buildroot 2018.02-rc3-g4f000a0797)

6.5 Cross Compile Qt Program

git clone https://github.com/friendlyarm/QtE-Demo.git
cd QtE-Demo
../buildroot/output/rockchip_rk3399/host/bin/qmake QtE-Demo.pro
make

You can auto-run your Qt program on system boot. For example you want to auto-run a QtE-Demo program. Firstly you can copy the QtE-Demo to your board, open and edit the S50launcher file under the "/etc/init.d/" directory, replace "/usr/local/QLauncher/QLauncher &" with the full path of your QtE-Demo program.

7 Q&A

7.1 Generate Image File for Flashing with USB Type-C

After you run the "build.sh emmc-img" command a "buildroot" directory will be generated under the "scripts/sd-fuse" directory. You can use the android_tools to load all the files under this "buildroot" directory.

8 Report bug

Please mail-to:techsupport@friendlyarm.com

9 Update Log

9.1 2021-12-23

  • Simplify the build script and update buildroot

9.2 May-16-2019

  • Released English version