PREFIX 选项将安装目录重定向到其他位置。例如,下面的代码就使用 /tmp/newtarget 根目录来安装这些符号链接,而不是使用 ./_install 目录:
清单 9. 将符号链接安装到另外一个目录中
$ make PREFIX=/tmp/newtarget install
$
|
使用 install make 目标创建的符号链接都来自于 busybox.links 文件。这个文件是在编译 BusyBox 时创建的,它包含了已经配置的命令清单。在执行 install 时,就会检查 busybox.links 文件确定要创建的符号链接。
到 BusyBox 的命令行链接也可以使用 BusyBox 在运行时动态创建。CONFIG_FEATURE_INSTALLER 选项就可以启用这个特性,在运行时可以这样执行:
清单 10. 在运行时创建命令链接
$ ./busybox --install -s
$
|
-s 选项强制创建这些符号链接(否则就创建硬链接)。这个选项要求系统中存在 /proc 文件系统。
BusyBox 编译选项
BusyBox 包括了几个编译选项,可以帮助为我们编译和调试正确的 BusyBox。
表 1. 为 BusyBox 提供的几个 make 选项
| make 目标 |
说明 |
help |
显示 make 选项的完整列表 |
defconfig |
启用默认的(通用)配置 |
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 --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 菜单)。
对于这个例子来说,我将这个新命令称为
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一页 1 2 34 下一页
上一篇:嵌入式系统及系统级可编程产品介绍 下一篇:开源机器人技术工具包
|