如何向busybox添加自己的命令

如何向busybox添加自己的命令,第1张

BusyBox 命令中支持的选项

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

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

$ ./busybox wc --help

BusyBox v1.1.1 (2006.04.09-15:27+0000) multi-call binary

Usage: wc [OPTION]... [FILE]...

Print line, word, and byte counts for each FILE, and a total line if

more 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.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,然后在 Miscellaneous Utilities 菜单中启用这个选项)然后使用 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 是为构建内存有限的嵌入式系统和基于软盘系统的一个优秀工具。BusyBox 通过将很多必需的工具放入一个可执行程序,并让它们可以共享代码中相同的部分,从而对它们的大小进行了很大程度的缩减,BusyBox 对于嵌入式系统来说是一个非常有用的工具,因此值得我们花一些时间进行探索。

上文网上转载!

1.USE_NEWCMD(APPLET(newcmd, newcmd_main, _BB_DIR_USER_BIN, _BB_SUID_NEVER))

此语句,在编译的时候会报出 USE_NEWCMD 未定义!

故使用源码中的类似语句 APPLET(newcmd, newcmd_main, _BB_DIR_USER_BIN, _BB_SUID_NEVER) 替代之,编译通过

2.但是 在此时测试命令的时候并没有得到上文给出的结果,而是提示:

"#./busybox newcmd

newcmd: applet not found "

# ./newcmd 11

11: applet not found

回答不容易,希望能帮到您,满意请帮忙采纳一下,谢谢 !

Android手机通过USB设置默认网关上网详细图解教程

1. 安装必备的软件

A)首先要确保PC上安装了手机的驱动程序,相信这个大家都装了。

B)安装root权限工具,我用的是superuser,后面会说到怎么使用。 C)安装Gscript,用来一键设置USB上网功能。

2. 设置

A)将手机设置为调试模式,我们要做的就是让USB支持调试模式。 步骤:将Application Settings/Development/USB debugging 勾选上。

B1)将手机设置为可以通过USB共享PC网络(Defy)

步骤:将Wireless &networks/Mobile networks/internet tethering 勾选上。

B2)有的手机设置通过USB共享PC网络的方式可能不同,你可能看到的是下面这种共

享设置的方式

步骤:将绑定/USB绑定勾选上

C)将PC上的USB线与手机连接

电脑网络连接里会多出一个本地连接,为方便查看我把名称改为android

右键查看电脑本身上网通过的网络连接的属性(如果你的电脑端使用有线网络上网,则打开“本地连接”;如果你的电脑端使用无线网络上网,则打开“无线网络连接”;如果你使用电脑中的拨号上网,则打开拨号用的宽带连接),我的是有线连接,我打开“本地连接”的属性,选择“高级”选项卡,勾选“允许其他网络用户通过此计算机的Internet连接来连接”,确定。(如果你有多个其他网卡,可能需要像下面右侧的图中选择“手机网络共享”连接,这个图是从其他地方拿来的)

此时,双击查看“手机网络共享”的状态,查看“支持”选项卡中的内容,可以看到“IP地址”被系统自动设为了192.168.16.1。(这很重要,该IP地址要与脚本中的IP地址一致,你可以按照你所处的环境来修改IP地址、子网掩码、和网关,但请确保它们与脚本中的设置一致。)PC端的设置完毕,且以后不必再更改。

D)安装Gscript,并按add script添加一个自定义的脚本online-usb,然后保存。 内容如下:

busybox route add default gw 192.168.16.1 //此处IP地址需要与电脑端的“手机网络共享”连接的IP地址相同 ifconfig rmnet0 down

setprop net.dns1 8.8.8.8 //8.8.8.8是Google提供的DNS服务器地址,可修改为适合自己的

E)点击运行online-usb

这时superuser会让你给gscript赋予root的权限,确认即可

为Android加入busybox工具我们可以通过两种方式进入Android的console: 1. 直接执行命令emulator -shell2. 在启动emulator后,通过命令adb shell进入。 之后我们就可以使用一些linux下常用的命令了,如ls,cat等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11257930.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存