3、Adaptive平台开发环境搭建:Linux基础环境、QEMU仿真、Yocto构建Adaptive镜像

说实话,很多刚接触Adaptive平台的朋友,第一步就被环境搭建给卡住了。我当年第一次搭Yocto的时候,也是折腾了好几天才跑通。这一章,我就把那些坑和经验一起分享给你。

3.1 Linux基础环境准备

Adaptive平台开发,说白了离不开Linux。我个人习惯用Ubuntu 20.04 LTS,稳定,社区支持也好。你想想看,如果基础环境没弄好,后面编译个镜像动不动报错,那得多闹心。

3.1.1 系统要求

项目 最低配置 推荐配置
CPU 4核 8核及以上
内存 8GB 16GB+
磁盘 100GB 200GB SSD
网络 宽带 稳定宽带

嗯,这里要注意:磁盘空间千万别省。Yocto构建一次,下载的源码和中间产物轻松吃掉50GB以上。我在项目中遇到过同事因为磁盘满了,构建到一半失败,白白浪费半天时间。

3.1.2 安装基础依赖

先更新包管理器,然后安装必要的工具链:

sudo apt update
sudo apt install -y \
    gawk wget git diffstat unzip texinfo \
    gcc build-essential chrpath socat cpio \
    python3 python3-pip python3-pexpect \
    xz-utils debianutils iputils-ping \
    libsdl1.2-dev xterm libncurses-dev \
    libssl-dev libgmp-dev libmpfr-dev \
    libmpc-dev zlib1g-dev

我建议你装完后再跑一遍 sudo apt build-essential,确保编译环境完整。曾经有一次我漏装了 chrpath,结果Yocto在打包阶段报了个莫名其妙的错,排查了好久。

3.1.3 配置Git和Repo

Adaptive平台源码管理用的是Git + Repo。配置一下你的Git信息:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global color.ui auto

然后安装Repo工具:

mkdir -p ~/.local/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.local/bin/repo
chmod a+x ~/.local/bin/repo
export PATH=$PATH:~/.local/bin
小技巧:export PATH=$PATH:~/.local/bin 加到 ~/.bashrc 里,这样每次打开终端就不用重新设了。

3.2 QEMU仿真环境搭建

没有硬件开发板怎么办?用QEMU仿真。我在项目早期阶段,全靠QEMU跑Adaptive平台验证功能。说白了,QEMU就是你的虚拟开发板。

3.2.1 安装QEMU

sudo apt install -y qemu-system-arm qemu-system-aarch64

验证安装:

qemu-system-aarch64 --version

如果能看到版本号,说明装好了。我习惯用aarch64版本,因为Adaptive平台主要面向64位ARM架构。

3.2.2 准备内核和文件系统

你需要一个内核镜像和一个根文件系统。可以从Yocto构建产物里拿,也可以直接下载预编译的:

wget https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu-aarch64/Image
wget https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu-aarch64/grub-efi.tar.gz
注意: 这些链接可能会变。建议去Linaro官网找最新的发布版本。我曾经因为用了过时的内核,导致Adaptive平台的某些AUTOSAR服务启动失败。

3.2.3 启动QEMU仿真

启动命令如下:

qemu-system-aarch64 \
    -machine virt \
    -cpu cortex-a57 \
    -smp 4 \
    -m 2G \
    -kernel Image \
    -append "console=ttyAMA0 root=/dev/vda rw" \
    -drive file=rootfs.ext4,format=raw,id=hd0 \
    -device virtio-blk-device,drive=hd0 \
    -netdev user,id=net0 \
    -device virtio-net-device,netdev=net0 \
    -nographic

启动后,你会看到一个Linux终端。这就是你的虚拟Adaptive平台运行环境。

核心要点: QEMU仿真可以帮你提前验证SOA服务的部署和通信,不用等硬件板卡回来。我在项目中就用它提前调通了SOME/IP和DDS的通信链路。

3.3 Yocto构建Adaptive镜像

Yocto是构建嵌入式Linux系统的利器。Adaptive平台的AUTOSAR运行时,就是通过Yocto定制出来的。说实话,Yocto的学习曲线有点陡,但一旦掌握了,你会发现它真的很强大。

3.3.1 获取Adaptive平台Yocto层

先创建一个工作目录,然后用Repo同步代码:

mkdir adaptive-yocto
cd adaptive-yocto
repo init -u https://github.com/Adaptive-AUTOSAR/adaptive-platform-manifest.git -b master
repo sync

这个过程会下载所有必要的Yocto层和Adaptive平台源码。网速慢的话,可能要等半小时以上。我建议你找个网络好的时间段来做这件事。

3.3.2 配置构建环境

进入源码目录,初始化Yocto构建环境:

cd sources/poky
source oe-init-build-env ../../build

这会创建一个 build 目录,并自动切换到该目录。然后编辑 conf/local.conf

# 目标机器
MACHINE ??= "qemuarm64"

# 并行编译线程数
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"

# 添加Adaptive平台层
BBLAYERS += " \
    ${BSPDIR}/sources/meta-adaptive \
    ${BSPDIR}/sources/meta-adaptive-autosar \
"
经验之谈: 线程数不要超过你CPU物理核心数的1.5倍。设太大反而会因为上下文切换过多而变慢。我一般设为核心数+2。

3.3.3 构建Adaptive镜像

执行构建命令:

bitbake adaptive-platform-image

第一次构建会下载大量源码包,编译工具链和所有组件。这个过程可能需要2-4小时,取决于你的机器性能。你可以去喝杯咖啡,或者看看文档。

构建完成后,镜像文件在 tmp/deploy/images/qemuarm64/ 目录下:

  • adaptive-platform-image-qemuarm64.ext4 — 根文件系统镜像
  • Image — 内核镜像
  • modules.tgz — 内核模块

3.3.4 验证构建结果

用QEMU启动你刚构建的镜像:

runqemu qemuarm64 nographic

如果一切顺利,你会看到Adaptive平台启动,并进入一个包含AUTOSAR运行时的Linux系统。你可以检查一下关键服务是否运行:

ps -ef | grep adaptive
systemctl status adaptive-platform
验证要点: 确保 adaptive-platform 服务状态是 active (running)。如果没启动,检查 /var/log/adaptive-platform.log 看错误信息。

3.4 常见问题与避坑指南

搭建环境的过程中,有几个坑我踩过,分享给你:

  • 磁盘空间不足: 构建过程中临时文件会占用大量空间。我建议至少留80GB空闲。如果不够,可以设置 DL_DIRSSTATE_DIR 到其他分区。
  • 网络超时: Yocto下载源码时经常因为网络问题失败。配置一个国内的镜像源会好很多。我在 local.conf 里加了 PREMIRRORS 指向清华源。
  • Python版本冲突: Yocto对Python版本有要求。Ubuntu 20.04自带的Python 3.8没问题。如果你用更新的系统,可能需要用 virtualenv 隔离环境。
曾经踩过的坑: 有一次我忘了设置 MACHINE 变量,结果构建出来的镜像是x86架构的,在QEMU上根本跑不起来。检查了半小时才发现。所以,每次构建前务必确认 MACHINE 设置正确。

好了,环境搭建就到这里。下一章我们会深入Adaptive平台的软件架构,看看这些组件是怎么协同工作的。