2. R-Car平台基础

做嵌入式开发,第一关就是搭环境。很多人觉得这事简单,照着文档敲命令就行。但我在项目里见过太多人卡在这一步——不是缺包就是版本不对,折腾一整天连个helloworld都编译不过去。

这一章,我带你把R-Car的开发环境从头捋一遍。从Linux主机准备,到BSP源码获取,再到交叉编译链和Yocto的入门。每一步我都会把坑点指出来。

2.1 Linux主机环境配置

先说主机。我个人习惯用Ubuntu 20.04 LTS,64位版本。为什么选这个?因为瑞萨官方文档和Yocto社区对这个版本支持最好。你非要用22.04或者Debian也行,但有些包的版本会有差异,到时候出问题你得自己排查。

硬件方面,我建议至少给虚拟机分配:

  • CPU:4核以上(编译时能跑满)
  • 内存:8GB起步,16GB更稳
  • 磁盘:200GB空闲空间(Yocto构建一次能吃掉80-120GB)
注意: 磁盘空间是很多人忽略的坑。我第一次用Yocto构建R-Car BSP时,只给了80GB,结果编译到一半磁盘满了。后来我学乖了,直接分了300GB。

装好系统后,先更新软件源:

sudo apt update
sudo apt upgrade -y

然后安装基础开发工具包。这里有个清单,我直接给你:

sudo apt install -y \
  build-essential \
  chrpath \
  cpio \
  debianutils \
  diffstat \
  gawk \
  git \
  iputils-ping \
  libegl1-mesa \
  libsdl1.2-dev \
  libssl-dev \
  python3 \
  python3-pip \
  python3-pexpect \
  python3-git \
  python3-jinja2 \
  xz-utils \
  zstd

嗯,这里要注意。不同Ubuntu版本需要的包名可能不一样。比如libsdl1.2-dev在22.04里可能叫libsdl1.2-compat-dev。我建议你装完后跑一遍Yocto的oe-check-env脚本,它会告诉你缺什么。

2.2 R-Car BSP源码获取

R-Car的BSP源码不是公开的。你得先注册瑞萨的R-Car合作伙伴门户,签NDA,然后才能下载。流程大概是:

  1. 访问瑞萨官网,注册账号
  2. 提交R-Car开发板申请(比如R-Car H3 Starter Kit)
  3. 签NDA协议
  4. 获取下载权限

拿到权限后,你会得到一个下载链接。里面通常包含:

  • BSP包:核心源码,包含内核、驱动、设备树
  • 图形驱动包:GPU、Wayland/Weston相关
  • 多媒体包:编解码器、ISP驱动
  • Yocto meta层:用于构建系统的配方文件
我的经验: 下载时别用浏览器直接下,容易断。我习惯用wget -c或者aria2c,支持断点续传。R-Car的BSP包动辄几个GB,网络不好一次下不完很正常。

下载完成后,解压到工作目录:

mkdir -p ~/rcar_workspace
cd ~/rcar_workspace
tar -xvf rcar_bsp_xxx.tar.gz

解压后你会看到类似这样的目录结构:

rcar_workspace/
├── meta-rcar-gen3
├── meta-renesas
├── poky
├── bitbake
└── README.txt

这个结构其实就是Yocto项目的标准布局。poky是核心构建系统,meta-rcar-gen3和meta-renesas是瑞萨的板级支持层。

2.3 交叉编译工具链安装

交叉编译工具链,说白了就是让你在x86的PC上编译出ARM架构能跑的代码。R-Car H3用的是Cortex-A57/A53,64位ARMv8架构。

安装方式有两种:

方式 说明 适用场景
Yocto SDK 由Yocto构建系统自动生成 与BSP版本完全匹配,推荐
Linaro GCC 从Linaro官网下载预编译包 快速验证、独立开发

我个人推荐用Yocto SDK。为什么?因为版本对齐。我曾经用Linaro 7.5编译的驱动模块,加载到Yocto构建的内核上,直接报version magic mismatch。折腾了两天才发现是工具链版本不一致。

安装Yocto SDK的步骤:

# 先完成一次Yocto构建(后面会讲)
cd ~/rcar_workspace
source poky/oe-init-build-env build
bitbake core-image-minimal -c populate_sdk

# 构建完成后,SDK安装包在
ls tmp/deploy/sdk/*.sh

# 安装
./poky-glibc-x86_64-core-image-minimal-aarch64-toolchain-*.sh

安装完成后,配置环境变量:

source /opt/poky/3.1.31/environment-setup-aarch64-poky-linux

验证一下:

$ aarch64-poky-linux-gcc --version
aarch64-poky-linux-gcc (GCC) 9.3.0
关键点: 每次打开新终端,都要重新source这个环境变量脚本,否则编译器找不到。我习惯把它写到~/.bashrc里,省得每次手动敲。

2.4 Yocto构建系统入门

Yocto是什么?简单说,它是一个能让你定制Linux发行版的框架。你给它源码、配置、配方,它给你生成完整的系统镜像、内核、文件系统、工具链。

对于R-Car开发,Yocto是绕不开的。瑞萨的BSP就是基于Yocto组织的。你想想看,一个智能座舱系统里,有仪表盘、中控、后排娱乐,每个屏幕可能跑不同的应用——Yocto能帮你精确控制每个组件的版本和配置。

核心概念就几个:

  • Recipe(配方):描述怎么下载、配置、编译、安装一个软件包
  • Layer(层):一组配方的集合,按功能划分
  • Machine(机器):目标硬件平台,比如rcar-h3-salvator-x
  • Image(镜像):最终生成的系统,比如core-image-weston

第一次构建,我建议你先跑一个最小镜像试试水:

cd ~/rcar_workspace
source poky/oe-init-build-env build

# 配置目标机器
echo 'MACHINE = "rcar-h3-salvator-x"' >> conf/local.conf

# 开始构建
bitbake core-image-minimal

第一次构建会下载所有源码包,编译工具链,然后构建整个系统。在我的机器上(8核,16GB内存),第一次大概跑了3个多小时。别急,后面增量构建就快多了。

避坑指南: 我曾经在构建过程中按了Ctrl+C,结果下次再跑bitbake时各种报错。后来发现是临时文件没清理干净。遇到这种情况,执行bitbake -c cleanall <package>或者直接删掉tmp/目录重来。

构建完成后,镜像文件在:

tmp/deploy/images/rcar-h3-salvator-x/core-image-minimal-rcar-h3-salvator-x.tar.bz2

这个文件就是完整的根文件系统,可以直接烧录到SD卡或eMMC上。

2.5 本章知识体系

下面这张图把开发环境搭建的整个流程串起来了。你可以把它当作一个检查清单:

R-Car开发环境搭建流程 R-Car 开发环境搭建流程 Linux主机准备 依赖包安装 磁盘空间检查 R-Car BSP源码获取(注册/NDA/下载) 交叉编译工具链安装(Yocto SDK / Linaro GCC) Yocto构建系统(配置Machine / bitbake构建) 系统镜像 + SDK + 根文件系统 提示:第一次构建耗时较长(2-4小时),建议在空闲时段执行,并确保网络稳定

这张图从左到右、从上到下,就是搭建环境的完整路径。每一步都有坑,但只要你按顺序来,基本不会出大问题。

我的建议: 第一次搭建时,每完成一步就做个标记。比如主机装完依赖包后,跑一下oe-check-env确认环境没问题,再继续下一步。这样出了问题,你能快速定位到是哪一步。