您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



文章 咨询 工具 课程  
会员   
   
OCSMP 认证培训
5月27-28日 线上直播
基于模型的数据治理与数据中台
5月19-20日 北京+线上
网络安全原理与实践
5月21-22日 北京+线上
     
   
 订阅
一个让你驾驭AUTOSAR配置的ARXML解析工具(含源码)
 
作者:实战派掌门
  8   次浏览      2
 2026-5-14
 
编辑推荐:
文章主要介绍了一款用Python开发的、可高效解析和查询AUTOSAR ARXML配置文件(支持FEE/NVM模块导出及多种格式输出)的命令行工具及其源码获取方式,希望对你的学习有帮助。
本文来自于嵌入式软件实战派,由火龙果软件Alice编辑,推荐。

ARXML,你肯定知道,它的全称是 AUTOSAR XML,是 AUTOSAR标准中定义的一种特殊的 XML 文件格式。

我们在做AUTOSAR开发时,在配置工具上的操作配置,实际上的结果是更改到ARXML上,然后再根据ARXML生成相应的代码等。

可以简单地理解,这玩意在汽车电子系统中是灵魂般存在。既然它这么重要这么牛逼,肯定是不简单的。

但是,你不想掰开它,看看里面有什么吗?

好奇的,不仅仅只有你,我也非常想知道它里面长啥样。

ARXML本质是XML格式,但是当你用文本打开它时,看着就想发昏,简直就不是给人看的。

工欲善其事必先利其器。于是,我就探索如何解开这个ARXML的工具。

我们是用V厂的DaVinci工具的,直接打开Configurator或者Developer就可以查看配置信息。但是这两个玩意,笨重了不说,还每次都要连接license,有时候我只是想查看一点点配置参数而已,就像用牛刀杀鸡一般。 用着极其不爽!

当然,V厂还有个配套的叫什么XML Editor的玩意,看起来也挺好,比DaVinci轻量一点点,但是也要license一直供着,但凡断开license一会,这个软件就自动退出了。 用着极其不爽!

后来,我在VSCODE的插件市场里面找到一个叫ARXML的插件,它只能将ARXML以树形结构展开,还不能看里面的参数,而且这个树形结构内容还不能复制出来哈。 用着极其不爽!

找不到趁手的武器,我还不能造一件么!不是说Python除了生孩子外,什么事都可以做的吗。于是,我就用它写了一个命令行脚本。

现在做到了这些功能:

  • 通过ARXML的 ARPATH方式精确查询
  • 将ARXML内容以树形结构形式输出到界面上,还能导出html、csv、json、md和dot等格式文档
  • 个性化地导出Fee的配置内容
  • 个性化地导出 NVM 的配置内容

以下是这个软件的详细介绍哈!

🚀 核心亮点

1. SAX解析,性能卓越

传统 DOM解析 会将整个XML加载到内存,对于几十MB的ARXML文件极易导致内存溢出。本工具采用 SAX事件驱动 ,流式读取,即使处理超大文件也游刃有余。同时通过精心设计的节点栈和帧栈,完美还原了元素的树状结构,确保每个节点都能正确挂载。

2. 清晰的树形展示

支持将ARXML结构以树形形式输出到控制台,或导出为 JSON、HTML、Markdown、CSV、 Graphviz DOT 等多种格式。

  • 控制台输出:层级分明,附带节点类型和ARPATH,一目了然。
  • HTML导出:生成可折叠的交互式树,鼠标悬停显示文件位置、UUID等详细信息,方便团队分享。
  • DOT导出:可转换为可视化拓扑图,直观展示模块间的引用关系。

3. ARPATH快速定位

每个节点都有唯一的ARPATH(例如 /ActiveEcuC/NvM/NvMCommon ),工具支持 精确或模糊查询 ,瞬间定位到目标节点,并打印其所有子节点。再也不用在文本编辑器中“Ctrl+F”几十次了。

4. 交互式Shell

输入 arxml interactive your.arxml 即可进入交互模式,像操作命令行一样连续输入ARPATH查询,边查边看,适合探索性分析。

5. 模块化提取器

