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时,使用行内前缀形式赋予环境变量
保护系统命令 确保前面的rm、mkdir、touch、grep等基础命令全部链接到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.service和dlt-system.service

  2. 启动前清理 :systemctl stop dlt.service和dlt-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日志输出

相关推荐
柳鲲鹏1 小时前
老电脑X99安装WIN11 26H2总结、问题解决办法汇总
笔记
DYWorker0011 小时前
Linux驱动:RK3568 GMAC + YT8531C 千兆以太网全流程解剖
linux
lisanmengmeng3 小时前
NRPE 添加命令(一)
linux·运维·服务器
树下水月3 小时前
Typora破解
linux·服务器·前端
sunoo-2294 小时前
【ARM嵌入式学习笔记第十天】i.MX6ULL eLCDIF控制器驱动RGB LCD全解析(硬件原理+寄存器配置+裸机代码)
arm开发·笔记·学习
沫璃染墨4 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
wuminyu4 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
深念Y4 小时前
rime-雾凇拼音-配置记录
linux·junit·软件·拼音·kde
听风若依5 小时前
数据在内存中的存储-纸面笔记整理
c语言·笔记
xiaominngtongxue5 小时前
从中职技能节看实训教学的组织逻辑
笔记