You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto镜像使用ip.iproute2时出现'-sh: ip: not found'错误排查

Yocto中ip.iproute2执行报错'-sh: ip: not found'的排查思路

问题背景

在Yocto发行版中,当包含ip.iproute2包时,无论是运行指向它的符号链接ip,还是直接执行/sbin/ip.iproute2,都会抛出-sh: ip: not found或-sh: ip.iproute2: not found错误。但不包含该包时ip命令可正常工作,结合meta-updater(OSTree)层使用该包时也能正常运行。ldd ip.iproute2输出显示所有依赖库均能找到对应路径。

排查方向与调试步骤

1. 验证动态链接器兼容性

从ldd输出可见,程序依赖的动态链接器为/usr/lib/ld-linux-armhf.so.3,可直接指定链接器运行程序,排查链接器路径匹配问题:

/usr/lib/ld-linux-armhf.so.3 /sbin/ip.iproute2

若此命令能正常执行,说明shell的环境变量或链接器默认搜索路径存在异常,比如/usr/lib未被加入链接器默认查找路径,或构建时sysroot配置有误。

2. 检查文件权限与属性

确认ip.iproute2的可执行权限及特殊属性:

ls -l /sbin/ip.iproute2
getfattr -d /sbin/ip.iproute2

确保文件拥有可执行权限(x位),且未被设置noexec等限制执行的属性。

3. 对比不同构建的包差异

  • 排查无ip.iproute2时正常运行的ip来源:用which ip和ldd $(which ip)查看该ip所属包及依赖路径,与ip.iproute2做对比。
  • 检查ip.iproute2的配方文件(.bb),确认编译选项、安装路径等配置是否存在错误,比如是否误编译为其他架构,或安装时路径处理异常。
  • 对比常规构建与结合meta-updater构建的rootfs结构:查看/lib、/usr/lib的挂载方式,或ld.so.conf的配置差异:
cat /etc/ld.so.conf
ldconfig -p | grep libelf

验证依赖库缓存是否正确加载。

4. 排查Shell的PATH配置

检查当前shell的PATH是否包含/sbin:

echo $PATH

若未包含,手动添加后重试:

export PATH=$PATH:/sbin
ip.iproute2

5. 重新构建包排除损坏可能

清理并重新构建ip.iproute2包,确保构建过程无报错后重新生成rootfs测试:

bitbake iproute2 -c cleanall
bitbake iproute2

内容的提问来源于stack exchange,提问作者Dane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:12:35