Linux版本兼容问题及RTA-VRTE环境配置笔记

一、GLIBC版本兼容性问题

1.1 问题描述

GLIBC(GNU C Library) 是Linux系统中最底层的核心库。用高版本GLIBC编译的程序,无法在安装低版本GLIBC的系统上运行。

1.2 问题现象

复制代码
touch: symbol lookup error: /opt/vrte/usr/lib/libc.so.6: undefined symbol: _dl_audit_symbind_alt, version GLIBC_PRIVATE

1.3 根本原因

  • 工具链GLIBC版本:2.34(编译程序时使用)

  • 车载ECU BSP的GLIBC版本:2.32(目标系统实际版本)

  • 系统信息

复制代码
root@s32g3-tpf-platform:/opt/vrte/usr/bin# uname -a
Linux s32g3-tpf-platform 5.10.120-rt70+g0b76731696c1 #1 SMP PREEMPT Mon Sep 12 13:23:16 UTC 2022 aarch64 GNU/Linux

1.4 解决方案

patchelf rb-exmd --set-interpreter /opt/vrte/usr/lib/ld-linux-aarch64.so.1

将高版本的库存放到 /opt/vrte/usr/lib目录下

核心思路 :调整环境变量设置顺序,只让RTA-VRTE自身的应用程序(如rb-exmd)加载/opt/vrte的库,而不污染整个shell的标准系统命令。


二、修正后的exmd.sh脚本

2.1 完整脚本

bash

bash 复制代码
#!/bin/sh
# default timeout argument for exmd (milliseconds)
exmd_timeout="60000"

# Define color codes
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'

echo -e "${YELLOW}\n**************************************************"
echo -e "*** Welcome to the RTA-VRTE ***"
echo -e "**************************************************${NC}\n"
echo -e "${YELLOW}This utility serves as the launching for the RTA-VRTE platform. It facilitates the configuration of ENVIRONMENT VARIABLES and initiates the Execution Management tailored to your specified settings.${NC}"

IPC_PATH="/opt/vrte/tmp/dlt"

# --- 1. 在没有污染LD_LIBRARY_PATH之前,安全地执行系统命令清除残留 ---
if [ -d "$IPC_PATH" ]; then
    echo -e "${YELLOW}Cleaning the DLT cache/pipes folder defined by IPC_PATH env. This action has to be done at every target startup.${NC}"
    echo -e "\n"
    rm -rf "$IPC_PATH"  # 此时rm会正常工作
fi

mkdir -p -m 777 "$IPC_PATH"

export ECUCFG_ENV_VAR_ROOTFOLDER=/opt/vrte/exm-aap-execution-manager/etc/ecu-cfg
export PROCESSIDENTIFIER=rb_exmd
export DLT_PIPE_DIR=$IPC_PATH

# 此时运行touch,依然使用的是系统自带的C库,能够成功执行
touch /tmp/dlt-runtime-application.cfg
touch /tmp/dlt-runtime-context.cfg
touch /tmp/dlt-runtime.cfg

echo -e "${GREEN}*** DLT_PIPE_DIR configured to... ***${NC}"
env | grep DLT_PIPE_DIR 
echo -e "${GREEN}***\n${NC}"
echo -e "${GREEN}*** (exm__<softwareclustername>_flatcfg.bin) is stored into ECUCFG_ENV_VAR_ROOTFOLDER ***${NC} "
env | grep ECUCFG_ENV_VAR_ROOTFOLDER 
echo -e "${GREEN}***\n${NC}"
echo -e "${GREEN}*** PROCESSIDENTIFIER configured to... ***${NC}"
env | grep PROCESSIDENTIFIER 
echo -e "${GREEN}***\n${NC}"

# --- 2. 局部应用库路径,仅供rb-exmd启动时使用,不全局污染 ---
export VRTE_LD_PATH="/opt/vrte/usr/lib:/opt/vrte/lib"
echo -e "${GREEN}*** LD_LIBRARY_PATH used by EXMD ***${NC} "
echo -e "Target path: ${VRTE_LD_PATH}:${LD_LIBRARY_PATH}"
echo -e "${GREEN}***\n${NC}"

echo -e "${YELLOW}Starting Execution Management... (/opt/vrte/exm-aap-execution-manager/bin/rb-exmd) ${NC}"

