1. 搭建QNX与AUTOSAR集成开发环境

搭建QNX与AUTOSAR集成开发环境 学习卡片

任务说明

本案例目标是在一台Ubuntu 22.04主机上搭建QNX SDP(Software Development Platform)与AUTOSAR工具链的集成开发环境,并验证QNX侧的基本编译与调试功能。AUTOSAR侧以配置其工具链环境变量并完成一次ARXML配置文件的语法校验作为验证闭环。

环境与依赖

  • 宿主机:Ubuntu 22.04 x86_64,已安装Docker(用于运行QNX SDP容器)
  • QNX SDP 7.1(从QNX官网获取,需有效License)
  • AUTOSAR工具链:本文以开源的autosar-tools(Python包,提供ARXML解析与校验)为例
  • 依赖安装:python3-pip、make、gcc

实现步骤

QNX SDP原生运行于QNX Neutrino系统,在Ubuntu上通过Docker容器隔离构建环境。AUTOSAR工具链则直接运行于宿主机Python环境。两者通过共享目录交换配置文件。

1. 创建QNX SDP Docker容器

# 拉取QNX SDP镜像(假设已从QNX官网获取并导入)
docker load -i qnx-sdp-7.1.tar
# 创建共享工作目录
mkdir -p ~/autosar_qnx_ws/{qnx_src,autosar_cfg}
# 启动容器并挂载工作目录
docker run -it --name qnx_sdp \
  -v ~/autosar_qnx_ws/qnx_src:/workspace/qnx_src \
  -v ~/autosar_qnx_ws/autosar_cfg:/workspace/autosar_cfg \
  qnx-sdp-7.1 /bin/bash

2. 配置AUTOSAR工具链(宿主机)

pip3 install autosar-tools
# 验证安装
python3 -c "import autosar; print(autosar.__version__)"

3. 集成环境验证脚本

以下脚本同时验证QNX编译工具链和AUTOSAR配置文件的可用性。将脚本保存为verify_env.sh并置于共享目录~/autosar_qnx_ws/下。

#!/bin/bash
# verify_env.sh - 集成环境验证脚本
set -e

WORKSPACE=~/autosar_qnx_ws
QNX_SRC=$WORKSPACE/qnx_src
AUTOSAR_CFG=$WORKSPACE/autosar_cfg

echo "=== [1/3] 验证QNX编译器 ==="
docker exec qnx_sdp bash -c "source /opt/qnx710/qnxsdp-env.sh && qcc -V | head -5"
echo "QNX编译器可用"

echo "=== [2/3] 编译QNX测试程序 ==="
cat > $QNX_SRC/hello.c << 'EOF'
#include <stdio.h>
int main(void) {
    printf("QNX-AUTOSAR集成环境OK\n");
    return 0;
}
EOF
docker exec qnx_sdp bash -c "source /opt/qnx710/qnxsdp-env.sh && cd /workspace/qnx_src && qcc -o hello hello.c"
echo "编译成功"

echo "=== [3/3] 验证AUTOSAR ARXML配置 ==="
cat > $AUTOSAR_CFG/TestConfig.arxml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<AUTOSAR xmlns="http://autosar.org/schema/r4.0">
  <AR-PACKAGES>
    <AR-PACKAGE>
      <SHORT-NAME>TestPackage</SHORT-NAME>
      <ELEMENTS>
        <ECUC-MODULE-DEF>
          <SHORT-NAME>TestModule</SHORT-NAME>
        </ECUC-MODULE-DEF>
      </ELEMENTS>
    </AR-PACKAGE>
  </AR-PACKAGES>
</AUTOSAR>
EOF
python3 -c "
import autosar
with open('$AUTOSAR_CFG/TestConfig.arxml', 'r') as f:
    content = f.read()
# 使用autosar-tools的XML解析器验证格式
from xml.etree import ElementTree as ET
ET.fromstring(content)
print('ARXML格式校验通过')
"
echo "=== 全部验证通过 ==="

运行与验证

chmod +x ~/autosar_qnx_ws/verify_env.sh
~/autosar_qnx_ws/verify_env.sh

预期输出(与代码逻辑严格对应):

=== [1/3] 验证QNX编译器 ===
QNX编译器可用
=== [2/3] 编译QNX测试程序 ===
编译成功
=== [3/3] 验证AUTOSAR ARXML配置 ===
ARXML格式校验通过
=== 全部验证通过 ===

判定标准:脚本无错误退出(exit code 0),且三个步骤均输出成功信息。若QNX容器未启动,步骤1会报错;若ARXML格式错误,步骤3会抛出XML解析异常。

调试功能验证

QNX调试使用gdb的QNX变体qnx-gdb。在容器内执行以下命令验证调试器可用:

docker exec qnx_sdp bash -c "source /opt/qnx710/qnxsdp-env.sh && which qnx-gdb && qnx-gdb --version | head -1"

预期输出显示qnx-gdb路径及版本号(如GNU gdb (GDB) 8.3.1),说明调试工具链已正确配置。