3. 高通8155硬件架构

做智能座舱开发,环境搭建是第一道坎。很多人觉得装个系统、下个SDK有什么难的?但我在项目里见过太多人卡在这一步——不是QNX license激活失败,就是AOSP编译到一半磁盘爆了。说白了,这一步要是没走稳,后面全是坑。

今天我就把整套流程拆开揉碎了讲。你跟着我的节奏来,保证一次过。

3.1 硬件选型与Ubuntu 20.04配置

先说说硬件。高通8155的开发板,我建议你至少准备一台i7-12700以上、64GB内存、1TB NVMe固态的机器。为什么?因为AOSP全量编译一次,32GB内存直接吃满,编译时间动辄两三个小时。我团队里有个兄弟用16GB笔记本编译,结果swap撑爆,系统直接卡死。

操作系统我推荐Ubuntu 20.04 LTS。别问为什么不用22.04——QNX SDP 7.1对20.04的支持最成熟,我在22.04上踩过驱动兼容的坑,后来老老实实换回来了。

磁盘分区建议:
  • /(根分区):100GB,ext4
  • /home:剩余空间,ext4(AOSP源码放这里)
  • swap:32GB(编译时内存不够就靠它救命)

装完系统后,第一件事装基础依赖:

sudo apt update && sudo apt upgrade -y
sudo apt install -y git-core gnupg flex bison build-essential \
  zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
  libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev \
  lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

嗯,这里要注意:libncurses5在20.04的源里可能找不到,需要手动添加一下。我一般直接装libncurses5-dev的替代包,或者从旧源里拉。

3.2 QNX SDP 7.1安装与License激活

QNX SDP(Software Development Platform)是QNX开发的基石。你从黑莓官网下载到的通常是.bin安装包,大概2GB左右。

安装步骤其实不复杂:

  1. 给安装包加执行权限:chmod +x qnx-sdp-7.1.0.bin
  2. 运行安装:./qnx-sdp-7.1.0.bin
  3. 选择安装路径,我习惯放在/opt/qnx710
  4. 等待安装完成(大约10分钟)
License激活避坑: 我曾经因为没配好MAC地址,导致license一直报"hostid mismatch"。QNX的license是绑定网卡MAC的,如果你机器有多个网卡,记得用ifconfig确认激活时用的是哪个MAC。最好把无线网卡禁掉,只用有线网卡。

激活完成后,配置环境变量:

# 在 ~/.bashrc 末尾添加
export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
source ~/.bashrc

验证安装:

qcc --version
# 应该输出类似 QCC 7.1.0 的版本信息

3.3 Android Studio与AOSP源码下载

Android Studio是开发Android应用的IDE,而AOSP(Android Open Source Project)源码是定制系统的基础。两者都要装,但用途不同。

3.3.1 Android Studio安装

从developer.android.com下载Linux版,解压到/opt:

sudo tar -xzf android-studio-2022.3.1-linux.tar.gz -C /opt
cd /opt/android-studio/bin
./studio.sh

第一次启动会引导你安装SDK。我建议把SDK路径设到/home/你的用户名/Android/Sdk,方便管理。

小技巧: 在Android Studio里安装NDK和CMake,后面交叉编译会用到。路径:File → Settings → Appearance & Behavior → System Settings → Android SDK → SDK Tools。

3.3.2 AOSP源码下载

AOSP源码大概有40GB+,下载前确保磁盘空间充足。我用的是清华大学的镜像站,速度比Google官方快很多:

# 安装repo工具
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH

# 初始化AOSP仓库(以android-13.0.0_r41为例)
mkdir ~/aosp
cd ~/aosp
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest \
  -b android-13.0.0_r41 --depth=1

# 同步源码(这一步最耗时,我建议用screen或tmux跑)
repo sync -c -j8

为什么要用--depth=1?因为只拉最新提交,不拉历史记录,能省一半的下载量。我第一次没加这个参数,下了整整一天。

