Difference between revisions of "APITestPage"

From FriendlyELEC WiKi
Jump to: navigation, search
Line 1: Line 1:
==Debian11 桌面系统的使用==
+
===How to compile custom kernel and u-boot===
===Debian11桌面系统简介===
+
====Kernel and u-boot versions for each OS====
{{DebianBullseyeDesktop-Intro/zh|NanoPi-R6S}}
+
{| class="wikitable"
{{DebianBullseyeDesktop-Common/zh|NanoPi-R6S}}
+
|-
{{DebianBullseyeDesktop-WithHDMI/zh|NanoPi-R6S}}
+
! Operating System
{{OfficialUbuntuCore/zh|NanoPi-R6S}}
+
! Kernel Version
==Work with Debian11 Desktop==
+
! U-boot version
===Introduction to Debian11 Desktop===
+
! Cross-compiler
{{DebianBullseyeDesktop-Intro|NanoPi-R6S}}
+
! Partition type
{{DebianBullseyeDesktop-Common|NanoPi-R6S}}
+
! Build toolset
{{DebianBullseyeDesktop-WithHDMI|NanoPi-R6S}}
+
! Kernel code branch
{{OfficialUbuntuCore|NanoPi-R6S}}
+
! Kernel configuration
 +
! U-boot code branch
 +
! u-boot configuration
 +
|-
 +
| lubuntu
 +
| rowspan="4" | linux v4.4.y
 +
| rowspan="4" | u-boot v2014.10
 +
| rowspan="4" | 6.4-aarch64<br />
 +
| rowspan="4" | [https://github.com/friendlyarm/sd-fuse_rk3399/blob/master/prebuilt/parameter.template MBR]
 +
| rowspan="4" | [https://github.com/friendlyarm/sd-fuse_rk3399/tree/master sd-fuse]
 +
| rowspan="4" | [https://github.com/friendlyarm/kernel-rockchip/tree/nanopi4-linux-v4.4.y nanopi4-linux-v4.4.y]
 +
| rowspan="4" | nanopi4_linux_defconfig
 +
| rowspan="4" | [https://github.com/friendlyarm/uboot-rockchip/tree/nanopi4-v2014.10_oreo nanopi4-v2014.10_oreo]
 +
| rowspan="4" | rk3399_defconfig
 +
|-
 +
| friendlycore-arm64
 +
|-
 +
| friendlydesktop-arm64
 +
|-
 +
| eflasher
 +
|-
 +
| buildroot
 +
| rowspan="8" | linux v4.19.y
 +
| rowspan="8" | u-boot <br />v2017.09
 +
| rowspan="8" | 11.3-aarch64
 +
| rowspan="8" | [https://github.com/friendlyarm/sd-fuse_rk3399/blob/kernel-4.19/prebuilt/parameter.template GPT]
 +
| rowspan="8" | [https://github.com/friendlyarm/sd-fuse_rk3399/tree/kernel-4.19 sd-fuse]
 +
| rowspan="8" | [https://github.com/friendlyarm/kernel-rockchip/tree/nanopi4-v4.19.y nanopi4-v4.19.y]
 +
| rowspan="7" | nanopi4_linux_defconfig
 +
| rowspan="8" | [https://github.com/friendlyarm/uboot-rockchip/tree/nanopi4-v2017.09 nanopi4-v2017.09]
 +
| rowspan="8" | rk3399_defconfig
 +
|-
 +
| debian-buster-desktop-arm64
 +
|-
 +
| debian-bullseye-core-arm64
 +
|-
 +
| debian-bullseye-desktop-arm64
 +
|-
 +
| debian-bullseye-minimal-arm64
 +
|-
 +
| friendlycore-focal-arm64
 +
|-
 +
| friendlycore-lite-focal-kernel4-arm64
 +
|-
 +
| friendlywrt21-kernel4
 +
| nanopi4_linux_defconfig<br />+friendlywrt.config
 +
|-
 +
| friendlycore-lite-focal-kernel5-arm64
 +
| rowspan="5" | linux v5.15.y
 +
| rowspan="5" | u-boot <br />v2017.09
 +
| rowspan="5" | 11.3-aarch64
 +
| rowspan="5" | [https://github.com/friendlyarm/sd-fuse_rk3399/blob/kernel-5.15.y/prebuilt/parameter.template GPT]
 +
| rowspan="5" | [https://github.com/friendlyarm/sd-fuse_rk3399/tree/kernel-5.15.y<br /> sd-fuse]
 +
| rowspan="5" | [https://github.com/friendlyarm/kernel-rockchip/tree/nanopi-r2-v5.15.y nanopi-r2-v5.15.y]
 +
| nanopi4_linux_defconfig
 +
| rowspan="5" | [https://github.com/friendlyarm/uboot-rockchip/tree/nanopi4-v2017.09<br /> nanopi4-v2017.09]
 +
| rowspan="5" | rk3399_defconfig
 +
|-
 +
| friendlywrt21
 +
| rowspan="4" | nanopi4_linux_defconfig<br />+friendlywrt.config
 +
|-
 +
| friendlywrt21-docker
 +
|-
 +
| friendlywrt22
 +
|-
 +
| friendlywrt22-docker
 +
|}
 +
* Kernel source code repository:https://github.com/friendlyarm/kernel-rockchip
 +
* u-boot source code repository:https://github.com/friendlyarm/uboot-rockchip
 +
* The cross-compile toolchain is stored in the following path: /opt/FriendlyARM/toolchain/. Before using it, it needs to be exported to the PATH environment variable. For example, if you need to use version 11.3-aarch64 of the compiler, use the following command:
 +
<syntaxhighlight lang="bash">
 +
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 +
</syntaxhighlight>
 +
* The SD-Fuse build toolset can be used to quickly compile the kernel and u-boot, as well as repackaging SD card image and SD-to-eMMC image.
 +
* Click on MBR and GPT in the table to view the partition layout (configuration file) for each system.
 +
 
 +
====Compile kernel linux-v4.4.y====
 +
This section applies to the following operating systems:
 +
{| class="wikitable"
 +
|-
 +
| lubuntu
 +
| eflasher
 +
| friendlydesktop-arm64
 +
| friendlycore-arm64
 +
|}
 +
Download the source code and compile as follows:
 +
<syntaxhighlight lang="bash">
 +
git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi4-linux-v4.4.y kernel-rockchip
 +
cd kernel-rockchip
 +
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
 +
touch .scmversion
 +
# Compile the kernel
 +
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig
 +
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig  # Modifying the configuration
 +
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc)
 +
# Compile the kernel modules
 +
mkdir -p out-modules
 +
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
 +
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules_install
 +
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
 +
rm -rf $PWD/out-modules/lib/modules/${KERNEL_VER}/kernel/drivers/gpu/arm/mali400/
 +
[ ! -f "$PWD/out-modules/lib/modules/${KERNEL_VER}/modules.dep" ] && depmod -b $PWD/out-modules -E Module.symvers -F System.map -w ${KERNEL_VER}
 +
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)
 +
</syntaxhighlight>
 +
After the compilation, the following files will be generated:
 +
{| class="wikitable"
 +
|-
 +
| kernel.img
 +
| resource.img
 +
| The kernel modules are located in the out-modules directory
 +
|}
 +
Installing the kernel: <br>
 +
Please click on [[#Download u-boot and the kernel to the target board]]<br>
 +
 
 +
====Compile u-boot v2014.10====
 +
This section applies to the following operating systems:
 +
{| class="wikitable"
 +
|-
 +
| lubuntu
 +
| eflasher
 +
| friendlydesktop-arm64
 +
| friendlycore-arm64
 +
|}
 +
Download the source code and compile as follows:
 +
<syntaxhighlight lang="bash">
 +
git clone https://github.com/friendlyarm/uboot-rockchip --single-branch --depth 1 -b nanopi4-v2014.10_oreo
 +
cd uboot-rockchip
 +
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
 +
make CROSS_COMPILE=aarch64-linux- rk3399_defconfig
 +
make CROSS_COMPILE=aarch64-linux-
 +
</syntaxhighlight>
 +
After the compilation, the following files will be generated:
 +
{| class="wikitable"
 +
|-
 +
| uboot.img
 +
| trust.img
 +
| rk3399_loader_v1.22.119.bin
 +
|}
 +
Installing the u-boot: <br>
 +
Please click on [[#Download u-boot and the kernel to the target board]]<br>
 +
 
 +
====Compile kernel linux-v4.19.y====
 +
This section applies to the following operating systems:
 +
{| class="wikitable"
 +
|-
 +
| debian-buster-desktop-arm64
 +
| debian-bullseye-core-arm64
 +
| debian-bullseye-desktop-arm64
 +
| debian-bullseye-minimal-arm64
 +
|-
 +
| friendlycore-focal-arm64
 +
| friendlycore-lite-focal-kernel4-arm64
 +
| friendlywrt21-kernel4
 +
| buildroot
 +
|}
 +
Download the source code and compile as follows:
 +
<syntaxhighlight lang="bash">
 +
git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi4-v4.19.y kernel-rockchip
 +
cd kernel-rockchip
 +
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 +
touch .scmversion
 +
# Compile the kernel
 +
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig
 +
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig  # Modifying the configuration
 +
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc)
 +
# Compile the kernel modules
 +
mkdir -p out-modules
 +
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
 +
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules_install
 +
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
 +
rm -rf $PWD/out-modules/lib/modules/${KERNEL_VER}/kernel/drivers/gpu/arm/mali400/
 +
[ ! -f "$PWD/out-modules/lib/modules/${KERNEL_VER}/modules.dep" ] && depmod -b $PWD/out-modules -E Module.symvers -F System.map -w ${KERNEL_VER}
 +
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)
 +
</syntaxhighlight>
 +
After the compilation, the following files will be generated:
 +
{| class="wikitable"
 +
|-
 +
| kernel.img
 +
| resource.img
 +
| The kernel modules are located in the out-modules directory
 +
|}
 +
Installing the kernel: <br>
 +
Please click on [[#Download u-boot and the kernel to the target board]]<br>
 +
====Compile kernel linux-v5.15.y====
 +
This section applies to the following operating systems:
 +
{| class="wikitable"
 +
|-
 +
| friendlywrt21
 +
| friendlywrt21-docker
 +
| friendlywrt22
 +
| friendlywrt22-docker
 +
| friendlycore-lite-focal-kernel5-arm64
 +
|}
 +
Download the source code and compile as follows:
 +
<syntaxhighlight lang="bash">
 +
git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi-r2-v5.15.y kernel-rockchip
 +
cd kernel-rockchip
 +
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 +
touch .scmversion
 +
# Compile the kernel
 +
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi4_linux_defconfig
 +
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig  # Modifying the configuration
 +
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 -j$(nproc)
 +
# Compile the kernel modules
 +
mkdir -p out-modules && rm -rf out-modules/*
 +
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
 +
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 INSTALL_MOD_PATH="$PWD/out-modules" modules_install
 +
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
 +
[ ! -f "$PWD/out-modules/lib/modules/${KERNEL_VER}/modules.dep" ] && depmod -b $PWD/out-modules -E Module.symvers -F System.map -w ${KERNEL_VER}
 +
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)
 +
</syntaxhighlight>
 +
打包kernel.img与resource.img:
 +
<syntaxhighlight lang="bash">
 +
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-5.15.y/tools/mkkrnlimg && chmod 755 mkkrnlimg
 +
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-5.15.y/tools/resource_tool && chmod 755 resource_tool
 +
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-5.15.y/prebuilt/boot/logo.bmp
 +
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-5.15.y/prebuilt/boot/logo_kernel.bmp
 +
./mkkrnlimg arch/arm64/boot/Image kernel.img
 +
mkdir kernel-dtbs
 +
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dtb kernel-dtbs/rk3399-nanopi4-rev09.dtb
 +
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dtb kernel-dtbs/rk3399-nanopi4-rev0a.dtb
 +
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4se.dtb kernel-dtbs/rk3399-nanopi4-rev0b.dtb
 +
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dtb kernel-dtbs/rk3399-nanopi4-rev00.dtb
 +
./resource_tool --dtbname kernel-dtbs/*.dtb logo.bmp logo_kernel.bmp
 +
</syntaxhighlight>
 +
After the compilation, the following files will be generated:
 +
{| class="wikitable"
 +
|-
 +
| kernel.img
 +
| resource.img
 +
| The kernel modules are located in the out-modules directory
 +
|}
 +
Installing the kernel: <br>
 +
Please click on [[#Download u-boot and the kernel to the target board]]<br>
 +
====Compile u-boot v2017.09====
 +
This section applies to the following operating systems:
 +
{| class="wikitable"
 +
|-
 +
| debian-buster-desktop-arm64
 +
| debian-bullseye-core-arm64
 +
| debian-bullseye-desktop-arm64
 +
| debian-bullseye-minimal-arm64
 +
|-
 +
| friendlycore-focal-arm64
 +
| friendlycore-lite-focal-kernel4-arm64
 +
| friendlywrt21-kernel4
 +
| buildroot
 +
|}
 +
Download the source code and compile as follows:
 +
<syntaxhighlight lang="bash">
 +
git clone https://github.com/friendlyarm/rkbin --single-branch --depth 1 -b friendlyelec
 +
git clone https://github.com/friendlyarm/uboot-rockchip --single-branch --depth 1 -b nanopi4-v2017.09 -j$(nproc)
 +
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 +
cd uboot-rockchip/
 +
./make.sh nanopi4
 +
</syntaxhighlight>
 +
After the compilation, the following files will be generated:
 +
{| class="wikitable"
 +
|-
 +
| uboot.img
 +
| trust.img
 +
| rk3399_loader_v1.24.126.bin
 +
|}
 +
Installing the u-boot: <br>
 +
Please click on [[#Download u-boot and the kernel to the target board]]<br>
 +
 
 +
====Download u-boot and the kernel to the target board====
 +
=====Download to the installed system=====
 +
======MBR partition======
 +
This section applies to the following operating systems:
 +
{| class="wikitable"
 +
|-
 +
| lubuntu
 +
| eflasher
 +
| friendlydesktop-arm64
 +
| friendlycore-arm64
 +
|}
 +
Currently, only the Linux v4.4 kernel uses MBR partitioning. Please refer to the partmap file in this link: [https://github.com/friendlyarm/sd-fuse_rk3399/blob/kernel-4.19/prebuilt/parameter.template partmap],calculate the offset addresses of each partition, and use the dd command to write them. For example, in the contents of the parameter.template file, "0x00014000@0x00014000(kernel)" indicates that the position of kernel.img is at 0x00014000, which converted to decimal is 81920, so the dd command would be as follows:
 +
<syntaxhighlight lang="bash">
 +
dd if=kernel.img of=/dev/mmcblk0 seek=81920
 +
</syntaxhighlight>
 +
 
 +
======GPT partition======
 +
This section applies to the following operating systems:
 +
{| class="wikitable"
 +
|-
 +
| debian-buster-desktop-arm64
 +
| debian-bullseye-core-arm64
 +
| debian-bullseye-desktop-arm64
 +
| debian-bullseye-minimal-arm64
 +
|-
 +
| friendlycore-focal-arm64
 +
| friendlycore-lite-focal-kernel4-arm64
 +
| friendlywrt21-kernel4
 +
| buildroot
 +
|-
 +
| friendlywrt21
 +
| friendlywrt21-docker
 +
| friendlywrt22
 +
| friendlywrt22-docker
 +
|}
 +
Systems using the Linux v4.19 and Linux v5.15 kernels use GPT partitioning by default. Just use the dd command to write the image file to the corresponding partition.
 +
* The SD/TF Card device node: /dev/mmcblk0 <br />
 +
* The eMMC device node: /dev/mmcblk2 <br />
 +
The following is an example of how to update the kernel to eMMC:<br />
 +
Use the 'parted' command to view the partition layout:
 +
<syntaxhighlight lang="bash">
 +
parted /dev/mmcblk2 print
 +
</syntaxhighlight>
 +
You should get output similar to the following:
 +
<syntaxhighlight lang="bash">
 +
Model: MMC A3A551 (sd/mmc)
 +
Disk /dev/mmcblk2: 31.0GB
 +
Sector size (logical/physical): 512B/512B
 +
Partition Table: gpt
 +
Disk Flags:
 +
 
 +
Number  Start  End    Size    File system  Name      Flags
 +
1      8389kB  12.6MB  4194kB              uboot
 +
2      12.6MB  16.8MB  4194kB              misc
 +
3      16.8MB  21.0MB  4194kB              dtbo
 +
4      21.0MB  37.7MB  16.8MB              resource
 +
5      37.7MB  79.7MB  41.9MB              kernel
 +
6      79.7MB  113MB  33.6MB              boot
 +
7      113MB  147MB  33.6MB              recovery
 +
8      147MB  31.0GB  30.9GB  ext4        rootfs
 +
</syntaxhighlight>
 +
s shown above, the resource partition is located at 4 and the kernel partition is located at 5. Use the dd command to write the resource.img and kernel.img files to these partitions, respectively. The commands are as follows:
 +
<syntaxhighlight lang="bash">
 +
dd if=resource.img of=/dev/mmcblk2p4 bs=1M
 +
dd if=kernel.img of=/dev/mmcblk2p5 bs=1M
 +
</syntaxhighlight>
 +
If you want to update u-boot, the command is:
 +
<syntaxhighlight lang="bash">
 +
dd if=boot.img of=/dev/mmcblk2p1 bs=1M
 +
</syntaxhighlight>
 +
To update the kernel driver modules, simply upload and replace the files in the following directory with the new driver module directory: /lib/modules.
 +
 
 +
=====To package a new SD card image or an SD-to-eMMC image=====
 +
The sd-fuse is a bunch of scripts to build bootable SD card images for FriendlyElec boards, the main features are as follows:<br />
 +
* Create root filesystem image from a directory<br />
 +
* Build bootable SD card image<br />
 +
* Easy way to compile kernel、uboot and third-party driver<br />
 +
Please click on the corresponding link to learn more:
 +
{| class="wikitable"
 +
|-
 +
! Kernel version
 +
! Build toolset
 +
|-
 +
| linux v4.4.y
 +
| [https://github.com/friendlyarm/sd-fuse_rk3399/tree/master sd-fuse]
 +
|-
 +
| linux v4.19.y
 +
| [https://github.com/friendlyarm/sd-fuse_rk3399/tree/kernel-4.19<br /> sd-fuse]
 +
|-
 +
| linux v5.15.y
 +
| [https://github.com/friendlyarm/sd-fuse_rk3399/tree/kernel-5.15.y<br /> sd-fuse]
 +
|}
 +
=====USB flashing=====
 +
You can directly flash the compiled files. It's important to note that the rk3399_loader generated by u-boot needs to be renamed to MiniLoaderAll.bin. The following command demonstrates how to flash u-boot and the kernel. You need to load parameter.txt first before flashing other files:
 +
<syntaxhighlight lang="bash">
 +
sudo upgrade_tool ul MiniLoaderAll.bin
 +
sudo upgrade_tool di -p parameter.txt
 +
sudo upgrade_tool di uboot uboot.img
 +
sudo upgrade_tool di trust trust.img
 +
sudo upgrade_tool di resource resource.img
 +
sudo upgrade_tool di kernel kernel.img
 +
sudo upgrade_tool RD
 +
</syntaxhighlight>
 +
Note: upgrade_tool is a command-line tool provided by Rockchip for Linux (Linux_Upgrade_Tool).
 +
===Compile Android===
 +
====Compile Android10====
 +
=====Download Android10 Source Code=====
 +
There are two ways to download the source code:
 +
* '''repo archive file on netdisk'''
 +
Netdisk URL: [http://download.friendlyelec.com/{{#replace:{{#replace:{{BASEPAGENAME}}| |}}|/zh|}} Click here]<br />
 +
File location on netdisk:"07_Source codes/rk3399-android-10.git-YYYYMMDD.tar.xz" (YYYYMMDD means the date of packaging)<br />
 +
After extracting the repo package from the network disk, you need to execute the sync.sh script, which will pull the latest code from gitlab:
 +
<syntaxhighlight lang="bash">
 +
tar xf "/path/to/netdisk/07_Source codes/rk3399-android-10.git-YYYYMMDD.tar.xz"
 +
cd rk3399-android-10
 +
./sync.sh
 +
</syntaxhighlight>
 +
* '''git clone from gitlab'''
 +
{{{1}}} source code is maintained in gitlab, You can download it by running the following command:
 +
<syntaxhighlight lang="bash">
 +
git clone --recursive https://gitlab.com/friendlyelec/rk3399-android-10.git -b main
 +
</syntaxhighlight>
 +
Note: If the following error "error: unknown option `recurse-submodules'" appears, please upgrade git to v2.0.0 or above.
 +
=====Generate Image File=====
 +
You can compile an Android source code and generate an image file (non-root user is recommended):
 +
<syntaxhighlight lang="bash">
 +
cd rk3399-android-10
 +
./build-nanopc-t4.sh -F -M
 +
</syntaxhighlight>
 +
If you need to include google apps, you need to set an environment variable and then compile, as shown below:
 +
<syntaxhighlight lang="bash">
 +
cd rk3399-android-10
 +
export INSTALL_GAPPS_FOR_TESTING=yes
 +
./build-nanopc-t4.sh -F -M
 +
</syntaxhighlight>
 +
 
 +
=====Make OTA Packages=====
 +
If you need the support of A/B (Seamless) System Updates, you need to do the following:<br />
 +
a) Build your own update server for http download of update files;<br />
 +
b) Customize the Updater application, the code is located in packages/apps/Updater, let it connect and download file from your server;<br />
 +
c) Use the quick compilation script parameter -O or --ota to compile OTA Packages, as shown below:
 +
<syntaxhighlight lang="bash">
 +
cd rk3399-android-10
 +
./build-nanopc-t4.sh -F -O -M
 +
</syntaxhighlight>
 +
After the compilation is successfully completed, the OTA update related packages are located in the directory: rockdev/otapackage/ ,Please do not delete this directory.<br />
 +
After you have made some changes, compiling again with the parameter -O will generate ota-update-XXXXXXXX.zip, which is an incremental update package.<br />
 +
OTA Packages decides whether to generate incremental update package according to BUILD_NUMBER, for details, please refer to build-nanopc-t4.sh.<br />
 +
To disable the A/B feature, you can refer to the following to modify device/rockchip/rk3399/nanopc-t4/BoardConfig.mk, and then recompile uboot and android:<br />
 +
<syntaxhighlight lang="bash">
 +
BOARD_USES_AB_IMAGE := false
 +
</syntaxhighlight>
 +
<br />
 +
 
 +
=====Update System with New Image=====
 +
After compilation is done a new image file will be generated in the "rockdev/Image-nanopc_t4/" directory under Android 10's source code directory. You can follow the steps below to update the OS in {{{1}}}:<br />
 +
1) Insert an SD card which is processed with EFlasher to an SD card reader and insert this reader to a PC running Ubuntu. The SD card's partitions will be automatically mounted; <br />
 +
2) Copy all the files under the "rockdev/Image-nanopc_t4/" directory to the SD card's android10 directory in the "FRIENDLYARM" partition;<br />
 +
3) Insert this SD card to {{{1}}} and reflash Android<br />
 +
When flashing Android 10, EFlasher requires v1.3 or above. When flashing with Type-C, please use the tool AndroidTool v2.71 or Linux_Upgrade_Tool v1.49 provided by Rockchip.
 +
 
 +
====Compile Android8.1====
 +
=====Download Android8.1 Source Code=====
 +
There are two ways to download the source code:
 +
* '''repo archive file on netdisk'''
 +
Netdisk URL: [http://download.friendlyelec.com/{{#replace:{{#replace:{{BASEPAGENAME}}| |}}|/zh|}} Click here]<br />
 +
File location on netdisk:sources/rk3399-android-8.1.git-YYYYMMDD.tgz (YYYYMMDD means the date of packaging)<br />
 +
After extracting the repo package from the network disk, you need to execute the sync.sh script, which will pull the latest code from gitlab:
 +
<syntaxhighlight lang="bash">
 +
tar xvzf /path/to/netdisk/sources/rk3399-android-8.1.git-YYYYMMDD.tgz
 +
cd rk3399-android-8.1
 +
./sync.sh
 +
</syntaxhighlight>
 +
* '''git clone from gitlab'''
 +
{{{1}}} source code is maintained in gitlab, You can download it by running the following command:
 +
<syntaxhighlight lang="bash">
 +
git clone https://gitlab.com/friendlyelec/rk3399-android-8.1 --depth 1 -b master
 +
</syntaxhighlight>
 +
 
 +
=====Generate Image File=====
 +
You can compile an Android source code and generate an image file:
 +
<syntaxhighlight lang="bash">
 +
cd rk3399-android-8.1
 +
./build-nanopc-t4.sh -F -M
 +
</syntaxhighlight>
 +
 
 +
=====Update System with New Image=====
 +
After compilation is done a new image file will be generated in the "rockdev/Image-nanopc_t4/" directory under Android 8.1's source code directory. You can follow the steps below to update the OS in {{{1}}}:<br />
 +
1) Insert an SD card which is processed with EFlasher to an SD card reader and insert this reader to a PC running Ubuntu. The SD card's partitions will be automatically mounted; <br />
 +
2) Copy all the files under the "rockdev/Image-nanopc_t4/" directory to the SD card's android8 directory in the "FRIENDLYARM" partition;<br />
 +
3) Insert this SD card to {{{1}}} and reflash Android<br />
 +
Here is an alternative guide to update OS: [https://github.com/friendlyarm/sd-fuse_rk3399 sd-fuse_rk3399]<br />
 +
 
 +
====Compile Android7====
 +
=====Download Android7 Source Code=====
 +
There are two ways to download the source code:
 +
* '''repo archive file on netdisk'''
 +
Netdisk URL: [http://download.friendlyelec.com/{{#replace:{{#replace:{{BASEPAGENAME}}| |}}|/zh|}} Click here]<br />
 +
File location on netdisk:sources/rk3399-android-7.git-YYYYMMDD.tgz (YYYYMMDD means the date of packaging)<br />
 +
After extracting the repo package from the network disk, you need to execute the sync.sh script, which will pull the latest code from gitlab:
 +
<syntaxhighlight lang="bash">
 +
tar xvzf /path/to/netdisk/sources/rk3399-android-7.git-YYYYMMDD.tgz
 +
cd rk3399-nougat
 +
./sync.sh
 +
</syntaxhighlight>
 +
* '''git clone from gitlab'''
 +
{{{1}}} source code is maintained in gitlab, You can download it by running the following command:
 +
<syntaxhighlight lang="bash">
 +
git clone https://gitlab.com/friendlyelec/rk3399-nougat --depth 1 -b nanopc-t4-nougat
 +
</syntaxhighlight>
 +
 
 +
=====Generate Image File=====
 +
You can compile an Android7 source code and generate an image file:
 +
<syntaxhighlight lang="bash">
 +
cd rk3399-nougat
 +
./build-nanopc-t4.sh -F -M
 +
</syntaxhighlight>
 +
 
 +
=====Update System with New Image=====
 +
After compilation is done a new image file will be generated in the "rockdev/Image-nanopc_t4/" directory under Android7's source code directory. You can follow the steps below to update the OS in {{{1}}}:<br />
 +
1) Insert an SD card which is processed with EFlasher to an SD card reader and insert this reader to a PC running Ubuntu. The SD card's partitions will be automatically mounted; <br />
 +
2) Copy all the files under the "rockdev/Image-nanopc_t4/" directory to the SD card's android8 directory in the "FRIENDLYARM" partition;<br />
 +
3) Insert this SD card to {{{1}}} and reflash Android<br />
 +
Here is an alternative guide to update OS: [https://github.com/friendlyarm/sd-fuse_rk3399 sd-fuse_rk3399]<br />

Revision as of 14:14, 26 March 2023

1 How to compile custom kernel and u-boot

1.1 Kernel and u-boot versions for each OS

Operating System Kernel Version U-boot version Cross-compiler Partition type Build toolset Kernel code branch Kernel configuration U-boot code branch u-boot configuration
lubuntu linux v4.4.y u-boot v2014.10 6.4-aarch64
MBR sd-fuse nanopi4-linux-v4.4.y nanopi4_linux_defconfig nanopi4-v2014.10_oreo rk3399_defconfig
friendlycore-arm64
friendlydesktop-arm64
eflasher
buildroot linux v4.19.y u-boot
v2017.09
11.3-aarch64 GPT sd-fuse nanopi4-v4.19.y nanopi4_linux_defconfig nanopi4-v2017.09 rk3399_defconfig
debian-buster-desktop-arm64
debian-bullseye-core-arm64
debian-bullseye-desktop-arm64
debian-bullseye-minimal-arm64
friendlycore-focal-arm64
friendlycore-lite-focal-kernel4-arm64
friendlywrt21-kernel4 nanopi4_linux_defconfig
+friendlywrt.config
friendlycore-lite-focal-kernel5-arm64 linux v5.15.y u-boot
v2017.09
11.3-aarch64 GPT
sd-fuse
nanopi-r2-v5.15.y nanopi4_linux_defconfig
nanopi4-v2017.09
rk3399_defconfig
friendlywrt21 nanopi4_linux_defconfig
+friendlywrt.config
friendlywrt21-docker
friendlywrt22
friendlywrt22-docker
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
  • The SD-Fuse build toolset can be used to quickly compile the kernel and u-boot, as well as repackaging SD card image and SD-to-eMMC image.
  • Click on MBR and GPT in the table to view the partition layout (configuration file) for each system.

1.2 Compile kernel linux-v4.4.y

This section applies to the following operating systems:

lubuntu eflasher friendlydesktop-arm64 friendlycore-arm64

Download the source code and compile as follows:

git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi4-linux-v4.4.y kernel-rockchip
cd kernel-rockchip
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
touch .scmversion
# Compile the kernel
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig  # Modifying the configuration
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc)
# Compile the kernel modules
mkdir -p out-modules
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules_install
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
rm -rf $PWD/out-modules/lib/modules/${KERNEL_VER}/kernel/drivers/gpu/arm/mali400/
[ ! -f "$PWD/out-modules/lib/modules/${KERNEL_VER}/modules.dep" ] && depmod -b $PWD/out-modules -E Module.symvers -F System.map -w ${KERNEL_VER}
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)

After the compilation, the following files will be generated:

kernel.img resource.img The kernel modules are located in the out-modules directory

Installing the kernel:
Please click on #Download u-boot and the kernel to the target board

1.3 Compile u-boot v2014.10

This section applies to the following operating systems:

lubuntu eflasher friendlydesktop-arm64 friendlycore-arm64

Download the source code and compile as follows:

git clone https://github.com/friendlyarm/uboot-rockchip --single-branch --depth 1 -b nanopi4-v2014.10_oreo
cd uboot-rockchip
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
make CROSS_COMPILE=aarch64-linux- rk3399_defconfig
make CROSS_COMPILE=aarch64-linux-

After the compilation, the following files will be generated:

uboot.img trust.img rk3399_loader_v1.22.119.bin

Installing the u-boot:
Please click on #Download u-boot and the kernel to the target board

1.4 Compile kernel linux-v4.19.y

This section applies to the following operating systems:

debian-buster-desktop-arm64 debian-bullseye-core-arm64 debian-bullseye-desktop-arm64 debian-bullseye-minimal-arm64
friendlycore-focal-arm64 friendlycore-lite-focal-kernel4-arm64 friendlywrt21-kernel4 buildroot

Download the source code and compile as follows:

git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi4-v4.19.y kernel-rockchip
cd kernel-rockchip
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
touch .scmversion
# Compile the kernel
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig  # Modifying the configuration
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc)
# Compile the kernel modules
mkdir -p out-modules
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules_install
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
rm -rf $PWD/out-modules/lib/modules/${KERNEL_VER}/kernel/drivers/gpu/arm/mali400/
[ ! -f "$PWD/out-modules/lib/modules/${KERNEL_VER}/modules.dep" ] && depmod -b $PWD/out-modules -E Module.symvers -F System.map -w ${KERNEL_VER}
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)

After the compilation, the following files will be generated:

kernel.img resource.img The kernel modules are located in the out-modules directory

Installing the kernel:
Please click on #Download u-boot and the kernel to the target board

1.5 Compile kernel linux-v5.15.y

This section applies to the following operating systems:

friendlywrt21 friendlywrt21-docker friendlywrt22 friendlywrt22-docker friendlycore-lite-focal-kernel5-arm64

Download the source code and compile as follows:

git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi-r2-v5.15.y kernel-rockchip
cd kernel-rockchip
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
touch .scmversion
# Compile the kernel
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi4_linux_defconfig
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig  # Modifying the configuration
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 -j$(nproc)
# Compile the kernel modules
mkdir -p out-modules && rm -rf out-modules/*
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 INSTALL_MOD_PATH="$PWD/out-modules" modules_install
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
[ ! -f "$PWD/out-modules/lib/modules/${KERNEL_VER}/modules.dep" ] && depmod -b $PWD/out-modules -E Module.symvers -F System.map -w ${KERNEL_VER}
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)

打包kernel.img与resource.img:

wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-5.15.y/tools/mkkrnlimg && chmod 755 mkkrnlimg
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-5.15.y/tools/resource_tool && chmod 755 resource_tool
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-5.15.y/prebuilt/boot/logo.bmp
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-5.15.y/prebuilt/boot/logo_kernel.bmp
./mkkrnlimg arch/arm64/boot/Image kernel.img
mkdir kernel-dtbs
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dtb kernel-dtbs/rk3399-nanopi4-rev09.dtb
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dtb kernel-dtbs/rk3399-nanopi4-rev0a.dtb
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4se.dtb kernel-dtbs/rk3399-nanopi4-rev0b.dtb
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dtb kernel-dtbs/rk3399-nanopi4-rev00.dtb
./resource_tool --dtbname kernel-dtbs/*.dtb logo.bmp logo_kernel.bmp

After the compilation, the following files will be generated:

kernel.img resource.img The kernel modules are located in the out-modules directory

Installing the kernel:
Please click on #Download u-boot and the kernel to the target board

1.6 Compile u-boot v2017.09

This section applies to the following operating systems:

debian-buster-desktop-arm64 debian-bullseye-core-arm64 debian-bullseye-desktop-arm64 debian-bullseye-minimal-arm64
friendlycore-focal-arm64 friendlycore-lite-focal-kernel4-arm64 friendlywrt21-kernel4 buildroot

Download the source code and compile as follows:

git clone https://github.com/friendlyarm/rkbin --single-branch --depth 1 -b friendlyelec
git clone https://github.com/friendlyarm/uboot-rockchip --single-branch --depth 1 -b nanopi4-v2017.09 -j$(nproc)
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
cd uboot-rockchip/
./make.sh nanopi4

After the compilation, the following files will be generated:

uboot.img trust.img rk3399_loader_v1.24.126.bin

Installing the u-boot:
Please click on #Download u-boot and the kernel to the target board

1.7 Download u-boot and the kernel to the target board

1.7.1 Download to the installed system
1.7.1.1 MBR partition

This section applies to the following operating systems:

lubuntu eflasher friendlydesktop-arm64 friendlycore-arm64

Currently, only the Linux v4.4 kernel uses MBR partitioning. Please refer to the partmap file in this link: partmap,calculate the offset addresses of each partition, and use the dd command to write them. For example, in the contents of the parameter.template file, "0x00014000@0x00014000(kernel)" indicates that the position of kernel.img is at 0x00014000, which converted to decimal is 81920, so the dd command would be as follows:

dd if=kernel.img of=/dev/mmcblk0 seek=81920
1.7.1.2 GPT partition

This section applies to the following operating systems:

debian-buster-desktop-arm64 debian-bullseye-core-arm64 debian-bullseye-desktop-arm64 debian-bullseye-minimal-arm64
friendlycore-focal-arm64 friendlycore-lite-focal-kernel4-arm64 friendlywrt21-kernel4 buildroot
friendlywrt21 friendlywrt21-docker friendlywrt22 friendlywrt22-docker

Systems using the Linux v4.19 and Linux v5.15 kernels use GPT partitioning by default. Just use the dd command to write the image file to the corresponding partition.

  • The SD/TF Card device node: /dev/mmcblk0
  • The eMMC device node: /dev/mmcblk2

The following is an example of how to update the kernel to eMMC:
Use the 'parted' command to view the partition layout:

parted /dev/mmcblk2 print

You should get output similar to the following:

Model: MMC A3A551 (sd/mmc)
Disk /dev/mmcblk2: 31.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
 
Number  Start   End     Size    File system  Name      Flags
 1      8389kB  12.6MB  4194kB               uboot
 2      12.6MB  16.8MB  4194kB               misc
 3      16.8MB  21.0MB  4194kB               dtbo
 4      21.0MB  37.7MB  16.8MB               resource
 5      37.7MB  79.7MB  41.9MB               kernel
 6      79.7MB  113MB   33.6MB               boot
 7      113MB   147MB   33.6MB               recovery
 8      147MB   31.0GB  30.9GB  ext4         rootfs

s shown above, the resource partition is located at 4 and the kernel partition is located at 5. Use the dd command to write the resource.img and kernel.img files to these partitions, respectively. The commands are as follows:

dd if=resource.img of=/dev/mmcblk2p4 bs=1M
dd if=kernel.img of=/dev/mmcblk2p5 bs=1M

If you want to update u-boot, the command is:

dd if=boot.img of=/dev/mmcblk2p1 bs=1M

To update the kernel driver modules, simply upload and replace the files in the following directory with the new driver module directory: /lib/modules.

1.7.2 To package a new SD card image or an SD-to-eMMC image

The sd-fuse is a bunch of scripts to build bootable SD card images for FriendlyElec boards, the main features are as follows:

  • Create root filesystem image from a directory
  • Build bootable SD card image
  • Easy way to compile kernel、uboot and third-party driver

Please click on the corresponding link to learn more:

Kernel version Build toolset
linux v4.4.y sd-fuse
linux v4.19.y
sd-fuse
linux v5.15.y
sd-fuse
1.7.3 USB flashing

You can directly flash the compiled files. It's important to note that the rk3399_loader generated by u-boot needs to be renamed to MiniLoaderAll.bin. The following command demonstrates how to flash u-boot and the kernel. You need to load parameter.txt first before flashing other files:

sudo upgrade_tool ul MiniLoaderAll.bin
sudo upgrade_tool di -p parameter.txt
sudo upgrade_tool di uboot uboot.img
sudo upgrade_tool di trust trust.img
sudo upgrade_tool di resource resource.img
sudo upgrade_tool di kernel kernel.img
sudo upgrade_tool RD

Note: upgrade_tool is a command-line tool provided by Rockchip for Linux (Linux_Upgrade_Tool).

2 Compile Android

2.1 Compile Android10

2.1.1 Download Android10 Source Code

There are two ways to download the source code:

  • repo archive file on netdisk

Netdisk URL: Click here
File location on netdisk:"07_Source codes/rk3399-android-10.git-YYYYMMDD.tar.xz" (YYYYMMDD means the date of packaging)
After extracting the repo package from the network disk, you need to execute the sync.sh script, which will pull the latest code from gitlab:

tar xf "/path/to/netdisk/07_Source codes/rk3399-android-10.git-YYYYMMDD.tar.xz"
cd rk3399-android-10
./sync.sh
  • git clone from gitlab

{{{1}}} source code is maintained in gitlab, You can download it by running the following command:

git clone --recursive https://gitlab.com/friendlyelec/rk3399-android-10.git -b main

Note: If the following error "error: unknown option `recurse-submodules'" appears, please upgrade git to v2.0.0 or above.

2.1.2 Generate Image File

You can compile an Android source code and generate an image file (non-root user is recommended):

cd rk3399-android-10
./build-nanopc-t4.sh -F -M

If you need to include google apps, you need to set an environment variable and then compile, as shown below:

cd rk3399-android-10
export INSTALL_GAPPS_FOR_TESTING=yes
./build-nanopc-t4.sh -F -M
2.1.3 Make OTA Packages

If you need the support of A/B (Seamless) System Updates, you need to do the following:
a) Build your own update server for http download of update files;
b) Customize the Updater application, the code is located in packages/apps/Updater, let it connect and download file from your server;
c) Use the quick compilation script parameter -O or --ota to compile OTA Packages, as shown below:

cd rk3399-android-10
./build-nanopc-t4.sh -F -O -M

After the compilation is successfully completed, the OTA update related packages are located in the directory: rockdev/otapackage/ ,Please do not delete this directory.
After you have made some changes, compiling again with the parameter -O will generate ota-update-XXXXXXXX.zip, which is an incremental update package.
OTA Packages decides whether to generate incremental update package according to BUILD_NUMBER, for details, please refer to build-nanopc-t4.sh.
To disable the A/B feature, you can refer to the following to modify device/rockchip/rk3399/nanopc-t4/BoardConfig.mk, and then recompile uboot and android:

BOARD_USES_AB_IMAGE := false


2.1.4 Update System with New Image

After compilation is done a new image file will be generated in the "rockdev/Image-nanopc_t4/" directory under Android 10's source code directory. You can follow the steps below to update the OS in {{{1}}}:
1) Insert an SD card which is processed with EFlasher to an SD card reader and insert this reader to a PC running Ubuntu. The SD card's partitions will be automatically mounted;
2) Copy all the files under the "rockdev/Image-nanopc_t4/" directory to the SD card's android10 directory in the "FRIENDLYARM" partition;
3) Insert this SD card to {{{1}}} and reflash Android
When flashing Android 10, EFlasher requires v1.3 or above. When flashing with Type-C, please use the tool AndroidTool v2.71 or Linux_Upgrade_Tool v1.49 provided by Rockchip.

2.2 Compile Android8.1

2.2.1 Download Android8.1 Source Code

There are two ways to download the source code:

  • repo archive file on netdisk

Netdisk URL: Click here
File location on netdisk:sources/rk3399-android-8.1.git-YYYYMMDD.tgz (YYYYMMDD means the date of packaging)
After extracting the repo package from the network disk, you need to execute the sync.sh script, which will pull the latest code from gitlab:

tar xvzf /path/to/netdisk/sources/rk3399-android-8.1.git-YYYYMMDD.tgz
cd rk3399-android-8.1
./sync.sh
  • git clone from gitlab

{{{1}}} source code is maintained in gitlab, You can download it by running the following command:

git clone https://gitlab.com/friendlyelec/rk3399-android-8.1 --depth 1 -b master
2.2.2 Generate Image File

You can compile an Android source code and generate an image file:

cd rk3399-android-8.1
./build-nanopc-t4.sh -F -M
2.2.3 Update System with New Image

After compilation is done a new image file will be generated in the "rockdev/Image-nanopc_t4/" directory under Android 8.1's source code directory. You can follow the steps below to update the OS in {{{1}}}:
1) Insert an SD card which is processed with EFlasher to an SD card reader and insert this reader to a PC running Ubuntu. The SD card's partitions will be automatically mounted;
2) Copy all the files under the "rockdev/Image-nanopc_t4/" directory to the SD card's android8 directory in the "FRIENDLYARM" partition;
3) Insert this SD card to {{{1}}} and reflash Android
Here is an alternative guide to update OS: sd-fuse_rk3399

2.3 Compile Android7

2.3.1 Download Android7 Source Code

There are two ways to download the source code:

  • repo archive file on netdisk

Netdisk URL: Click here
File location on netdisk:sources/rk3399-android-7.git-YYYYMMDD.tgz (YYYYMMDD means the date of packaging)
After extracting the repo package from the network disk, you need to execute the sync.sh script, which will pull the latest code from gitlab:

tar xvzf /path/to/netdisk/sources/rk3399-android-7.git-YYYYMMDD.tgz
cd rk3399-nougat
./sync.sh
  • git clone from gitlab

{{{1}}} source code is maintained in gitlab, You can download it by running the following command:

git clone https://gitlab.com/friendlyelec/rk3399-nougat --depth 1 -b nanopc-t4-nougat
2.3.2 Generate Image File

You can compile an Android7 source code and generate an image file:

cd rk3399-nougat
./build-nanopc-t4.sh -F -M
2.3.3 Update System with New Image

After compilation is done a new image file will be generated in the "rockdev/Image-nanopc_t4/" directory under Android7's source code directory. You can follow the steps below to update the OS in {{{1}}}:
1) Insert an SD card which is processed with EFlasher to an SD card reader and insert this reader to a PC running Ubuntu. The SD card's partitions will be automatically mounted;
2) Copy all the files under the "rockdev/Image-nanopc_t4/" directory to the SD card's android8 directory in the "FRIENDLYARM" partition;
3) Insert this SD card to {{{1}}} and reflash Android
Here is an alternative guide to update OS: sd-fuse_rk3399