微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 使用BusyBox简化嵌入式Linux系统

使用BusyBox简化嵌入式Linux系统

时间:04-18 来源:互联网 点击:

选项要求系统中存在/proc文件系统。

BusyBox编译选项

BusyBox包括了几个编译选项,可以帮助为我们编译和调试正确的BusyBox。

表1。为BusyBox提供的几个make选项

make目标说明

help显示make选项的完整列表

defconfig启用默认的(通用)配置

allnoconfig禁用所有的应用程序(空配置)

allyesconfig启用所有的应用程序(完整配置)

allbareconfig启用所有的应用程序,但是不包括子特性

config基于文本的配置工具

menuconfigN-curses(基于菜单的)配置工具

all编译BusyBox二进制文件和文档(。/docs)

busybox编译BusyBox二进制文件

clean清除源代码树

distclean彻底清除源代码树

sizes显示所启用的应用程序的文本/数据大小

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

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

$makeallyesconfig

$make

$

压缩BusyBox

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

永远不要编译为静态二进制文件(这会将所有需要的库都包含到映像文件中)。相反,如果我们是编译为一个共享映像,那么它会使用其他应用程序使用的库(例如/lib/libc。so。X)。

使用uClibc进行编译,这是一个对大小进行过优化的C库,它是为嵌入式系统开发的;而不要使用标准的glibc(GNUC库)来编译。

BusyBox命令中支持的选项

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

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

$。/busyboxwc--help

BusyBoxv1。1。1(2006。04。09-15:27+0000)multi-callbinary

Usage:wc[OPTION]。。。[FILE]。。。

Printline,word,andbytecountsforeachFILE,andatotallineif

morethanoneFILEisspecified。WithnoFILE,readstandardinput。

Options:

-cprintthebytecounts

-lprintthenewlinecounts

-Lprintthelengthofthelongestline

-wprintthewordcounts

$

这些特定的数据只有在启用了CONFIG_FEATURE_VERBOSE_USAGE选项时才可以使用。如果没有这个选项,我们就无法获得这些详细数据,但是这样可以节省大约13KB的空间。

向BusyBox中添加新命令

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

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

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

#includebusybox。h

intnewcmd_main(intargc,char*argv[])

{

inti;

printf(newcmdcalled:n);

for(i=0;i

printf(arg[%d]=%sn,i,argv[i]);

}

return0;

}

接下来,我们要将这个新命令的源代码添加到所选子目录中的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中

configCONFIG_NEWCMD

boolnewcmd

defaultn

help

newcmdisanewtestcommand。

这个结构定义了一个新配置项(通过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),应该在哪里会为这个新命令创建

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

网站地图

Top