向busybox中添加命令

转载 2013年04月12日 09:22:15

注意: 个人使用的busybox 是1.21.0 其中 Kbuild Config.in usage.h applets.h 均是由 Kbuild.src Config.src 等gen 的,所以修改生成的文件的文件, 而不是Kbuild等。注释里有说明,其它的参考 别的命令来写。

第一种方法

向 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.o
MISCUTILS-$(CONFIG_NEWCMD)   += newcmd.o
MISCUTILS-$(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 文件中,我们可以看到配置语法的完整文法。

接下来需要更新 ./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 开发人员开发了一个优秀但非常容易扩展的工具。

第二种方法

结了几天的向BusyBox中添加新命令(1.16.1版本)终于有了进展了啊,网上不同版本的使用还真是不一样啊不一样!其实只要在相关文件中查看其他命令的写法就可以依葫芦画瓢了,害我忙活了这久。每次有问题都谷歌百度,但实质都差不多的,解决办法没有我遇到的问题,很沮丧。很开心~最终还是出结果了,很简单的程序很简单的方法哦~

  举例:新命令称为 newcmd,并将它放到了 ./miscutils 目录中
  首先,编写或改写新命令的源代码,保证命令对应main函数形如:
         int cmdname_main( int argc, char **argv );

#include "libbb.h"
#include <stdio.h>

int newcmd_main(int argc, char **argv)
{
  int i;
  printf("newcmd called:\n");
  for(i = 0; i < argc; i++)
  {
    printf("arg[%d] \n", i);
  }
  return 0;
}

  然后,更新新添命令所在目录中的配置文件,这样配置时改命令才可见。BusyBox1.16.1版本中配置文件名为Config.in。
     本例中添加:
config NEWCMD 
bool "newcmd" 
default n 
help 
 newcmd is a new test command.

  再次,将命令添加到applets.h中,本例为:
IF_NEWCMD(APPLET(newcmd, _BB_DIR_USR_BIN, _BB_SUID_DROP))
这是因为本文件上面有定义宏# define APPLET(a,b,c) {#a,a##_main,b,c}。

  接着,向 usage.h 添加帮助信息,本例为:
#define newcmd_trivial_usage \
       "None" 
#define newcmd_full_usage \
       "None"
对应使用命令时显示为:
$ ./busybox newcmd --help BusyBox v1.1.1 (2006.04.12-13:47+0000) multi-call   binary Usage: newcmd None None

  最后,更改新添命令所在目录中的编译的Makefile,BusyBox1.16.1版本中名为Kbuild,本例中添加语句:lib-$(CONFIG_NEWCMD) +=newcmd.o

这样添加新命令的过程全部完成,之后只要配置,编译,安装即可。


如何向busybox添加自己的命令

转自: http://blog.csdn.net/yangzheng_yz/article/details/45046591 在做嵌入式开的时候,busybox无疑是非常好用的命令集...

busybox添加新命令

BusyBox 命令中支持的选项     BusyBox 中的命令并不支持所有可用选项,不过这些命令都包含了常用的选项。如果我们需要知道一个命令可以支持哪些选项,可以使用 --help 选项来调...
  • hushup
  • hushup
  • 2013年12月16日 11:34
  • 960

如何向busybox添加自己的命令

在做嵌入式开的时候,busybox无疑是非常好用的命令集,所以很多时候都喜欢把busybox移植到我们的系统里面,移植过程网上也有很多相关的文档,今天这篇文档主要介绍如何在busybox中添加我们自己...

如何向busybox添加自己的命令 例如:tree

make make install 1;下载tree命令的源代码 http://mama.indstate.edu/users/ice/tree/,我使用的版本是busybox-1.17....
  • Cupid99
  • Cupid99
  • 2016年12月28日 17:00
  • 516

嵌入式linux busybox 文件系统的移植 和 rz sz 命令的添加

-----------------创建rootfs文件夹-------------------mkdir my_rootfscd my_rootfsmkdir bin dev etc home lib...

向busybox中添加命令

向 BusyBox添加一个新命令非常简单,这是因为它具有良好定义的体系结构。第一个步骤是为新命令的源代码选择一个位置。我们要根据命令的类型(网络,shell等)来选择位置,并与其他命令保持一致。这一点...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

busybox中telnet功能的添加

http://www.embedu.org/Column/Column239.htm 使用busybox制作的一个基本根文件系统如何添加telnetd服务呢? 下面把本人的添加过程列出...

由Busybox升级引发的一次对Printf的探寻

作为一名在嵌入式领域从事多年软件开发的RD,我不得不承认:有时对与一些司空见惯的事物,细究起来是知之甚少!     公司一直使用Linux作为软件平台,使用BusyBox作为基本工具集。最近,Busy...

Linux下面安装最新的gcc4.2.2

Linux下面安装最新的gcc4.2.2很简单的,首先,现在最新的包GCC 4.2.bz2,一般的到处都有的下,linux下的下载速度很满,20多k,很恶心,我喜欢迅雷的下载速度,在windows下下...
  • ztz0223
  • ztz0223
  • 2008年01月30日 09:56
  • 3486
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:向busybox中添加命令
举报原因:
原因补充:

(最多只允许输入30个字)