张小猛
小米Xiaomi Vela开发工程师
NuttX嵌入式RTOS的C++运行时库维护者,将LLVM libc++/libc++abi/libunwind及libgcc/compiler_rt完整移植适配到资源受限环境,支持 libminiabi、uClibc++ 等多种精简运行时。曾参与LLVM 17 C++库维护(对接 NuttX 与 Infineon TASKING 编译器),主导 NuttX 的 LLVM 21 三库升级,并打通 ARM/x86-64/RISC-V 多架构动态加载模块的C++异常支持。
演讲主题
openVela 上的 C++ 运行时落地实战
openVela 是小米开源的嵌入式实时操作系统,已在穿戴、IoT 大规模商用,并正走向座舱、智驾、中央域控等汽车场景。要在这样资源受限、编译器与架构高度异构的环境里让 C++"完整可用",需要把桌面级的整套C++ 运行时(libc++/libc++abi/libunwind/libgcc/compiler_rt)真正搬进来并跑通。 本次分享基于我在 openVela 上一系列工作,包括LLVM 17/21 C++ 库的维护于移植,GCC 13到15 的工具链升级、面向车规 MCU 的 TASKING编译器的C++库适配、以及 ARM/arm64/x86-64/RISC-V 架构上可加载 ELF 模块的 C++ 异常打通。 大纲: 1. 背景: openVela 的系统软件版图,与"为什么在 RTOS 上要完整 C++"(从穿戴/IoT 到汽车的演进) 2. 全景: 把 C++ 标准库与运行时搬进RTOS - 编译器异构、资源受限、多架构 3. 案例一: 四架构可加载 ELF 模块的 C++ 异常 - unwind 引擎的可插拔设计,与一个"异常抓不到"的根因定位 4. 案例二: GCC 13到15 + LLVM 17到21 联合升级 5. 案例三:让 C++ 跑上车规 MCU - TASKING 编译器的适配 6. 沉淀: 一套可复用的"跨层定位"方法(标准/语言 -> 编译器 ABI -> OS 内核 -> 架构) 听众收益: 1. 完整 C++ 运行时移植到 RTOS 的图景与取舍——一张可对照自己系统的落地地图。 2. 一套可复用的跨层定位方法论(标准→编译器 ABI→内核→架构,gdb/反汇编取证)。 3. 异常展开引擎的可插拔架构经验(libgcc/libunwind × 内建/模块 × EHABI/DWARF)。 4. 多编译器、多架构落地的真实坑与解法(GCC/Clang/TASKING、四架构;含车规 MCU)。 5. C++ 代码体积治理经验(为何 GC 不够、哪些重家伙要手动瘦身)。