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)
装好系统后,先更新软件源:
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,然后才能下载。流程大概是:
- 访问瑞萨官网,注册账号
- 提交R-Car开发板申请(比如R-Car H3 Starter Kit)
- 签NDA协议
- 获取下载权限
拿到权限后,你会得到一个下载链接。里面通常包含:
- 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
~/.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个多小时。别急,后面增量构建就快多了。
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 本章知识体系
下面这张图把开发环境搭建的整个流程串起来了。你可以把它当作一个检查清单:
这张图从左到右、从上到下,就是搭建环境的完整路径。每一步都有坑,但只要你按顺序来,基本不会出大问题。
oe-check-env确认环境没问题,再继续下一步。这样出了问题,你能快速定位到是哪一步。