针对常见的基础软件模块(如FEE、NVM),工具内置了专门的提取器,一键生成 结构化的 CSV 表格 ,可直接用于Excel分析或脚本处理。

  • FEE 提取 :支持导出Partition配置、Block配置或合并导出,自动识别 FeePartitionConfiguration 和 FeeBlockConfiguration 容器,提取关键参数(布局、对齐、扇区大小等)。
  • NVM提取 :支持导出Common参数(NvMCommon、NvMCommonVendorParams)、各个NVM块(NvMBlockDescriptor)配置,并自动解析NVM块关联的Fee块名称。

6. 子命令设计,上手即用

遵循“一个命令,多种功能”的理念,所有操作均通过子命令完成,无需记忆复杂参数组合:

arxml tree          
# 查看树结构
arxml arpath        
# 查询指定路径
arxml interactive   
# 交互式查询
arxml fee           
# 提取FEE配置
arxml nvm           
# 提取NVM配置

每个子命令都有详尽的帮助信息( cli <cmd> -h ),并支持多个文件同时解析。

🛠️ 典型使用场景

场景一:快速了解一个陌生ARXML文件的内容

# 输出树结构,限制深度为3层
arxml tree sample.arxml --depth 3

输出效果:

文件: sample.arxml
└── AUTOSAR (AUTOSAR) [/]
    └── ActiveEcuC (AR-PACKAGE) [/ActiveEcuC]
        └── NvM (ECUC-MODULE-CONFIGURATION-VALUES) [/ActiveEcuC/NvM]
            ├── NvMConfigBlock (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMConfigBlock]
            ├── NvMCommon (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMCommon]
            ├── NvMCommonVendorParams (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMCommonVendorParams]
            ├── NvMBlockDescriptor (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMBlockDescriptor]
            ├── NvMBlockDescriptor_001 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMBlockDescriptor_001]
            ├── NvMBlockDescriptor_002 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMBlockDescriptor_002]
            ├── NvMBlockDescriptor_003 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMBlockDescriptor_003]
            ├── NvMBlockDescriptor_004 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMBlockDescriptor_004]
            ├── NvMBlockDescriptor_005 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMBlockDescriptor_005]
            ├── NvMBlockDescriptor_006 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMBlockDescriptor_006]
            ├── NvMBlockDescriptor_007 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMBlockDescriptor_007]
            ├── NvMBlockDescriptor_008 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMBlockDescriptor_008]
            ├── NvMBlockDescriptor_009 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/NvMBlockDescriptor_009]
            ├── StartApplication_NvMBlock1 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/StartApplication_NvMBlock1]
            └── StartApplication_NvMBlock2 (ECUC-CONTAINER-VALUE) [/ActiveEcuC/NvM/StartApplication_NvMBlock2]

场景二:导出带交互界面的HTML树,供同事评审

arxml tree sample.arxml --output tree.html --format html

生成的HTML文件可在浏览器中打开,点击节点可展开/折叠,鼠标悬停显示元数据,方便非技术人员查阅。 效果大概如下

图片

场景三:提取NVM模块所有块配置

arxml nvm nvm.arxml --nvm-blocks --output nvm_blocks.csv

输出的CSV包含每个块的名称、关联的Fee块名称、块大小、CRC类型、优先级等所有配置参数。

场景四:同时处理多个文件,合并提取FEE配置

arxml fee fee1.arxml fee2.arxml --fee --output fee_all.csv

工具会将所有文件中的FEE配置合并到一个CSV文件中,并自动去重(基于ARPATH)。

场景五:交互式探索,寻找特定参数

arxml interactive sample.arxml
arpath> /ActiveEcuC/NvM/NvMCommon

立即显示 NvMCommon 容器的所有参数及子节点,无需翻阅原始XML。

--- 结果 1 ---
名称: NvMCommon
ARPATH/ActiveEcuC/NvM/NvMCommon
元素类型: ECUC-CONTAINER-VALUE
文件: sample.arxml
位置: 行 125, 列 12
子节点数: 18
UUID: 66e205d7-7b2d-49bc-a1bb-d8cb7a63d0a7
定义: /MICROSAR/NvM/NvMCommon

