微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > busybox 详解

busybox 详解

时间:05-08 来源: 点击:

allnoconfig 禁用所有的应用程序(空配置)
allyesconfig 启用所有的应用程序(完整配置)
allbareconfig 启用所有的应用程序,但是不包括子特性
config 基于文本的配置工具
menuconfig N-curses(基于菜单的)配置工具
all 编译 BusyBox 二进制文件和文档(./docs)
busybox 编译 BusyBox 二进制文件
clean 清除源代码树
distclean 彻底清除源代码树
sizes 显示所启用的应用程序的文本/数据大小

在定义配置时,我们只需要输入make就可以真正编译 BusyBox 二进制文件。例如,要为所有的应用程序编译 BusyBox,我们可以执行下面的命令:

清单 11. 编译 BusyBox 二进制程序

$ make allyesconfig$ make$


压缩 BusyBox

如果您非常关心对 BusyBox 映像的压缩,就需要记住两件事情:

永远不要编译为静态二进制文件(这会将所有需要的库都包含到映像文件中)。相反,如果我们是编译为一个共享映像,那么它会使用其他应用程序使用的库(例如/lib/libc.so.X)。 使用 uClibc 进行编译,这是一个对大小进行过优化的 C 库,它是为嵌入式系统开发的;而不要使用标准的 glibc (GNU C 库)来编译。


BusyBox 命令中支持的选项

BusyBox 中的命令并不支持所有可用选项,不过这些命令都包含了常用的选项。如果我们需要知道一个命令可以支持哪些选项,可以使用--help选项来调用这个命令,如清单 12 所示。

清单 12. 使用 --help 选项调用命令

$ ./busybox wc --helpBusyBox v1.1.1 (2006.04.09-15:27+0000) multi-call binaryUsage: wc [OPTION]... [FILE]...Print line, word, and byte counts for each FILE, and a total line ifmore than one FILE is specified. With no FILE, read standard input.Options: -c print the byte counts -l print the newline counts -L print the length of the longest line -w print the word counts$
这些特定的数据只有在启用了CONFIG_FEATURE_VERBOSE_USAGE选项时才可以使用。如果没有这个选项,我们就无法获得这些详细数据,但是这样可以节省大约 13 KB 的空间。

向 BusyBox 中添加新命令

向 BusyBox 添加一个新命令非常简单,这是因为它具有良好定义的体系结构。第一个步骤是为新命令的源代码选择一个位置。我们要根据命令的类型(网络,shell 等)来选择位置,并与其他命令保持一致。这一点非常重要,因为这个新命令最终会在 menuconfig 的配置菜单中出现(在下面的例子中,是 Miscellaneous Utilities 菜单)。

对于这个例子来说,我将这个新命令称为newcmd,并将它放到了 ./miscutils 目录中。这个新命令的源代码如清单 13 所示。

清单 13. 集成到 BusyBox 中的新命令的源代码

#include "busybox.h"int newcmd_main( int argc, char *argv[] ){ int i; printf("newcmd called:\n"); for (i = 0 ; i < argc ; i++) { printf("arg[%d] = %s\n", i, argv[i]); } return 0;}
接下来,我们要将这个新命令的源代码添加到所选子目录中的Makefile.in中。在本例中,我更新了./miscutils/Makefile.in文件。请按照字母顺序来添加新命令,以便维持与现有命令的一致性:

清单 14. 将命令添加到 Makefile.in 中

MISCUTILS-$(CONFIG_MT) += mt.oMISCUTILS-$(CONFIG_NEWCMD) += newcmd.oMISCUTILS-$(CONFIG_RUNLEVEL) += runlevel.o

接下来再次更新 ./miscutils 目录中的配置文件,以便让新命令在配置过程中是可见的。这个文件名为 Config.in,新命令是按照字母顺序添加的:

清单 15. 将命令添加到 Config.in 中

config CONFIG_NEWCMD bool "newcmd" default n help newcmd is a new test command.

这个结构定义了一个新配置项(通过config关键字)以及一个配置选项(CONFIG_NEWCMD)。新命令可以启用,也可以禁用,因此我们对配置的菜单属性使用了bool(Boolean)值。这个命令默认是禁用的(n表示 No),我们可以最后放上一个简短的 Help 描述。在源代码树的 ./scripts/config/Kconfig-language.txt 文件中,我们可以看到配置语法的完整文法。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top