RK3568 交叉编译环境搭建指南(Ubuntu版)

本文面向在 Ubuntu 系统上进行 RK3568 嵌入式开发的工程师,详细介绍如何从零开始搭建完整的交叉编译环境,适用于内核编译、设备树修改(如 LVDS)、应用开发等场景。


一、环境说明

  • 主机系统:Ubuntu 20.04 / 22.04
  • 目标平台:RK3568(ARM64 架构)
  • 开发内容:内核 / 驱动 / 设备树 / 应用程序

二、安装基础依赖

sudo apt update
sudo apt install -y \
    build-essential \
    gcc \
    g++ \
    make \
    cmake \
    git \
    vim \
    wget \
    unzip \
    rsync \
    bc \
    bison \
    flex \
    libssl-dev \
    libncurses5-dev \
    device-tree-compiler \
    pkg-config

说明:这些工具用于支持 kernel、u-boot、应用程序等编译。


三、安装交叉编译工具链

1. 下载工具链

wget https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/gcc-linaro-*-x86_64_aarch64-linux-gnu.tar.xz

2. 解压安装

tar -xf gcc-linaro-*.tar.xz
sudo mv gcc-linaro-* /opt/rk3568-toolchain

3. 配置环境变量

echo 'export TOOLCHAIN=/opt/rk3568-toolchain' >> ~/.bashrc
echo 'export PATH=$TOOLCHAIN/bin:$PATH' >> ~/.bashrc
echo 'export CROSS_COMPILE=aarch64-linux-gnu-' >> ~/.bashrc
echo 'export ARCH=arm64' >> ~/.bashrc

source ~/.bashrc

4. 验证工具链

aarch64-linux-gnu-gcc -v

四、获取 sysroot(关键步骤)

sysroot 是目标板运行环境的库集合,必须从开发板获取。

方法一:使用 rsync(推荐)

mkdir -p ~/rk3568/sysroot

rsync -avz root@开发板IP:/lib ~/rk3568/sysroot/
rsync -avz root@开发板IP:/usr ~/rk3568/sysroot/

方法二:使用 scp

scp -r root@开发板IP:/lib ~/rk3568/sysroot/
scp -r root@开发板IP:/usr ~/rk3568/sysroot/

五、配置编译环境变量

export SYSROOT=~/rk3568/sysroot
export PKG_CONFIG_SYSROOT_DIR=$SYSROOT
export PKG_CONFIG_PATH=$SYSROOT/usr/lib/pkgconfig

六、测试交叉编译

1. 编写测试程序

#include <stdio.h>

int main() {
    printf("Hello RK3568\\n");
    return 0;
}

2. 编译

aarch64-linux-gnu-gcc hello.c \
  --sysroot=$SYSROOT \
  -o hello

3. 验证

file hello

输出应包含:

ELF 64-bit LSB executable, ARM aarch64

七、内核编译

1. 获取源码

git clone https://github.com/rockchip-linux/kernel.git
cd kernel

2. 配置

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_defconfig

3. 编译

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)

八、设备树(DTS)编译

用于你当前的 LVDS 刷新率修改。

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs

生成文件路径:

arch/arm64/boot/dts/rockchip/*.dtb

九、U-Boot 编译

git clone https://github.com/rockchip-linux/u-boot.git
cd u-boot

make CROSS_COMPILE=aarch64-linux-gnu- rk3568_defconfig
make CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)

十、CMake 项目交叉编译

toolchain.cmake 示例

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

set(CMAKE_SYSROOT $ENV{SYSROOT})

编译

cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ..
make

十一、常见问题

1. GLIBC 不匹配

GLIBC_2.xx not found

解决:使用开发板 sysroot

2. 找不到动态库

error while loading shared libraries

解决:

export LD_LIBRARY_PATH=/lib:/usr/lib

3. 编译失败(头文件缺失)

原因:sysroot 不完整

4. LVDS 不生效

  • 检查 dts timing 参数
  • 检查 clock 设置
  • 检查 panel 配置

十二、建议开发流程

  1. 在 Ubuntu 上完成所有编译
  2. 通过 scp/adb 推送到开发板
  3. 调试 dts / 驱动
  4. 循环修改 → 编译 → 测试

十三、总结

RK3568 开发环境的核心是:

  • 交叉编译工具链
  • 目标系统 sysroot
  • 内核 / 设备树源码

一旦这三部分打通,你的 LVDS 刷新率、驱动修改、系统开发都会变得顺畅。


发表回复