子节点:
  NvMApiConfigClass -> /ActiveEcuC/NvM/NvMCommon/NvMApiConfigClass
  NvMBswMMultiBlockJobStatusInformation -> /ActiveEcuC/NvM/NvMCommon/NvMBswMMultiBlockJobStatusInformation
  NvMCompiledConfigId -> /ActiveEcuC/NvM/NvMCommon/NvMCompiledConfigId
  NvMCrcNumOfBytes -> /ActiveEcuC/NvM/NvMCommon/NvMCrcNumOfBytes
  NvMDatasetSelectionBits -> /ActiveEcuC/NvM/NvMCommon/NvMDatasetSelectionBits
  NvMDevErrorDetect -> /ActiveEcuC/NvM/NvMCommon/NvMDevErrorDetect
  NvMDrvModeSwitch -> /ActiveEcuC/NvM/NvMCommon/NvMDrvModeSwitch
  NvMDynamicConfiguration -> /ActiveEcuC/NvM/NvMCommon/NvMDynamicConfiguration
  NvMJobPrioritization -> /ActiveEcuC/NvM/NvMCommon/NvMJobPrioritization
  NvMPollingMode -> /ActiveEcuC/NvM/NvMCommon/NvMPollingMode
  NvMSetRamBlockStatusApi -> /ActiveEcuC/NvM/NvMCommon/NvMSetRamBlockStatusApi
  NvMSizeStandardJobQueue -> /ActiveEcuC/NvM/NvMCommon/NvMSizeStandardJobQueue
  NvMVersionInfoApi -> /ActiveEcuC/NvM/NvMCommon/NvMVersionInfoApi
  NvMMaxNoOfWriteRetries -> /ActiveEcuC/NvM/NvMCommon/NvMMaxNoOfWriteRetries
  NvMMainFunctionPeriod -> /ActiveEcuC/NvM/NvMCommon/NvMMainFunctionPeriod
  NvMUseBlockIdCheck -> /ActiveEcuC/NvM/NvMCommon/NvMUseBlockIdCheck
  NvMRepairRedundantBlocksApi -> /ActiveEcuC/NvM/NvMCommon/NvMRepairRedundantBlocksApi
  NvMSafeBswChecks -> /ActiveEcuC/NvM/NvMCommon/NvMSafeBswChecks

🔧 技术内幕:为什么它又快又准?

SAX + 自定义状态机

我们放弃了DOM,采用SAX逐元素解析,通过 element_stack 和 node_stack 两个栈精确跟踪元素和节点的层次关系,确保即使在复杂的嵌套结构中也能正确构建节点树。

DEFINITION-REF 智能捕获

对于参数值节点(如 ECUC-NUMERICAL-PARAM-VALUE ),工具会捕获其 DEFINITION-REF 中的最后一部分作为节点名称(例如 NvMBlockSize ),而非使用冗长的原始元素名,大大增强了可读性。

ARPATH索引

所有节点在解析完成后自动生成ARPATH并建立索引,支持快速查找。索引支持路径变体(如 /A/B/C 、 B/C 、 C ),查询时无需完全匹配。

可扩展的提取器框架

新增模块只需继承 BaseExtractor ,实现 run 和 add_arguments 方法,并在 EXTRACTORS 字典中注册,即可无缝集成到命令行中。目前已支持FEE和NVM,后续可根据需求快速扩展WDG、ECUM、Can等模块。

🎯 未来展望

  • 更多模块提取器 :WDG、ECUM、Can、Lin等常见BSW模块的配置提取。
  • 图形化界面 :基于Electron或PyQt打造桌面应用,让非技术人员也能轻松浏览。
  • 差异对比 :支持两个ARXML文件的差异比较,自动生成变更报告。
  • 在线演示 :提供Web版Demo,无需安装即可体验核心功能。

👥 谁在用?

  • AUTOSAR配置工程师 :快速验证配置正确性,批量导出配置参数。
  • 软件集成工程师 :对比不同版本的ARXML文件,确保配置一致性。
  • 测试人员 :从配置中提取测试用例所需的数据。
  • 项目经理 :通过导出的HTML树直观了解配置范围。

🎉 结语

ARXML文件不应该成为开发路上的绊脚石。这款工具虽然小巧,却凝聚了我们对AUTOSAR配置管理的深刻理解。无论您是新手还是资深专家,它都能帮助您 更快、更准、更轻松 地处理ARXML文件。 现在就试试吧! 如果您有任何问题或建议,欢迎通过issue或邮件与我们交流。您的反馈是我们前进的动力。

