本文面向在 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 配置
十二、建议开发流程
- 在 Ubuntu 上完成所有编译
- 通过 scp/adb 推送到开发板
- 调试 dts / 驱动
- 循环修改 → 编译 → 测试
十三、总结
RK3568 开发环境的核心是:
- 交叉编译工具链
- 目标系统 sysroot
- 内核 / 设备树源码
一旦这三部分打通,你的 LVDS 刷新率、驱动修改、系统开发都会变得顺畅。