[Camera][S600][缺少动态库]

root@drobot:/app/tuning_tool/scripts# ./run_tuning.sh 10 7
Hostname: drobot
Folder: matrix
<< item: 10 - OVX3C_RGGB
<< module: 7 - Pwl12_Metoak_Fov118
== 10 7: OVX3C_RGGB_Pwl12_Metoak_Fov118
 - OVX3C_RGGB()
 + OVX3C_RGGB_Pwl12_Metoak_Fov118()
[[ ovx3c rggb METOAK 1920x1280 pwl raw12 Fov118 ]]
/app/tuning_tool/bin/tuning_bin -m 1 -v /app/tuning_tool/cfg//matrix/tuning_ovx3c_metoak_Fov118_cim_isp_ynr_1280p/vpm_config.json -p 0 -c /app/tuning_tool/cfg//matrix/tuning_ovx3c_metoak_Fov118_cim_isp_ynr_1280p/hb_superdev.json -i 0 -r 2147483647 -E 1 -e 1 -y 1
/app/tuning_tool/bin/tuning_bin: error while loading shared libraries: libevent-2.1.so.7: cannot open shared object file: No such file or directory

s600平台使用tuning脚本显示缺少libevent-2.1.so.7动态库,但我在编译后的sdk中并没有找到这个库。

最可能原因:tuning_bin 是 SDK 里的预编译程序,它链接的 libevent 运行库没有打包进板端 rootfs——官方 Camera 点亮文档里也没列这个依赖,不是你编译姿势的问题。

排查建议(按顺序试):

  1. 先看完整依赖,确认只缺这一个:
ldd /app/tuning_tool/bin/tuning_bin
  1. 板端能联网的话,直接 apt 装。板端是 Ubuntu 系系统,提供 libevent-2.1.so.7 的包一般叫 libevent-2.1-7:
apt-get update && apt-get install -y libevent-2.1-7
ldconfig

如果官方源里没有这个包,可以临时添加 Ubuntu 对应版本的 arm64 源再装(装完建议还原源)。

  1. 离线方案:从 SDK 交叉编译工具链的 sysroot,或一台 arm64 的 Ubuntu 机器里把 libevent-2.1.so.7* 拷到板端:
scp libevent-2.1.so.7* root@<板子IP>:/usr/lib/
ldconfig

注意必须是 aarch64 版本的库,别把 x86 主机上的拷过去。

另外两点:

  • 你编译的 SDK 里找不到这个库是符合预期的,SDK 不会预置它,缺库属于镜像打包层面的问题,建议顺手在论坛反馈给管理员确认是否要在后续 RDKOS 版本补上。
  • tuning 程序本身的用法可参考官方文档「Camera 点亮」章节:Camera 点亮 | RDK S100/S600 DOC
root@drobot:/app/tuning_tool/bin# ldd tuning_bin
./tuning_bin: error while loading shared libraries: libevent-2.1.so.7: ELF load command address/offset not page-aligned
在线安装后显示库不能页对齐

原因基本可以确定:S600 内核是 64K 页表(官方 V5.0.0 Release Note 已知问题里明确写了「内核配置为 64K 页表,Ubuntu 桌面应用有兼容性问题」),而你在线装的 Ubuntu 源 libevent 是按 4K 对齐链接的,加载器就直接报 “not page-aligned”。不是安装过程坏了,是这个包本身和 S600 内核不兼容。

可先确认一下:

getconf PAGE_SIZE
readelf -l /usr/lib/aarch64-linux-gnu/libevent-2.1.so.7 | grep LOAD

如果 PAGE_SIZE 是 65536、LOAD 段的 Align 只有 0x4000/0x1000,就坐实了。

解决:自己按 64K 对齐重编一个 libevent(板端有网可以直接编):

wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
tar xf libevent-2.1.12-stable.tar.gz
cd libevent-2.1.12-stable
./configure --disable-openssl LDFLAGS="-Wl,-z,max-page-size=65536"
make -j4 && make install && ldconfig

装完再 ldd /app/tuning_tool/bin/tuning_bin 确认,然后跑 run_tuning.sh。如果 tuning_bin 依赖的其他库后面也报同样的错,同法重编即可(关键就是加 -Wl,-z,max-page-size=65536)。

参考:RDKS600 V5.0.0 Release Note · 已知问题

补充这次 S600 实机实验结果,也更正前面两条回复中说得过于确定的地方。

本次验证了“缺少 libevent 导致 tuning_bin 无法启动”的依赖链和修复机制;你后来遇到的 ELF load command address/offset not page-aligned,本轮还没有复现,不能据此说已经解决。

实测到了什么

实验板是 S600 MCB V1p0、RDK OS V5.1.0,内核为 6.1.158-rt58-DR-5.1.0-2605251554-g369e4b-gf8e87c,不保证与你的镜像版本相同。

  • 依赖链是 tuning_bin → libhbplayer.so.1 → libevent。需要的不仅是 libevent-2.1.so.7,还有 libevent_pthreads-2.1.so.7 及其依赖 libevent_core-2.1.so.7。
  • 实验板原本已有这些库。我们在隔离的挂载命名空间里隐藏它们,复现了缺库报错和退出码 127;再使用对应 Ubuntu noble 官方 arm64 软件包中的库恢复,ldd 不再报告缺库,程序进入了自身初始化。
  • 未接相机,后续仍报 hb_vio_init fail ret -325,所以这个结果只证明动态库加载阶段通过,不代表相机 tuning 已可用。

更正安装建议

在本次基于 Ubuntu 24.04/noble 的实验镜像上,可用包名带 t64,此前直接写 libevent-2.1-7 不准确。对于相同系统、且仍是 not found 的情况,可使用:

sudo apt-get update
sudo apt-get install libevent-2.1-7t64 libevent-pthreads-2.1-7t64
sudo ldconfig
ldd /app/tuning_tool/bin/tuning_bin

libevent-core-2.1-7t64 会作为依赖安装。其他镜像版本应先核对软件源和候选包,不要混加其他 Ubuntu 版本的软件源,也不要直接覆盖系统库。

你现在的页对齐错误还需要核对这些信息

你已经从“找不到库”变成了“库无法加载”,不应继续重复装库。上一条把原因直接归结为“64K 内核遇到 4K 库”,证据还不充分;需要先确认你实际运行的内核页大小,以及实际被加载的库文件。请在板端贴出:

cat /etc/os-release
cat /etc/version
uname -r
getconf PAGE_SIZE
ldd /app/tuning_tool/bin/tuning_bin 2>&1
ldconfig -p | grep libevent
printf 'LD_LIBRARY_PATH=%s\n' "$LD_LIBRARY_PATH"
dpkg-query -W 'libevent*'

再对 ldconfig -p 中 libevent-2.1.so.7 对应的实际路径执行(将下面占位路径替换掉):

readlink -f /实际路径/libevent-2.1.so.7
file /实际路径/libevent-2.1.so.7
readelf -lW /实际路径/libevent-2.1.so.7

这能帮助区分镜像/包版本不匹配、加载到了另外一份库,还是 ELF 段布局与系统页大小不兼容。**本轮没有验证上一条的重编译方案,暂不建议直接执行 make install 覆盖库。**拿到上述信息后,才能针对你这块板子的页对齐错误继续复现。