4. R-Car开发环境搭建

R-Car平台的AI推理与边缘计算开发,第一步不是写模型代码,而是把“宿主机—工具链—目标板”这条链路打通。R-Car SoC(如R-Car H3/M3/V3系列)运行的是基于Yocto构建的嵌入式Linux,应用与推理程序通常在x86_64 Ubuntu主机上交叉编译,再部署到目标板。本节围绕Yocto/BSP构建、交叉编译工具链、SDK安装、目标板启动以及串口与网络调试通道建立,给出一条可复现的环境搭建路径。

一、整体链路与目录规划

在动手前先明确各角色的位置:宿主机负责构建与编译,Yocto产出BSP镜像和SDK,SDK内含交叉工具链与sysroot,目标板通过SD卡或eMMC启动,串口提供早期控制台,网络提供文件传输与远程登录。建议在宿主机上规划统一工作目录,例如:

~/rcar/
├── bsp/          # Yocto BSP源码(poky + meta-renesas)
├── build/        # bitbake构建输出
├── sdk/          # 安装后的交叉SDK
└── images/       # 最终烧录镜像

下面这张图给出从宿主机到目标板的完整数据流与调试通道关系,后续各步骤都对应图中的某一段链路。

宿主机(x86_64 Ubuntu) Yocto BSP 源码 poky + meta-renesas + meta-oe bitbake 构建 core-image-weston / bsp 交叉SDK(.sh自解压) aarch64-poky-linux-gcc + sysroot 应用/推理程序编译 CMake + OpenCV / NPU库 镜像 + 可执行文件 目标板(R-Car SoC) BootROM → U-Boot 从SD/eMMC加载 Linux Kernel + DTB r8a779xx-*.dtb RootFS(Yocto镜像) systemd + 推理运行时 应用运行 / NPU推理 /opt/app 部署 运行结果 / 日志 烧录/部署 串口调试 115200 8N1 网络调试 SSH / NFS / TFTP 宿主机负责构建与编译,目标板负责启动与运行,串口/网络构成双向调试通道

二、Yocto/BSP构建

Renesas为R-Car提供Yocto BSP层(meta-renesas),通常与poky、meta-openembedded配合使用。以R-Car H3为例,典型流程如下:

# 1. 获取poky与BSP层
git clone git://git.yoctoproject.org/poky -b kirkstone
git clone https://github.com/renesas-rcar/meta-renesas.git -b kirkstone

# 2. 初始化构建环境
cd poky
source oe-init-build-env ../build

# 3. 在conf/bblayers.conf中加入meta-renesas
# 4. 设置MACHINE
echo 'MACHINE = "r8a77951-salvator-x"' >> conf/local.conf

# 5. 构建核心镜像
bitbake core-image-weston

构建过程中需要关注几个关键点:MACHINE必须与目标板型号严格对应,否则DTB与驱动不匹配;local.conf中可设置DL_DIR与SSTATE_DIR复用下载与缓存,显著缩短二次构建时间;首次构建通常需要数小时,建议使用多核并行(BB_NUMBER_THREADS、PARALLEL_MAKE)。构建完成后,在tmp/deploy/images/<machine>/下可得到内核、DTB、rootfs及完整SD卡镜像(如.wic或.sdcard)。

若构建报错,优先检查bblayers.conf中层路径是否正确、MACHINE是否拼写错误,以及是否缺少meta-oe依赖层。日志位于tmp/work/.../temp/log.do_*,是定位问题的第一手材料。

三、交叉编译工具链与SDK安装

Yocto可导出独立SDK,内含交叉编译器、sysroot、环境脚本,使应用开发脱离bitbake。生成命令:

bitbake core-image-weston -c populate_sdk
# 产物:tmp/deploy/sdk/poky-glibc-x86_64-core-image-weston-*.sh

在宿主机安装:

chmod +x poky-glibc-x86_64-core-image-weston-*.sh
./poky-glibc-x86_64-core-image-weston-*.sh -d ~/rcar/sdk
source ~/rcar/sdk/environment-setup-aarch64-poky-linux

安装后,$CC、$CXX、$SDKTARGETSYSROOT等变量自动就绪。验证工具链:

aarch64-poky-linux-gcc -v
# 应显示目标为aarch64-poky-linux,sysroot指向SDK内路径

编译应用时推荐使用CMake,并在toolchain file中引用SDK环境,避免手工拼接--sysroot。若链接NPU推理库(如Renesas提供的加速库),需将对应头文件与库放入sysroot或通过-I/-L显式指定。

四、目标板启动与镜像烧录

将构建出的SD卡镜像写入存储介质:

sudo dd if=core-image-weston-*.wic of=/dev/sdX bs=4M conv=fsync
sync

插入目标板,设置启动模式(拨码开关选择SD启动),上电。BootROM加载U-Boot,U-Boot读取内核与DTB,挂载rootfs,最终进入登录提示。若启动失败,常见原因包括:镜像未正确写入、DTB与板型不匹配、电源或DDR初始化异常。此时串口控制台是唯一可靠的观察窗口。

五、串口与网络调试通道建立

串口通道:R-Car开发板通常引出UART调试口,参数为115200-8N1。宿主机连接USB转串口后:

sudo picocom -b 115200 /dev/ttyUSB0
# 或
sudo minicom -D /dev/ttyUSB0 -b 115200

串口可观察U-Boot打印、内核启动日志、登录提示,也可在U-Boot阶段中断进入命令行,修改bootargs或切换启动介质。这是排障时最先建立的通道。

网络通道:目标板启动后,通过以太网或USB网卡接入。若使用DHCP,目标板自动获取IP;若静态配置,可在rootfs中设置。宿主机侧常用三种方式:

  • SSH:ssh root@<board_ip>,用于远程登录与执行命令。
  • SCP/rsync:scp app root@<board_ip>:/opt/app/,用于部署可执行文件与模型。
  • NFS:宿主机导出目录,目标板挂载,便于快速迭代而不反复烧录。

若目标板与宿主机直连,可给宿主机网卡配置同网段静态IP(如192.168.1.10/24),目标板设为192.168.1.20/24,再用ping验证连通性。NFS挂载示例:

# 宿主机
sudo exportfs -o rw,no_root_squash 192.168.1.20:/srv/nfs/rootfs
# 目标板
mount -t nfs -o nolock 192.168.1.10:/srv/nfs/rootfs /mnt
串口与网络通道应在烧录镜像前就准备好。很多“板子起不来”的问题,实际是串口未连接或参数错误导致无法观察日志;而网络不通则会让部署与调试效率大幅下降。

六、环境验证闭环

完成上述步骤后,建议按以下顺序做一次闭环验证:串口能看到U-Boot与内核日志 → 目标板正常进入系统 → 网络可ping通宿主机 → SSH可登录 → 交叉编译一个简单程序并scp到目标板运行 → 输出符合预期。若全部通过,说明Yocto/BSP、工具链、SDK、启动与调试通道均已就绪,可以进入后续的AI推理与边缘计算开发。

环节关键产物/命令验证方式
Yocto构建core-image-weston、.wic镜像deploy/images下产物存在
SDK安装environment-setup-aarch64-poky-linuxaarch64-poky-linux-gcc -v
烧录启动dd写入SD卡串口出现登录提示
串口调试picocom /dev/ttyUSB0可交互、可中断U-Boot
网络调试ssh / scp / nfsping通、可传文件

这套环境是后续所有R-Car AI推理实验的基础。建议将上述命令整理为脚本或笔记,便于在新主机或新板卡上快速复现。