第一章 课程导学与环境准备
各位同学好,我是你们的嵌入式系统讲师。做瑞芯微平台开发这些年,从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,中间要经过哪些环节?