Difference between revisions of "APITestPage"

From FriendlyELEC WiKi
Jump to: navigation, search
Line 1: Line 1:
===Linux系统编译===
+
===How to compile custom kernel and u-boot===
====各个OS对应的内核与u-boot版本====
+
====Kernel and u-boot versions for each OS====
 
{| class="wikitable"  
 
{| class="wikitable"  
 
|-
 
|-
! 操作系统
+
! Operating System
! 内核版本
+
! Kernel Version
! uboot版本
+
! U-boot version
! 交叉编译器
+
! Cross-compiler
! 分区类型
+
! Partition type
! 构建脚本
+
! Build toolset
! 内核代码分支
+
! Kernel code branch
! 内核配置
+
! Kernel configuration
! uboot代码分支
+
! U-boot code branch
! uboot配置
+
! 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
 
| buildroot
| rowspan="8" | linux v4.19.y
+
| rowspan="10" | linux v5.10.y
| rowspan="8" | u-boot <br />v2017.09
+
| rowspan="10" | u-boot <br />v2017.09
| rowspan="8" | 11.3-aarch64
+
| rowspan="10" | 11.3-aarch64
| rowspan="8" | [https://github.com/friendlyarm/sd-fuse_rk3399/blob/kernel-4.19/prebuilt/parameter.template GPT]
+
| rowspan="10" | [https://github.com/friendlyarm/sd-fuse_rk3568/blob/master/prebuilt/parameter.template GPT]
| rowspan="8" | [https://github.com/friendlyarm/sd-fuse_rk3399/tree/kernel-4.19 sd-fuse]
+
| rowspan="10" | [https://github.com/friendlyarm/sd-fuse_rk3568/tree/master sd-fuse]
| rowspan="8" | [https://github.com/friendlyarm/kernel-rockchip/tree/nanopi4-v4.19.y nanopi4-v4.19.y]
+
| rowspan="10" | [https://github.com/friendlyarm/kernel-rockchip/tree/nanopi5-v5.10.y_opt nanopi5-v5.10.y_opt]
| rowspan="7" | nanopi4_linux_defconfig
+
| rowspan="6" | nanopi5_linux_defconfig
| rowspan="8" | [https://github.com/friendlyarm/uboot-rockchip/tree/nanopi4-v2017.09 nanopi4-v2017.09]
+
| rowspan="10" | [https://github.com/friendlyarm/uboot-rockchip/tree/nanopi5-v2017.09 nanopi5-v2017.09]
| rowspan="8" | rk3399_defconfig
+
| rowspan="10" | rk3568_defconfig
 
|-
 
|-
| debian-buster-desktop-arm64
+
| friendlycore-focal-arm64
 
|-
 
|-
 
| debian-bullseye-core-arm64
 
| debian-bullseye-core-arm64
Line 50: Line 33:
 
| debian-bullseye-minimal-arm64
 
| debian-bullseye-minimal-arm64
 
|-
 
|-
| friendlycore-focal-arm64
+
| debian-buster-desktop-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
 
| friendlywrt21
| rowspan="4" | nanopi4_linux_defconfig<br /> friendlywrt.config
+
| rowspan="4" | nanopi5_linux_defconfig<br />friendlywrt.config
 
|-
 
|-
 
| friendlywrt21-docker
 
| friendlywrt21-docker
Line 77: Line 44:
 
| friendlywrt22-docker
 
| friendlywrt22-docker
 
|}
 
|}
* 内核源代码仓库地址:https://github.com/friendlyarm/kernel-rockchip
+
* Kernel source code repository:https://github.com/friendlyarm/kernel-rockchip
* u-boot源代码仓库地址:https://github.com/friendlyarm/uboot-rockchip
+
* u-boot source code repository:https://github.com/friendlyarm/uboot-rockchip
* 交叉编译工具链存放在如下路径: /opt/FriendlyARM/toolchain/,使用前需导出到PATH环境变量,例如需要使用11.3-aarch64版本的编译器,使用如下命令:
+
* The cross-compile toolchain is located in the path: /opt/FriendlyARM/toolchain/. Using the toolchain is as simple as adding the toolchain’s bin directory in your PATH, such as:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 
</syntaxhighlight>
 
</syntaxhighlight>
* sd-fuse构建脚本可以用于快速编译kernel和uboot、重新打包sd卡固件与卡刷固件等
+
* The [https://github.com/friendlyarm/sd-fuse_rk3568/tree/master 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.
* 点击表格中的MBR与GPT可查看各系统的分区布局(配置文件)
+
====Compile kernel linux-v5.10.y====
 
+
Download the source code and compile as follows:
====编译内核linux-v4.4.y====
+
本节内容适用于如下OS:
+
{| class="wikitable"
+
|-
+
| lubuntu
+
| eflasher
+
| friendlydesktop-arm64
+
| friendlycore-arm64
+
|}
+
下载源代码并编译:
+
<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
+
# 编译内核
+
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig
+
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig  # 启动配置界面
+
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc)
+
# 编译驱动模块
+
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>
+
编译完会生成如下文件:
+
{| class="wikitable"
+
|-
+
| kernel.img
+
| resource.img
+
| 驱动模块位于out-modules目录
+
|}
+
安装内核: <br>
+
请参考 [[#下载uboot与内核到目标板]]<br>
+
 
+
====编译u-boot v2014.10====
+
本节内容适用于如下OS:
+
{| class="wikitable"
+
|-
+
| lubuntu
+
| eflasher
+
| friendlydesktop-arm64
+
| friendlycore-arm64
+
|}
+
下载源代码并编译:
+
<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>
+
编译完成后会生成如下文件:
+
{| class="wikitable"
+
|-
+
| uboot.img
+
| trust.img
+
| rk3399_loader_v1.22.119.bin (打包时改名为MiniLoaderAll.bin)
+
|}
+
安装u-boot: <br />
+
请参考 [[#下载uboot与内核到目标板]]<br>
+
 
+
====编译内核linux-v4.19.y====
+
本节内容适用于如下OS:
+
{| 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
+
|}
+
下载源代码并编译:
+
<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
+
# 编译内核
+
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig
+
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig  # 启动配置界面
+
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc)
+
# 编译驱动模块
+
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>
+
编译完会生成如下文件:
+
{| class="wikitable"
+
|-
+
| kernel.img
+
| resource.img
+
| 驱动模块位于out-modules目录
+
|}
+
安装内核: <br>
+
请参考 [[#下载uboot与内核到目标板]]<br>
+
====编译内核linux-v5.15.y====
+
本节内容适用于如下OS:
+
{| class="wikitable"
+
|-
+
| friendlywrt21
+
| friendlywrt21-docker
+
| friendlywrt22
+
| friendlywrt22-docker
+
| friendlycore-lite-focal-kernel5-arm64
+
|}
+
下载源代码并编译:
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi-r2-v5.15.y kernel-rockchip
+
git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi5-v5.10.y_opt kernel-rockchip
 
cd kernel-rockchip
 
cd kernel-rockchip
 
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 
touch .scmversion
 
touch .scmversion
# 编译内核
+
# Configuring the Kernel
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi4_linux_defconfig
+
# Option1: Load Linux system configuration
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig # 启动配置界面
+
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi5_linux_defconfig
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 -j$(nproc)
+
# Option2: Load FriendlyWrt system configuration
# 编译驱动模块
+
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi5_linux_defconfig friendlywrt.config
 +
# Launch configuration interface
 +
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig
 +
# Compiling Kernel
 +
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi5-images -j$(nproc)
 +
# Compiling the driver modules
 
mkdir -p out-modules && rm -rf out-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 -j$(nproc)
Line 221: Line 75:
 
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)
 
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)
 
</syntaxhighlight>
 
</syntaxhighlight>
打包kernel.img与resource.img:
+
You will get the following file:
<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>
+
完成后会得到如下文件:
+
 
{| class="wikitable"  
 
{| class="wikitable"  
 
|-
 
|-
 
| kernel.img
 
| kernel.img
 
| resource.img
 
| resource.img
| 驱动模块位于out-modules目录
+
| <del>boot.img This img is deprecated</del>
|}
+
| The kernel modules are located in the out-modules directory
安装内核: <br>
+
请参考 [[#下载uboot与内核到目标板]]<br>
+
====编译u-boot v2017.09====
+
本节内容适用于如下OS:
+
{| 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
+
 
|}
 
|}
下载源代码并编译:
+
Installing the kernel: <br>
 +
Please click on [[#Download u-boot and the kernel to the target board]]<br>
 +
====Compile u-boot v2017.09====
 +
Download the source code and compile as follows:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git clone https://github.com/friendlyarm/rkbin --single-branch --depth 1 -b friendlyelec
+
git clone https://github.com/friendlyarm/rkbin --single-branch --depth 1 -b nanopi5
git clone https://github.com/friendlyarm/uboot-rockchip --single-branch --depth 1 -b nanopi4-v2017.09
+
git clone https://github.com/friendlyarm/uboot-rockchip --single-branch --depth 1 -b nanopi5-v2017.09
 
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 
cd uboot-rockchip/
 
cd uboot-rockchip/
./make.sh nanopi4
+
./make.sh nanopi5
 
</syntaxhighlight>
 
</syntaxhighlight>
编译完成后会生成如下文件:
+
After the compilation, the following files will be generated:
 
{| class="wikitable"  
 
{| class="wikitable"  
 
|-
 
|-
 
| uboot.img
 
| uboot.img
| trust.img
+
| rk356x_spl_loader_v1.15.112.bin (Before packaging, you need to rename it to MiniLoaderAll.bin)
| rk3399_loader_v1.24.126.bin (打包时改名为MiniLoaderAll.bin)
+
 
|}
 
|}
安装u-boot: <br />
+
Installing the u-boot: <br>
请参考 [[#下载uboot与内核到目标板]]<br>
+
Please click on [[#Download u-boot and the kernel to the target board]]<br>
  
====下载uboot与内核到目标板====
+
====Download u-boot and the kernel to the target board====
=====下载至已安装的系统=====
+
=====Download to the installed system=====
======MBR分区======
+
Since the RK3568's OS uses GPT partitions by default, you can use the dd command to write the image file to the partition, the device nodes for SD card and eMMC are shown below:
本节内容适用于如下OS:
+
* The SD/TF Card device node: /dev/mmcblk0 <br />
{| class="wikitable"
+
* The eMMC device node: /dev/mmcblk2 <br />
|-
+
The following is an example of how to update the kernel to eMMC:<br />
| lubuntu
+
Use the 'parted' command to view the partition layout:
| eflasher
+
| friendlydesktop-arm64
+
| friendlycore-arm64
+
|}
+
目前只有linux v4.4内核使用mbr分区,需要参考此链接的[https://github.com/friendlyarm/sd-fuse_rk3399/blob/kernel-4.19/prebuilt/parameter.template partmap文件],计算各分区的偏移地址,用dd命令进行写入,例如parameter.template文件内容中"0x00014000@0x00014000(kernel)"表示kernel.img的位置位于0x00014000,转换成10进制就是81920, 所以dd命令如下:
+
<syntaxhighlight lang="bash">
+
dd if=kernel.img of=/dev/mmcblk0 seek=81920
+
</syntaxhighlight>
+
 
+
======GPT分区======
+
本节内容适用于如下OS:
+
{| 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
+
|}
+
linux v4.19内核和linux v5.15内核的系统默认使用GPT分区, 更新GPT分区比较简单,直接dd image文件至相应的分区即可(注意image的大小不要越界),在操作时需要注意存储设备的节点:
+
* SD/TF Card设备节点为 /dev/mmcblk0 <br />
+
* eMMC设备节点为 /dev/mmcblk2 <br />
+
下面将演示如何将内核更新到eMMC:<br />
+
使用parted命令查看分区布局:
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
parted /dev/mmcblk2 print
 
parted /dev/mmcblk2 print
 
</syntaxhighlight>
 
</syntaxhighlight>
得到如下输出:
+
You should get output similar to the following:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
Model: MMC A3A551 (sd/mmc)
 
Model: MMC A3A551 (sd/mmc)
Line 337: Line 131:
 
  8      147MB  31.0GB  30.9GB  ext4        rootfs
 
  8      147MB  31.0GB  30.9GB  ext4        rootfs
 
</syntaxhighlight>
 
</syntaxhighlight>
可以看到resource分区位置为4, kernel分区位置为5,用dd命令分别写入resource.img与kernel.img到这两个分区即可, 命令如下:
+
as 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, the commands are as follows:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
dd if=resource.img of=/dev/mmcblk2p4 bs=1M
 
dd if=resource.img of=/dev/mmcblk2p4 bs=1M
 
dd if=kernel.img of=/dev/mmcblk2p5 bs=1M
 
dd if=kernel.img of=/dev/mmcblk2p5 bs=1M
 
</syntaxhighlight>
 
</syntaxhighlight>
如果要更新uboot,则命令为:
+
If you want to update u-boot:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
dd if=boot.img of=/dev/mmcblk2p1 bs=1M
 
dd if=boot.img of=/dev/mmcblk2p1 bs=1M
 
</syntaxhighlight>
 
</syntaxhighlight>
如果要更新内核驱动模块,将新驱动模块目录上传并替换以下目录下的文件即可:/lib/modules。
+
To update new driver modules, copy the newly compiled driver modules to the appropriate directory under /lib/modules.
  
=====打包新的SD卡启动固件或者SD-to-eMMC卡刷固件=====
+
=====How to create a new OS image file=====
sd-fuse 提供一些工具和脚本, 用于制作SD卡固件, 具体用途如下:<br />
+
To create a new OS image file, you need to use the "sd-fuse" packaging tool.<br />
* 制作分区镜像文件, 例如将rootfs目录打包成rootfs.img<br />
+
<br />
* 将多个分区镜像文件打包成可直接写SD卡的单一镜像文件<br />
+
"sd-fuse" is a collection of scripts that can be used to create bootable SD card images for FriendlyElec boards. Its main features include:<br />
* 简化内核和uboot的编译, 一键编译内核、第三方驱动, 并更新rootfs.img中的内核模块<br />
+
* Creation of root filesystem images from a directory <br />
请根据所用的内核版本点击对应的链接了解详细的使用方法:
+
* Building of bootable SD card images<br />
 +
* Simple compilation of kernel, U-Boot, and third-party drivers<br />
 +
Please click on the following link to find out more:
 
{| class="wikitable"  
 
{| class="wikitable"  
 
|-
 
|-
! 内核版本
+
! Kernel version
! 构建脚本
+
! Build toolset
 
|-
 
|-
| linux v4.4.y
+
| linux v5.10.y
| [https://github.com/friendlyarm/sd-fuse_rk3399/tree/master sd-fuse]
+
| [https://github.com/friendlyarm/sd-fuse_rk3568/tree/master<br /> sd-fuse_rk3568]
|-
+
| 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=====
不擦除flash的情况下只刷入编译生成的文件即可,需要注意的是uboot编译生成的rk3399_loader需要改名为MiniLoaderAll.bin,如下命令演示刷入uboot与内核,需要先加载parameter.txt,再刷入其他文件:
+
======Linux======
 +
To flash U-Boot and kernel using the "upgrade_tool" tool, please use the following command:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo upgrade_tool ul MiniLoaderAll.bin
 
sudo upgrade_tool ul MiniLoaderAll.bin
 
sudo upgrade_tool di -p parameter.txt
 
sudo upgrade_tool di -p parameter.txt
 
sudo upgrade_tool di uboot uboot.img
 
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 resource resource.img
 
sudo upgrade_tool di kernel kernel.img
 
sudo upgrade_tool di kernel kernel.img
 
sudo upgrade_tool RD
 
sudo upgrade_tool RD
 
</syntaxhighlight>
 
</syntaxhighlight>
注:upgrade_tool是Rockchip提供的Linux下的命令行工具(Linux_Upgrade_Tool)
+
Note: "upgrade_tool" is a command-line tool provided by Rockchip for Linux operating systems (Linux_Upgrade_Tool).
 
+
===Android系统编译===
+
====编译Android10====
+
=====下载Android10源代码=====
+
有以下两种途径获取 Android10 的源代码,都需要联网:
+
* '''使用网盘里的git repo压缩包'''
+
网盘下载地址: [http://download.friendlyelec.com/{{#replace:{{#replace:{{BASEPAGENAME}}| |}}|/zh|}} 点击进入]<br />
+
文件位于网盘的以下路径:07_源代码/rk3399-android-10.git-YYYYMMDD.tar.xz (YYYYMMDD表示打包的日期)<br />
+
从网盘中获取的压缩包在解压之后,需要执行一下 sync.sh 脚本,会从gitlab上拉取最新的代码:
+
<syntaxhighlight lang="bash">
+
tar xf /path/to/netdisk/07_源代码/rk3399-android-10.git-YYYYMMDD.tar.xz
+
cd rk3399-android-10
+
./sync.sh
+
</syntaxhighlight>
+
注意: 如果遇到“error: unknown option `recurse-submodules'”,请升级git至v2.0.0或以上版本。
+
* '''直接克隆git仓库'''
+
{{{1}}} 源代码托管在 gitlab 上,使用以下命令进行下载:
+
<syntaxhighlight lang="bash">
+
git clone --recursive https://gitlab.com/friendlyelec/rk3399-android-10.git -b main
+
</syntaxhighlight>
+
 
+
=====编译并生成Image文件=====
+
编译Android 10建议使用普通用户登录,运行以下命令编译:
+
<syntaxhighlight lang="bash">
+
cd rk3399-android-10
+
./build-nanopc-t4.sh -F -M
+
</syntaxhighlight>
+
如果需要包含google apps,需要设置一个环境变量再编译,如下所示:
+
<syntaxhighlight lang="bash">
+
cd rk3399-android-10
+
export INSTALL_GAPPS_FOR_TESTING=yes
+
./build-nanopc-t4.sh -F -M
+
</syntaxhighlight>
+
 
+
=====编译OTA Packages=====
+
如果需要A/B (Seamless) System Updates的支持,需要先进行以下定制:<br />
+
a) 搭建自己的更新服务器<br />
+
b) 定制packages/apps/Updater使其适配自己的更新服务<br />
+
定制完成后,使用快速编译脚本参数-O或--ota可编译OTA Packages,如下所示:
+
<syntaxhighlight lang="bash">
+
cd rk3399-android-10
+
./build-nanopc-t4.sh -F -O -M
+
</syntaxhighlight>
+
编译成功完成后,OTA更新相关的包位于目录 rockdev/otapackage/ ,请保留此目录。<br />
+
当完成了某些修改后使用参数-O 再次编译将会生成ota-update-XXXXXXXX.zip,这是增量更新包。<br />
+
OTA Packages依赖BUILD_NUMBER, 只有它有变化才会生成增量更新包,缺省的生成规则请查看build-nanopc-t4.sh。<br />
+
修改 device/rockchip/rk3399/nanopc-t4/BoardConfig.mk 中 <br />
+
<syntaxhighlight lang="bash">
+
BOARD_USES_AB_IMAGE := false
+
</syntaxhighlight>
+
可禁用 A/B 特性,然后重新编译(包括u-boot和android)。<br />
+
=====更新系统为自已编译的Image=====
+
编译完成后,image文件会存放在Android10源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 {{{1}}}上: <br />
+
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区; <br />
+
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 android10 目录; <br />
+
3) 将SD卡插入{{{1}}},重新烧写Andorid系统即可; <br />
+
也可参考这个github仓库的方法来更新:[https://github.com/friendlyarm/sd-fuse_rk3399 sd-fuse_rk3399]<br />
+
烧写Android 10时EFlasher 需要 v1.3 或以上版本,通过Type-C烧写时请使用rockchip提供的工具AndroidTool v2.71 或Linux_Upgrade_Tool v1.49 。
+
 
+
====编译Android8.1====
+
=====下载Android8.1源代码=====
+
有以下两种途径获取 Android8.1 的源代码,都需要联网:
+
* '''使用网盘里的git repo压缩包'''
+
网盘下载地址: [http://download.friendlyelec.com/{{#replace:{{#replace:{{BASEPAGENAME}}| |}}|/zh|}} 点击进入]<br />
+
文件位于网盘的以下路径:sources/rk3399-android-8.1.git-YYYYMMDD.tgz (YYYYMMDD表示打包的日期)<br />
+
从网盘中获取的压缩包在解压之后,需要执行一下 sync.sh 脚本,会从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仓库'''
+
{{{1}}} 源代码托管在 gitlab 上,使用以下命令进行下载:
+
<syntaxhighlight lang="bash">
+
git clone https://gitlab.com/friendlyelec/rk3399-android-8.1 --depth 1 -b master
+
</syntaxhighlight>
+
 
+
=====编译并生成Image文件=====
+
使用以下命令编译:
+
<syntaxhighlight lang="bash">
+
cd rk3399-android-8.1
+
./build-nanopc-t4.sh -F -M
+
</syntaxhighlight>
+
 
+
=====更新系统为自已编译的Image=====
+
编译完成后,image文件会存放在Android8.1源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 {{{1}}}上: <br />
+
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区; <br />
+
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 android8 目录; <br />
+
3) 将SD卡插入{{{1}}},重新烧写Andorid系统即可; <br />
+
也可参考这个github仓库的方法来更新:[https://github.com/friendlyarm/sd-fuse_rk3399 sd-fuse_rk3399]<br />
+
 
+
====编译Android7源代码====
+
=====下载Android7源代码=====
+
有以下两种途径获取 Android7 的源代码,都需要联网:
+
* '''使用网盘里的git repo压缩包'''
+
网盘下载地址: [http://download.friendlyelec.com/{{#replace:{{#replace:{{BASEPAGENAME}}| |}}|/zh|}}  点击进入]<br />
+
文件位于网盘的以下路径:sources/rk3399-android-7.git-YYYYMMDD.tgz (YYYYMMDD表示打包的日期)<br />
+
从网盘中获取的 repo 压缩包在解压之后,需要执行一下 sync.sh 脚本,会从gitlab上拉取最新的代码:
+
<syntaxhighlight lang="bash">
+
tar xvzf /path/to/netdisk/sources/rk3399-android-7.git-20181228.tgz
+
cd rk3399-nougat
+
./sync.sh
+
</syntaxhighlight>
+
* '''直接克隆git仓库'''
+
{{{1}}} 源代码托管在 gitlab 上,使用以下命令进行下载:
+
<syntaxhighlight lang="bash">
+
git clone https://gitlab.com/friendlyelec/rk3399-nougat --depth 1 -b nanopc-t4-nougat
+
</syntaxhighlight>
+
 
+
=====编译并生成Image文件=====
+
使用以下命令编译:
+
<syntaxhighlight lang="bash">
+
cd rk3399-nougat
+
./build-nanopc-t4.sh -F -M
+
</syntaxhighlight>
+
 
+
=====更新系统为自已编译的Image=====
+
编译完成后,image文件会存放在Android7源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 {{{1}}}上: <br />
+
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区; <br />
+
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的  nougat 目录; <br />
+
3) 将SD卡插入{{{1}}},重新烧写Andorid系统即可; <br />
+
也可参考这个github仓库的方法来更新:[https://github.com/friendlyarm/sd-fuse_rk3399 sd-fuse_rk3399]<br />
+

Revision as of 05:34, 30 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
buildroot linux v5.10.y u-boot
v2017.09
11.3-aarch64 GPT sd-fuse nanopi5-v5.10.y_opt nanopi5_linux_defconfig nanopi5-v2017.09 rk3568_defconfig
friendlycore-focal-arm64
debian-bullseye-core-arm64
debian-bullseye-desktop-arm64
debian-bullseye-minimal-arm64
debian-buster-desktop-arm64
friendlywrt21 nanopi5_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.

1.2 Compile kernel linux-v5.10.y

Download the source code and compile as follows:

git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi5-v5.10.y_opt kernel-rockchip
cd kernel-rockchip
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
touch .scmversion
# Configuring the Kernel
# Option1: Load Linux system configuration
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi5_linux_defconfig
# Option2: Load FriendlyWrt system configuration
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi5_linux_defconfig friendlywrt.config
# Launch configuration interface
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig
# Compiling Kernel
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi5-images -j$(nproc)
# Compiling the driver 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)

You will get the following file:

kernel.img resource.img boot.img This img is deprecated 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 v2017.09

Download the source code and compile as follows:

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

After the compilation, the following files will be generated:

uboot.img rk356x_spl_loader_v1.15.112.bin (Before packaging, you need to rename it to MiniLoaderAll.bin)

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

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

1.4.1 Download to the installed system

Since the RK3568's OS uses GPT partitions by default, you can use the dd command to write the image file to the partition, the device nodes for SD card and eMMC are shown below:

  • 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

as 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, 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:

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

To update new driver modules, copy the newly compiled driver modules to the appropriate directory under /lib/modules.

1.4.2 How to create a new OS image file

To create a new OS image file, you need to use the "sd-fuse" packaging tool.

"sd-fuse" is a collection of scripts that can be used to create bootable SD card images for FriendlyElec boards. Its main features include:

  • Creation of root filesystem images from a directory
  • Building of bootable SD card images
  • Simple compilation of kernel, U-Boot, and third-party drivers

Please click on the following link to find out more:

Kernel version Build toolset
linux v5.10.y
sd-fuse_rk3568
1.4.3 USB flashing
1.4.3.1 Linux

To flash U-Boot and kernel using the "upgrade_tool" tool, please use the following command:

sudo upgrade_tool ul MiniLoaderAll.bin
sudo upgrade_tool di -p parameter.txt
sudo upgrade_tool di uboot uboot.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 operating systems (Linux_Upgrade_Tool).