| [20] | 1 | Building: | 
|---|
 | 2 | ========= | 
|---|
 | 3 |  | 
|---|
 | 4 | The BusyBox build process is similar to the Linux kernel build: | 
|---|
 | 5 |  | 
|---|
 | 6 |   make menuconfig     # This creates a file called ".config" | 
|---|
 | 7 |   make                # This creates the "busybox" executable | 
|---|
 | 8 |   make install        # or make CONFIG_PREFIX=/path/from/root install | 
|---|
 | 9 |  | 
|---|
 | 10 | The full list of configuration and install options is available by typing: | 
|---|
 | 11 |  | 
|---|
 | 12 |   make help | 
|---|
 | 13 |  | 
|---|
 | 14 | Quick Start: | 
|---|
 | 15 | ============ | 
|---|
 | 16 |  | 
|---|
 | 17 | The easy way to try out BusyBox for the first time, without having to install | 
|---|
 | 18 | it, is to enable all features and then use "standalone shell" mode with a | 
|---|
 | 19 | blank command $PATH. | 
|---|
 | 20 |  | 
|---|
 | 21 | To enable all features, use "make defconfig", which produces the largest | 
|---|
 | 22 | general-purpose configuration.  (It's allyesconfig minus debugging options, | 
|---|
 | 23 | optional packaging choices, and a few special-purpose features requiring | 
|---|
 | 24 | extra configuration to use.) | 
|---|
 | 25 |  | 
|---|
 | 26 |   make defconfig | 
|---|
 | 27 |   make | 
|---|
 | 28 |   PATH= ./busybox ash | 
|---|
 | 29 |  | 
|---|
 | 30 | Standalone shell mode causes busybox's built-in command shell to run | 
|---|
 | 31 | any built-in busybox applets directly, without looking for external | 
|---|
 | 32 | programs by that name.  Supplying an empty command path (as above) means | 
|---|
 | 33 | the only commands busybox can find are the built-in ones. | 
|---|
 | 34 |  | 
|---|
 | 35 | Note that the standalone shell requires CONFIG_BUSYBOX_EXEC_PATH | 
|---|
 | 36 | to be set appropriately, depending on whether or not /proc/self/exe is | 
|---|
 | 37 | available or not. If you do not have /proc, then point that config option | 
|---|
 | 38 | to the location of your busybox binary, usually /bin/busybox. | 
|---|
 | 39 |  | 
|---|
 | 40 | Configuring Busybox: | 
|---|
 | 41 | ==================== | 
|---|
 | 42 |  | 
|---|
 | 43 | Busybox is optimized for size, but enabling the full set of functionality | 
|---|
 | 44 | still results in a fairly large executable -- more than 1 megabyte when | 
|---|
 | 45 | statically linked.  To save space, busybox can be configured with only the | 
|---|
 | 46 | set of applets needed for each environment.  The minimal configuration, with | 
