嵌入式linux中的busybox显示“找不到小程序”
Posted
技术标签:
【中文标题】嵌入式linux中的busybox显示“找不到小程序”【英文标题】:busybox in embedded linux shows "applet not found" 【发布时间】:2013-10-03 08:01:18 【问题描述】:我自己编译了busybox,我把它放到了我们的嵌入式linux中。但我有一些问题。
问题1:当我尝试使用诸如gzip之类的命令时,它会打印“gzip: applet not found”。当我检查busybox的menuconfig时,我确定我选择了“gzip”。
问题2:我以前用VIM,但是busybox只提供VI。所以我做了一个VIM到VI的链接,但是当我输入vim并运行它时,它也显示“vim:applet not found”。
任何人都可以帮助我解决“找不到小程序”的问题吗?非常感谢。
PS:我对busybox的“小程序”感到困惑,它是什么?像java中的“applet”?
【问题讨论】:
看起来你的 shell 在它的路径中没有找到busybox。谷歌“busybox shell 路径”找到补救措施。 首先,尝试像“busybox gzip”一样执行gzip。如果它有效,那么问题出在小程序链接(符号、硬脚本或微脚本)中。如果不是,则 gzip 小程序可能不会编译到busybox 中(尽管链接似乎指向busybox 可执行文件,因为您收到“未找到小程序”消息)。小程序是busybox支持的命令/实用程序。 @UncleO 哦不,路径没问题,其他命令没问题。 @sknaumov 谢谢,我尝试了 gzip 和成功。但是当我尝试“ln busybox vim”并使用 vim 时,它仍然显示“vim:找不到小程序”,我该如何解决这个问题?跨度> busybox 的工作方式是查看argv[0]
参数,它是symlink 的名称; vim 在你的情况下。然后它进行查找,它没有名为 vim 的小程序。您可以创建一个执行 busybox vi
的脚本并将该脚本符号链接到 vim。语法busybox applet
,是另一种选择程序的方法;但为什么不直接输入vi
。 busybox 用语中的 applet 是模拟程序。 busybox 具有基础架构(命令行解析等),其中包含一个主 驱动程序文件,它是一个模拟普通程序的 applet。
【参考方案1】:
问题 1 和 2 的答案是:您必须先设置 PATH
变量或在启用 FEATURE_PREFER_APPLETS
的情况下编译busybox。您可以设置 PATH
变量:
$ export PATH=/bin:/sbin:/usr/bin:/usr/sbin
busybox 小程序是一个小型应用程序,通常可以在 UNIX 通用实用程序(在 POSIX 标准中定义)中找到。这个小程序被编译成一个单一的可执行文件:busybox
。
【讨论】:
【参考方案2】:[F.Y.I.] Shebang 的拼写错误导致我出现同样的applet not found
错误。
$ # The '!' was forgotten in shebang
$ cat sample.sh
#/bin/sh
echo 'hello world'
$ ./sample.sh
sample.sh: applet not found
在 docker-compose 中,运行上面的脚本会给我一个打击错误:
standard_init_linux.go:211: exec user process caused "exec format error"
【讨论】:
【参考方案3】:尽管这是一个与 Java 相关的问题,正如 @KEINOS 指出的那样,这与缺少的 shebang 表示法有关。我在安装 R 包时尝试构建基于 Alpine Linux 的 Docker 映像时遇到了问题。
我的 jerry-rigged 解决方案是在镜像中安装 R 之后添加以下脚本以运行,然后运行 Buildx 的 muiltarch 构建:
#!/bin/sh
for script in $(ls -p /usr/lib/R/bin/ | grep -v / )
do
sed -i '1 i\#!/bin/bash\n#' "/usr/lib/R/bin/$script"
done
这会将 shebang 表示法添加到所有 R 提供的脚本中。
即便如此,一些包的 shell 脚本也缺少 shebang 符号。我刚刚在其中一个中打开了PR 以添加此符号。
如果您尝试编译只是为了在基于 x86 的系统中运行,那么此修复可能不会产生影响,但如果您尝试编译到任何其他架构,例如 arm/v6、arm/v7、arm/ v8、ppc64le 和 s390x;你会遇到这个问题。
【讨论】:
以上是关于嵌入式linux中的busybox显示“找不到小程序”的主要内容,如果未能解决你的问题,请参考以下文章
从开始到结束,手把手教你使用busybox构建类嵌入式Linux系统