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日志输出

相关推荐
咯哦哦哦哦1 小时前
linux so库(arm)对比分析
linux·运维·arm开发
lengjingzju6 小时前
编译与调试完全指南—第10章 网络分析工具
linux
ltl7 小时前
新硬件对存储的影响:ZNS、CXL 与计算存储
linux
Wang's Blog7 小时前
PostgreSQL笔记60: 权限与角色管理——从层级体系到最佳实践
数据库·笔记·postgresql
RisunJan7 小时前
Linux命令-xauth(X11 认证授权管理)
linux·服务器·microsoft
IZero0710 小时前
Elasticsearch 学习笔记筑基-文档操作篇
笔记·学习·elasticsearch
公爵爱学习10 小时前
安装Ubuntu20.04遇到的问题 简要简述笔记
笔记
fb_1234511 小时前
Linux三剑客超全精讲(grep+sed+awk)零基础入门|正则+实战面试题
linux·运维·服务器
火车叼位12 小时前
Bash 实现 IDE 式补全的组件与配置
linux·运维
潘正翔12 小时前
k8s高级_调度器Deployment
linux·运维·云原生·容器·kubernetes·jenkins·devops