第一章 课程导学与环境准备

各位同学好,我是你们的嵌入式系统讲师。做瑞芯微平台开发这些年,从RK3288一路折腾到RK3588,踩过的坑确实不少。今天咱们开始第一讲,先把基础环境搭好。环境搭不好,后面调试起来会非常痛苦——我当年刚入行时就吃过这个亏。

1.1 RK3568与RK3588硬件平台概览

先说说这两款芯片。RK3568和RK3588是瑞芯微目前最主流的两个平台。我个人习惯把它们看作“中端主力”和“旗舰担当”。

特性 RK3568 RK3588
CPU架构 4×Cortex-A55 4×Cortex-A76 + 4×Cortex-A55
GPU Mali-G52 EE Mali-G610 MP4
NPU算力 1 TOPS 6 TOPS
内存支持 LPDDR4/LPDDR4X LPDDR4/LPDDR5
视频编解码 4K@60fps解码 8K@30fps解码
典型应用 工业平板、边缘网关 AI盒子、高端平板

说白了,RK3568适合对成本敏感、功耗要求高的场景。RK3588则适合需要高性能AI推理和多路视频处理的场合。我在做智能网关项目时用过RK3568,当时客户要求7×24小时稳定运行,这颗芯片的表现确实不错。

核心要点:U-Boot移植时,RK3588的启动流程比RK3568多了一个ATF(ARM Trusted Firmware)阶段,这个差异会在后续章节详细展开。

1.2 U-Boot源码获取与分支选择

源码从哪来?官方推荐两个途径:

  • 瑞芯微官方GitHub仓库:https://github.com/rockchip-linux/u-boot
  • U-Boot主线仓库:https://source.denx.de/u-boot/u-boot.git

分支怎么选?我建议直接拉瑞芯微的 next-dev 分支。为什么?因为这个分支集成了最新的板级支持包(BSP),很多坑已经被官方填平了。我曾经试过用主线U-Boot去适配RK3568,结果发现DDR初始化代码不兼容,折腾了两天才搞定。

# 克隆瑞芯微U-Boot仓库
git clone https://github.com/rockchip-linux/u-boot.git
cd u-boot

# 切换到next-dev分支
git checkout next-dev

# 查看可用的板级配置
ls configs/ | grep rk35

小技巧:如果你用的是RK3588,记得检查 configs/evb_rk3588_defconfig 这个文件。瑞芯微的EVB板配置是最完整的,移植到自己的板子时,拿这个做模板最省事。

1.3 交叉编译工具链安装

交叉编译工具链,说白了就是让PC能编译出ARM架构上跑的程序。我推荐用ARM官方提供的 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu 版本。为什么是10.3?因为瑞芯微的BSP对这个版本验证最充分。

# 下载并解压工具链
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
tar -xf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz

# 设置环境变量(建议写入~/.bashrc)
export CROSS_COMPILE=aarch64-none-linux-gnu-
export PATH=$PATH:/path/to/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin

# 验证安装
aarch64-none-linux-gnu-gcc --version

注意:不要用系统自带的gcc去编译U-Boot!我见过有人直接用 gcc 编译,结果链接阶段报了一堆莫名其妙的错误。交叉编译工具链必须单独安装。

1.4 基础开发环境搭建

环境搭建这块,我按“最小可用”原则来。先搭串口,再搭TFTP和NFS。这三样配齐了,后面调试才能跑起来。

1.4.1 串口环境配置

串口是嵌入式开发的“生命线”。没有串口,你连U-Boot启动到哪一步了都不知道。我习惯用 minicom,轻量又好用。

# 安装minicom
sudo apt install minicom

# 配置串口参数(以USB转串口为例)
minicom -s
# 进入设置:
# 串口设备: /dev/ttyUSB0
# 波特率: 1500000(RK3588默认)
# 数据位: 8
# 停止位: 1
# 流控: 无

避坑指南:RK3588的默认串口波特率是1500000,不是传统的115200。我第一次调试RK3588时,用115200连了半天没反应,还以为是板子坏了。后来查手册才发现波特率不对。

1.4.2 TFTP服务器搭建

TFTP用来通过网络下载内核和设备树。调试阶段特别有用,不用反复烧写SD卡或eMMC。

# 安装TFTP服务器
sudo apt install tftpd-hpa

# 配置TFTP目录
sudo mkdir -p /srv/tftp
sudo chmod 777 /srv/tftp

# 修改配置文件 /etc/default/tftpd-hpa
# TFTP_DIRECTORY="/srv/tftp"
# TFTP_OPTIONS="--secure --create"

# 重启服务
sudo systemctl restart tftpd-hpa

1.4.3 NFS服务器搭建

NFS用于挂载根文件系统。调试驱动时,把文件系统放在NFS上,改完代码直接重启板子就能看到效果,不用反复烧写。

# 安装NFS服务器
sudo apt install nfs-kernel-server

# 创建共享目录
sudo mkdir -p /srv/nfs/rootfs
sudo chmod 777 /srv/nfs/rootfs

# 配置 /etc/exports,添加:
# /srv/nfs/rootfs *(rw,sync,no_subtree_check,no_root_squash)

# 重启服务
sudo systemctl restart nfs-kernel-server

关键配置:NFS的 no_root_squash 选项一定要加。不加的话,板子上root用户对文件系统的写操作会被映射成nobody用户,到时候你连 touch 命令都跑不了。

1.5 本章知识体系总览

下面这张图把第一章的核心内容串起来了。你想想看,从拿到一块空板子到能跑U-Boot,中间要经过哪些环节?

第一章 知识体系总览 硬件平台选型 U-Boot源码获取 交叉编译工具链 开发环境搭建 串口调试 TFTP下载 NFS挂载 U-Boot可编译运行 核心依赖关系 硬件 → 源码 → 工具链 → 环境 → 编译运行 缺一不可