|---|
 | 47 | all applets disabled, produces a 4k executable.  (It's useless, but very small.) | 
|---|
 | 48 |  | 
|---|
 | 49 | The manual configurator "make menuconfig" modifies the existing configuration. | 
|---|
 | 50 | (For systems without ncurses, try "make config" instead.) The two most | 
|---|
 | 51 | interesting starting configurations are "make allnoconfig" (to start with | 
|---|
 | 52 | everything disabled and add just what you need), and "make defconfig" (to | 
|---|
 | 53 | start with everything enabled and remove what you don't need).  If menuconfig | 
|---|
 | 54 | is run without an existing configuration, make defconfig will run first to | 
|---|
 | 55 | create a known starting point. | 
|---|
 | 56 |  | 
|---|
 | 57 | Other starting configurations (mostly used for testing purposes) include | 
|---|
 | 58 | "make allbareconfig" (enables all applets but disables all optional features), | 
|---|
 | 59 | "make allyesconfig" (enables absolutely everything including debug features), | 
|---|
 | 60 | and "make randconfig" (produce a random configuration). | 
|---|
 | 61 |  | 
|---|
 | 62 | Configuring BusyBox produces a file ".config", which can be saved for future | 
|---|
 | 63 | use.  Run "make oldconfig" to bring a .config file from an older version of | 
|---|
 | 64 | busybox up to date. | 
|---|
 | 65 |  | 
|---|
 | 66 | Installing Busybox: | 
|---|
 | 67 | =================== | 
|---|
 | 68 |  | 
|---|
 | 69 | Busybox is a single executable that can behave like many different commands, | 
|---|
 | 70 | and BusyBox uses the name it was invoked under to determine the desired | 
|---|
 | 71 | behavior.  (Try "mv busybox ls" and then "./ls -l".) | 
|---|
 | 72 |  | 
|---|
 | 73 | Installing busybox consists of creating symlinks (or hardlinks) to the busybox | 
|---|
 | 74 | binary for each applet enabled in busybox, and making sure these symlinks are | 
|---|
 | 75 | in the shell's command $PATH.  Running "make install" creates these symlinks, | 
|---|
 | 76 | or "make install-hardlinks" creates hardlinks instead (useful on systems with | 
|---|
 | 77 | a limited number of inodes).  This install process uses the file | 
|---|
 | 78 | "busybox.links" (created by make), which contains the list of enabled applets | 
|---|
 | 79 | and the path at which to install them. | 
|---|
 | 80 |  | 
|---|
 | 81 | Installing links to busybox is not always necessary.  The special applet name | 
|---|
 | 82 | "busybox" (or with any optional suffix, such as "busybox-static") uses the | 
|---|
 | 83 | first argument to determine which applet to behave as, for example | 
|---|
 | 84 | "./busybox cat LICENSE".  (Running the busybox applet with no arguments gives | 
|---|
 | 85 | a list of all enabled applets.) The standalone shell can also call busybox | 
|---|
 | 86 | applets without links to busybox under other names in the filesystem.  You can | 
|---|
 | 87 | also configure a standaone install capability into the busybox base applet, | 
|---|
 | 88 | and then install such links at runtime with one of "busybox --install" (for | 
|---|
 | 89 | hardlinks) or "busybox --install -s" (for symlinks). | 
|---|
 | 90 |  | 
|---|
 | 91 | If you enabled the busybox shared library feature (libbusybox.so) and want | 
|---|
 | 92 | to run tests without installing, set your LD_LIBRARY_PATH accordingly when | 
|---|
 | 93 | running the executable: | 
|---|
 | 94 |  | 
|---|
 | 95 |   LD_LIBRARY_PATH=`pwd` ./busybox | 
|---|
 | 96 |  | 
|---|
 | 97 | Building out-of-tree: | 
|---|
 | 98 | ===================== | 
|---|
 | 99 |  | 
|---|
 | 100 | By default, the BusyBox build puts its temporary files in the source tree. | 
|---|
 | 101 | Building from a read-only source tree, or building multiple configurations from | 
|---|
 | 102 | the same source directory, requires the ability to put the temporary files | 
|---|
 | 103 | somewhere else. | 
|---|
 | 104 |  | 
|---|
 | 105 | To build out of tree, cd to an empty directory and configure busybox from there: | 
|---|
 | 106 |  | 
|---|
 | 107 |   make -f /path/to/source/Makefile defconfig | 
|---|
 | 108 |   make | 
|---|
 | 109 |   make install | 
|---|
 | 110 |  | 
|---|
 | 111 | Alternately, use the O=$BUILDPATH option (with an absolute path) during the | 
|---|
 | 112 | configuration step, as in: | 
|---|
 | 113 |  | 
|---|
 | 114 |   make O=/some/empty/directory allyesconfig | 
|---|
 | 115 |   cd /some/empty/directory | 
|---|
 | 116 |   make | 
|---|
 | 117 |   make CONFIG_PREFIX=. install | 
|---|
 | 118 |  | 
|---|
 | 119 | More Information: | 
|---|
 | 120 | ================= | 
|---|
 | 121 |  | 
|---|
 | 122 | Se also the busybox FAQ, under the questions "How can I get started using | 
|---|
 | 123 | BusyBox" and "How do I build a BusyBox-based system?"  The BusyBox FAQ is | 
|---|
 | 124 | available from http://www.busybox.net/FAQ.html or as the file | 
|---|
 | 125 | docs/busybox.net/FAQ.html in this tarball. | 
|---|