4. 开发环境搭建:安装Ubuntu、配置交叉编译环境、搭建Android Studio与QNX SDK

好,咱们进入正题。这一章要搭建开发环境,说白了就是给你的电脑装上「武器库」。我见过太多新手卡在这一步,装到一半就放弃了。别急,跟着我的节奏来,保证你一次搞定。

4.1 为什么需要这套环境?

智能座舱开发,不是写个App那么简单。你想想看,车机系统要同时跑Android和QNX,还要让它们互相通信。所以我们需要:

  • Ubuntu:作为主开发系统,编译工具链都跑在上面
  • 交叉编译环境:在PC上编译,在车机芯片上运行
  • Android Studio:写HMI界面、Android应用的IDE
  • QNX SDK:开发QNX侧底层服务的工具包

嗯,这里要注意:千万别想着在Windows上硬搞,我当年试过,折腾了三天最后还是乖乖装了Ubuntu。

4.2 安装Ubuntu 20.04 LTS

我个人习惯用20.04 LTS版本,稳定,社区支持好。22.04也行,但有些老工具链可能不兼容。

4.2.1 准备工作

  • 一台性能还行的电脑(建议16GB内存以上,256GB硬盘)
  • 一个8GB以上的U盘
  • 下载Ubuntu 20.04 LTS镜像文件
  • 下载Rufus(Windows下制作启动盘的工具)

4.2.2 安装步骤

  1. 用Rufus把镜像写入U盘
  2. 重启电脑,按F2/F12进入BIOS,设置U盘启动
  3. 选择「Install Ubuntu」,按提示操作
  4. 分区建议:/ 分50GB,/home 分剩余空间,swap给8GB
  5. 安装完成后重启,拔掉U盘
我的小技巧: 安装时选择「最小安装」,省掉那些用不上的办公软件。装完后再按需装开发工具,系统更干净。

4.3 配置交叉编译环境

交叉编译,说白了就是在你的x86电脑上编译出能在ARM芯片上跑的程序。车机芯片大多是ARM架构的,比如高通SA8155、瑞萨R-Car H3。

4.3.1 安装交叉编译工具链

以ARM64为例,在Ubuntu终端执行:

sudo apt update
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

验证安装:

aarch64-linux-gnu-gcc --version

如果看到版本号,说明装好了。

4.3.2 写个测试程序

// hello.c
#include <stdio.h>

int main() {
    printf("Hello, 智能座舱!\n");
    return 0;
}

编译:

aarch64-linux-gnu-gcc -o hello hello.c

file hello 查看,会显示是ARM架构的可执行文件。

我曾经踩过的坑: 编译时忘了加 -static 参数,结果程序在车机上跑不起来,因为车机里没有动态库。后来我养成了习惯,交叉编译时一律用静态链接。

4.4 搭建Android Studio

Android Studio是开发HMI界面的主力工具。车机上的Android和手机上的不太一样,但开发流程是相通的。

4.4.1 安装步骤

  1. 从官网下载Android Studio for Linux
  2. 解压到 /opt 目录:sudo tar -xzf android-studio-*.tar.gz -C /opt
  3. 进入 /opt/android-studio/bin,运行 ./studio.sh
  4. 按向导安装SDK,建议选API 29(Android 10)以上

4.4.2 配置车机模拟器

车机屏幕通常是1920x720或1280x720的横屏。创建模拟器时:

  • 选择「Automotive」分类下的设备
  • 分辨率设为1920x720
  • API级别选29或30
嗯,这里有个细节: 车机模拟器默认不带Google服务,如果需要地图、语音等功能,得自己集成。我一般先用模拟器调试UI,功能逻辑用真机测。

4.5 搭建QNX SDK

QNX是车机上的实时操作系统,负责安全相关的功能,比如仪表盘、ADAS。Android负责娱乐,QNX负责安全,两者通过Hypervisor隔离。

4.5.1 获取QNX SDK

QNX SDK需要向BlackBerry申请,或者从车厂拿到。一般包含:

  • QNX Momentics IDE(基于Eclipse)
  • QNX Neutrino RTOS
  • BSP(板级支持包)

4.5.2 安装步骤

  1. 解压SDK包到 /opt/qnx
  2. 设置环境变量,编辑 ~/.bashrc
export QNX_HOST=/opt/qnx/qnx700/host/linux/x86_64
export QNX_TARGET=/opt/qnx/qnx700/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH

然后 source ~/.bashrc 生效。

4.5.3 验证安装

qcc --version

如果看到QCC编译器版本,说明环境配好了。

注意: QNX的编译器叫qcc,不是gcc。语法和gcc类似,但有些参数不一样。我第一次用的时候直接敲gcc,结果报错半天才发现。

4.6 环境验证与常见问题

4.6.1 验证清单

组件 验证命令 预期结果
Ubuntu lsb_release -a 显示20.04 LTS
交叉编译工具 aarch64-linux-gnu-gcc --version 显示版本号
Android Studio 启动IDE 正常打开
QNX SDK qcc --version 显示版本号

4.6.2 常见问题

  • 问题: 交叉编译时提示找不到头文件
    解决: 检查 -I 参数是否指向了ARM架构的头文件路径
  • 问题: Android Studio启动卡死
    解决: 检查JDK版本,建议用OpenJDK 11
  • 问题: QNX SDK激活失败
    解决: 确认License文件放在 /opt/qnx/license 目录下

4.7 小结

环境搭建这块,说白了就是「一次配置,长期受益」。我刚开始做座舱开发时,光配环境就花了一周。但配好之后,后面开发就顺畅多了。

最后提醒一句:备份你的虚拟机。万一搞崩了,直接恢复快照,不用从头再来。这个习惯救过我无数次。

下一章,咱们开始写第一个座舱应用。到时候你就知道,今天搭的环境有多重要了。