向busybox中添加命令
2012-09-05 13:21
176 查看
向 BusyBox添加一个新命令非常简单,这是因为它具有良好定义的体系结构。第一个步骤是为新命令的源代码选择一个位置。我们要根据命令的类型(网络,shell等)来选择位置,并与其他命令保持一致。这一点非常重要,因为这个新命令最终会在 menuconfig的配置菜单中出现(在下面的例子中,是 Miscellaneous Utilities 菜单)。
对于这个例子来说,我将这个新命令称为
清单 13. 集成到 BusyBox 中的新命令的源代码
接下来,我们要将这个新命令的源代码添加到所选子目录中的
清单 14. 将命令添加到 Makefile.in 中
接下来再次更新 ./miscutils 目录中的配置文件,以便让新命令在配置过程中是可见的。这个文件名为Config.in,新命令是按照字母顺序添加的:
清单 15. 将命令添加到 Config.in 中
这个结构定义了一个新配置项(通过
接下来需要更新 ./include/applets.h文件,使其包含这个新命令。将下面这行内容添加到这个文件中,记住要按照字母顺序。维护这个次序非常重要,否则我们的命令就会找不到。
清单 16. 将命令添加到 applets.h 中
这定义了命令名(
倒数第二个步骤是向 ./include/usage.h文件中添加详细的帮助信息。正如您可以从这个文件的例子中看到的一样,使用信息可能非常详细。在本例中,我只添加了一点信息,这样就可以编译这个新命令了:
清单 17. 向 usage.h 添加帮助信息
最后一个步骤是启用新命令(通过
使用新的 BusyBox,我们可以对这个新命令进行测试,如清单 18 所示。
清单 18. 测试新命令
就是这样!BusyBox 开发人员开发了一个优秀但非常容易扩展的工具。
对于这个例子来说,我将这个新命令称为
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.o MISCUTILS-$(CONFIG_NEWCMD) += newcmd.o MISCUTILS-$(CONFIG_RUNLEVEL) += runlevel.o |
清单 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 文件中,我们可以看到配置语法的完整文法。
接下来需要更新 ./include/applets.h文件,使其包含这个新命令。将下面这行内容添加到这个文件中,记住要按照字母顺序。维护这个次序非常重要,否则我们的命令就会找不到。
清单 16. 将命令添加到 applets.h 中
USE_NEWCMD(APPLET(newcmd, newcmd_main, _BB_DIR_USER_BIN, _BB_SUID_NEVER)) |
newcmd),它在 Busybox源代码中的函数名(
newcmd_main),应该在哪里会为这个新命令创建链接(在这种情况中,它在/usr/bin 目录中),最后这个命令是否有权设置用户 id(在本例中是 no)。
倒数第二个步骤是向 ./include/usage.h文件中添加详细的帮助信息。正如您可以从这个文件的例子中看到的一样,使用信息可能非常详细。在本例中,我只添加了一点信息,这样就可以编译这个新命令了:
清单 17. 向 usage.h 添加帮助信息
#define newcmd_trivial_usage "None" #define newcmd_full_usage "None" |
make menuconfig,然后在 MiscellaneousUtilities 菜单中启用这个选项)然后使用
make来编译 BusyBox。
使用新的 BusyBox,我们可以对这个新命令进行测试,如清单 18 所示。
清单 18. 测试新命令
$ ./busybox newcmd arg1 newcmd called: arg[0] = newcmd arg[1] = arg1 $ ./busybox newcmd --help BusyBox v1.1.1 (2006.04.12-13:47+0000) multi-call binary Usage: newcmd None None |
相关文章推荐
- 如何向busybox添加自己的命令 例如:tree
- busybox添加新命令
- 如何向busybox添加自己的命令
- BusyBox 中添加新命令
- 向busybox中添加命令
- busybox的添加新命令。
- 向BusyBox中添加新命令(1.16.1版…
- 如何向busybox添加自己的命令
- 给openwrt里的busybox添加新命令,比如tree命令
- 嵌入式linux busybox 文件系统的移植 和 rz sz 命令的添加
- 如何向busybox添加自己的命令
- busybox之添加新的子命令
- 在xp中用DOS添加服务时,输入SC命令提示不可用的解决方案
- route add命令的主要作用是添加静态路由
- mac 终端中添加tree命令显示文件目录结构
- 添加service命令tomcat
- 20140629:添加本机用户和组、的命令
- Linux下route add 命令添加路由列表
- Busybox下tftp命令使用详解
- 今天在Mac机器上使用了Flex Builder编辑了一个源代码文件,保存后使用vim命令去打开时发现系统自动在每一行的结尾添加了^M符号,其实^M在Linux/Unix中是非常常见的,也就是我们在Win中见过的/r回车符号。由于编辑软件的编码问题,某些IDE的编辑器在编辑完文件之后会自动加上这个^M符号。看起来对我们的源代码没有任何影响,其实并不然,当我们把源代码文件Check In到svn之类