# 在启动rb-exmd的这一行,将库路径传给它,防止影响其他命令
LD_LIBRARY_PATH="${VRTE_LD_PATH}:${LD_LIBRARY_PATH}" /opt/vrte/exm-aap-execution-manager/bin/rb-exmd -t "$exmd_timeout" &

2.2 关键修改点解析

修改点 说明
延迟/局部设置LD_LIBRARY_PATH 去掉全局的export LD_LIBRARY_PATH,只在最后启动rb-exmd时,使用行内前缀形式赋予环境变量
保护系统命令 确保前面的rmmkdirtouchgrep等基础命令全部链接到S32G3原生系统库
不污染Shell环境 只影响rb-exmd进程,不影响其他命令执行

三、DLT冲突问题

3.1 问题描述

Linux BSP已经集成了一套完整的COVESA DLT(dlt-system + dlt-daemon),而ETAS VRTE的EXM配置(FlatCfg)仍然保留了一个DLT Process,导致同一台ECU上启动了两套DLT,产生冲突。

3.2 冲突现象

bash

复制代码
root@s32g3-tpf-platform:~# ps -ef | grep dlt
root         267       1  0 18:25 ?        00:00:00 /usr/bin/dlt-system
root         271       1  0 18:25 ?        00:00:00 /usr/bin/dlt-daemon
root         396     375  0 18:26 pts/0    00:00:00 grep dlt

3.3 解决方案

方案一:永久禁用BSP自带的DLT(推荐)

如果板子始终运行RTA-VRTE,建议直接禁止BSP自动启动DLT:

bash

复制代码
# 禁用DLT服务
systemctl disable dlt.service
systemctl disable dlt-system.service

# 确认禁用状态
systemctl list-unit-files | grep dlt

执行结果

bash

复制代码
root@s32g3-tpf-platform:~# systemctl list-unit-files | grep dlt
dlt-adaptor-udp.service                disabled        disabled
dlt-example-user.service               static          -
dlt-receive.service                    static          -
dlt-system.service                     enabled         enabled
dlt.service                            enabled         enabled

重启后检查:

bash

复制代码
ps -ef | grep dlt
# 应无 /usr/bin/dlt-daemon 和 /usr/bin/dlt-system 进程
# 此时rb-dltd可以正常启动
方案二:启动前停止系统DLT服务

exmd.sh中添加:

bash

复制代码
systemctl stop dlt.service
systemctl stop dlt-system.service

3.4 最佳实践建议

对于RTA-VRTE + Adaptive AUTOSAR 环境,不建议在exmd.sh中每次都kill -9系统进程。更合理的做法是:

  1. 一次性配置systemctl disable dlt.servicedlt-system.service

  2. 启动前清理systemctl stop dlt.servicedlt-system.service

  3. 启动VRTE./exmd.sh启动rb-exmd


四、总结

问题类型 根本原因 解决方案
GLIBC版本不兼容 工具链GLIBC 2.34 vs BSP GLIBC 2.32 局部设置LD_LIBRARY_PATH,只影响VRTE应用
DLT服务冲突 BSP自带DLT与VRTE的rb-dltd冲突 禁用BSP的dlt.service和dlt-system.service

验证步骤

  1. 应用修正后的exmd.sh脚本

  2. 禁用BSP自带的DLT服务

  3. 重启系统验证

  4. 检查DLT进程状态和VRTE日志输出

相关推荐
Zhu7582 小时前
在Ubuntu24快速配置专用SFTP
linux·sftp
码农客栈2 小时前
Linux 内核顶层 Makefile 详解
linux
Embedded-Xin2 小时前
Rust学习——Cargo工具
linux·学习·架构·rust·嵌入式
weixin_435776113 小时前
2026年长沙托育vi设计从风格定位到元素运用的设计方法
linux·运维·服务器·python
龙仔7253 小时前
RustDesk 完整笔记
运维·笔记·rust·远程工具·rustdesk
benjiangliu3 小时前
LINUX系统-19-库制作与原理(一)
linux·运维·服务器
HJX_07243 小时前
嵌入式软件C语言八股文复习笔记5——编译、链接与底层硬核机制
c语言·开发语言·笔记
摇滚侠4 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 监控指标 Metrics 阅读笔记
java·spring boot·笔记
噜~噜~噜~5 小时前
操作系统笔记-1.1.3 操作系统的特征
笔记·操作系统