以下是 arxml 命令行工具的使用方法速查表。所有子命令均支持 -v ( --verbose )选项输出详细解析信息。

子命令 用途 常用参数 示例
tree 以树形结构输出文件内容 --depth / -d :限制显示深度 --output / -o :导出到文件 --format / -f :导出格式(json/html/md/csv/dot) arxml tree sample.arxml arxml tree sample.arxml -d 3 arxml tree sample.arxml -o tree.html -f html
arpath 根据 ARPATH 查询节点(支持模糊匹配) --arpath :要查询的路径(必须) arxml arpath --arpath /NvM/NvMCommon sample.arxml arxml arpath --arpath NvMBlockDescriptor sample.arxml
interactive 进入交互式查询模式,连续输入 ARPATH 进行检索 无额外参数 arxml interactive sample.arxml 进入后输入 /NvM/NvMCommon 等路径即可
fee 提取 FEE 模块配置(Partition / Block) --fee-partitions :仅提取 Partition --fee-blocks :仅提取 Block --fee :合并提取(默认) --output / -o :输出文件 arxml fee fee.arxml --fee-partitions -o partitions.csv arxml fee fee.arxml --fee-blocks -o blocks.csv arxml fee fee.arxml --fee -o fee_all.csv
nvm 提取 NVM 模块配置(Common / Blocks) --nvm-common :仅提取通用参数 --nvm-blocks :仅提取块配置 --nvm :合并提取(默认) --output / -o :输出文件 arxml nvm nvm.arxml --nvm-common -o nvm_common.csv arxml nvm nvm.arxml --nvm-blocks -o nvm_blocks.csv arxml nvm nvm.arxml --nvm -o nvm_all.csv

全局选项 : -v / --verbose 可加在任意子命令前,输出详细解析过程(例如 arxml -v tree sample.arxml )。

温馨提示:

1. 源码允许做二次开发,做你喜欢的研究

2. 源码不允许用于再次售卖等商业行为(本人极其讨厌这种行为)

3. 本人精力有限,不承诺提供源码的支持服务,但欢迎提bug,提建议

4. nvm/fee子命令我只测过DaVinci生成的nvm/fee相关ARXML文件,暂不确定其他厂商做的ARXML是否兼容

二次开发小tips:

  • 进行nvm/fee/nvm数据统计,甚至绘制存储分布图
  • 对SWC进行解析,提取相关接口,甚至生成swc源码
  • 提取CAN/LIN等信号关联关系
  • ……

源码工具下载

   
8 次浏览       2
相关文章

中央计算的软件定义汽车架构设计
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
相关文档

汽车设计-汽车的整体结构及动力系统
自动驾驶汽车软件计算框架
SysML在汽车领域的应用实践
电子电气架构-大陆汽车系统架构平台
相关课程

AutoSAR原理与实践
功能安全管理体系(基于ISO26262)
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发

最新活动计划
OCSMP 认证培训 5-27[在线]
企业网络安全防护体系 5-20[北京]
基于模型的数据治理 5-19[北京]
具身智能技能与实践 6-11[厦门]
AI Spec Coding工程化实践 6-17[北京]
Open Claw和Agent Skill实战 6-25[北京]
 
 
最新文章
ASPICE中配置管理是个什么东西?
了解软件安全分析与组件鉴定
掌握Autosar ComStack的精髓!
基于整车功能的正向诊断需求开发
搞定Autosar SWC开发秘籍,码住!
汽车OTA更新的系统性威胁评估
最新课程
基于SOA的汽车电子架构设计与开发
Auto SAR原理与实践
AUTOSAR架构与实践(从CP到 AP )
AUTOSAR架构建模方法与工具(EA)
ASPICE4.0核心开发过程指南
MBSE(基于模型的系统工程)
更多...   
成功案例
某知名车企 AUTOSAR应用设计与开发
吉利汽车 MBSE工程体系汽车建模及评估
某整车企业 《功能需求分析与设计》
富奥汽车零部件 建模工具EA
零跑汽车 建模工具EA及服务
北汽福田 建模工具EA
小鹏汽车 建模工具EA
更多...