避坑指南:在Ubuntu 20.04上为树莓派4B编译AGL(Automotive Grade Linux)踩过的那些雷
2026/5/10 9:43:58 网站建设 项目流程

树莓派4B实战:Ubuntu 20.04编译AGL车载系统的深度避坑手册

当我在2023年第一次尝试在树莓派4B上构建Automotive Grade Linux(AGL)时,官方文档推荐的Ubuntu 16.04已经停止维护。这个看似简单的版本差异,让我在后续的编译过程中遭遇了数十个隐蔽的"深坑"。本文将分享我在Ubuntu 20.04 LTS环境下完整构建AGL 12.0(Electric Eel)的实战经验,涵盖从系统准备到镜像烧录的全流程解决方案。

1. 环境准备阶段的隐性冲突

官方文档中"apt-get install"列出的软件包清单,在Ubuntu 20.04上直接运行会导致三个关键问题:

依赖关系断裂示例

# 典型错误提示 Package 'python-pexpect' has no installation candidate Package 'gcc-multilib' conflicts with 'gcc-aarch64-linux-gnu'

必须使用以下修正后的安装命令:

sudo apt-get install -y gawk wget git-core diffstat unzip texinfo \ build-essential chrpath socat cpio python3 python3-pip python3-pexpect \ xz-utils debianutils iputils-ping libsdl1.2-dev xterm \ gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

注意:Ubuntu 20.04已完全转向Python3,所有Python2相关的包都需要替换为Python3版本

存储空间的实际需求对比

官方建议实测需求关键差异原因
50GB120GB构建缓存和多个版本镜像共存

建议使用以下命令检查并扩展存储:

df -h / # 检查根分区空间 sudo lvextend -L+80G /dev/ubuntu-vg/root # LVM扩容示例

2. Repo工具与源码下载的现代适配

在配置Repo工具时,Google原始域名在国内访问不稳定,需要改用镜像源:

# 创建bin目录并配置PATH mkdir -p ~/bin && curl -s https://mirrors.bfsu.edu.cn/git/git-repo > ~/bin/repo chmod a+x ~/bin/repo # 设置清华镜像源 export REPO_URL='https://mirrors.bfsu.edu.cn/git/git-repo'

源码同步时常见问题及解决方案:

  1. Gerrit连接超时

    # 修改.repo/manifests.git/config [remote "origin"] url = https://mirrors.tuna.tsinghua.edu.cn/git/automotive/AGL/AGL-repo
  2. 大文件下载失败

    repo sync -j4 --no-clone-bundle --optimized-fetch
  3. 内存不足崩溃

    sudo sysctl vm.swappiness=10 # 降低swap使用倾向 free -h # 监控内存使用

3. aglsetup.sh脚本的兼容性改造

原版aglsetup.sh在Ubuntu 20.04上运行时会产生Python语法错误,需要手动修复:

关键修改点

# 修改前(旧版Python语法) print "Error: %s" % message # 修改后 print(f"Error: {message}")

完整修复步骤:

# 备份原始脚本 cp $AGL_TOP/meta-agl/scripts/aglsetup.sh $AGL_TOP/aglsetup.sh.bak # 使用sed批量替换 sed -i 's/print "\(.*\)"/print(f"\1")/g' $AGL_TOP/meta-agl/scripts/aglsetup.sh

构建命令需要额外添加针对树莓派4B的优化参数:

source meta-agl/scripts/aglsetup.sh -m raspberrypi4 \ agl-demo agl-devel agl-appfw-smack \ --dl-dir=$AGL_TOP/downloads --build-dir=$AGL_TOP/build

4. 构建过程中的典型错误排查

内存不足导致OOM Killer: 树莓派4B构建需要至少16GB内存,建议配置swapfile:

sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

常见编译错误及解决方案

错误类型解决方案根本原因
ERROR: QA Issue在local.conf添加INSANE_SKIP:pn-<package> = "textrel"二进制文件文本重定位
No such file or directory: 'aarch64-poky-linux-gcc'执行source setup-environment环境变量未正确加载
Failed to fetch修改DL_DIR使用国内镜像源网络连接问题

构建时间优化技巧

# 在local.conf中添加 BB_NUMBER_THREADS = "8" PARALLEL_MAKE = "-j 8"

5. 镜像烧录与硬件适配

使用lsblk识别SD卡时,新版本Ubuntu可能会遇到设备命名差异:

# 更可靠的设备识别方式 sudo parted -l | grep -A 10 'SD Card'

烧录命令需要根据镜像类型调整:

# 对于wic.xz格式 xzcat agl-raspberrypi4-12.0.0.wic.xz | sudo dd of=/dev/sdX bs=4M conv=fsync # 对于sdcard.img格式 sudo dd if=agl-raspberrypi4-12.0.0.sdcard.img of=/dev/sdX bs=4M conv=fsync

触摸屏旋转配置的现代语法:

# /etc/xdg/weston/weston.ini [output] name=DSI-1 transform=90 # 支持0/90/180/270度旋转

在完成首次启动后,建议立即执行以下优化操作:

# 扩展根分区 sudo agl-extend-rootfs # 启用SSH访问 sudo systemctl enable --now sshd

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询