3.4 交叉编译工具链配置

交叉编译,说白了就是在x86的电脑上编译出能在ARM架构的8155上跑的程序。QNX和Android各有一套工具链,你得搞清楚什么时候用哪套。

目标平台 工具链 编译器前缀 典型路径
QNX 7.1 (aarch64) QCC aarch64-unknown-nto-qnx7.1.0- /opt/qnx710/host/linux/x86_64/usr/bin
Android 13 (aarch64) Clang/LLVM aarch64-linux-android33- prebuilts/clang/host/linux-x86/clang-r450784e/bin

3.4.1 QNX工具链配置

QNX的工具链其实装完SDP就有了。你只需要确认$QNX_HOST/usr/bin在PATH里。写个简单的测试程序:

# hello_qnx.c
#include <stdio.h>
int main() {
    printf("Hello from QNX on 8155!\n");
    return 0;
}

# 编译
qcc -Vgcc_ntoaarch64le hello_qnx.c -o hello_qnx

# 查看生成的文件类型
file hello_qnx
# 输出: ELF 64-bit LSB executable, ARM aarch64

看到ARM aarch64就对了。如果显示x86,说明你用的不是交叉编译器。

3.4.2 Android NDK工具链配置

Android的交叉编译稍微复杂一点。我推荐用NDK自带的独立工具链:

# 在AOSP根目录下
cd prebuilts/ndk
# 找到NDK版本,比如r25c
cd r25c

# 生成独立工具链(只需执行一次)
python build/tools/make_standalone_toolchain.py \
  --arch arm64 \
  --api 33 \
  --install-dir /opt/android-toolchain

# 配置环境变量
export PATH=/opt/android-toolchain/bin:$PATH
export CC=aarch64-linux-android33-clang
export CXX=aarch64-linux-android33-clang++
关键区别:
  • QNX用qcc,链接的是QNX的libc和libm
  • Android用clang,链接的是Bionic libc
  • 两者生成的ELF格式相同,但动态链接器和系统库完全不同,不能混用

3.5 环境验证与常见问题

所有东西装完后,我习惯写一个验证脚本,一键检查所有工具链是否就绪:

#!/bin/bash
echo "=== 环境验证脚本 ==="

# 检查QNX
if command -v qcc &> /dev/null; then
    echo "[OK] QNX QCC: $(qcc --version | head -1)"
else
    echo "[FAIL] QNX QCC not found"
fi

# 检查Android NDK
if command -v aarch64-linux-android33-clang &> /dev/null; then
    echo "[OK] Android NDK: $(aarch64-linux-android33-clang --version | head -1)"
else
    echo "[FAIL] Android NDK not found"
fi

# 检查AOSP源码
if [ -f ~/aosp/build/envsetup.sh ]; then
    echo "[OK] AOSP source: found"
else
    echo "[FAIL] AOSP source missing"
fi

# 检查磁盘空间
df -h ~ | awk 'NR==2{print "[INFO] Disk free: "$4}'

跑一遍,绿色通过就说明环境搭好了。如果哪个环节红了,别慌——我遇到过最多的问题是PATH没配对,或者source ~/.bashrc忘了执行。

磁盘空间警告: AOSP全量编译一次需要至少150GB空闲空间。我建议你定期用repo sync -c -j8只拉最新代码,不要保留多个分支。另外,out/目录下的编译产物可以删掉重编,别心疼。

最后,我把整个环境搭建的流程画了张图,方便你对照检查:

开发环境搭建流程 开发环境搭建总览 硬件 + Ubuntu 20.04 LTS QNX SDP 7.1 安装 Android Studio 安装 AOSP 源码下载 QCC 交叉编译器 NDK + Clang 工具链 repo sync 同步 环境验证脚本 开发环境就绪 ✅ 💡 关键提醒 QNX与Android工具链不能混用,编译前确认目标平台