Elf dynamic linker stuff from Rich Felker.
[oweals/busybox.git] / docs / busybox.net / FAQ.html
1 <!--#include file="header.html" -->
2
3
4 <h3>Frequently Asked Questions</h3>
5
6 This is a collection of some of the more frequently asked questions
7 about BusyBox.  Some of the questions even have answers. If you
8 have additions to this FAQ document, we would love to add them,
9
10 <ol>
11 <li><a href="#getting_started">How can I get started using BusyBox?</a>
12 <li><a href="#build_system">How do I build a BusyBox-based system?</a>
13 <li><a href="#init">Busybox init isn't working!</a>
14 <li><a href="#kernel">Which Linux kernel versions are supported?</a>
15 <li><a href="#arch">Which architectures does BusyBox run on?</a>
16 <li><a href="#libc">Which C libraries are supported?</a>
17 <li><a href="#commercial">Can I include BusyBox as part of the software on my device?</a>
18 <li><a href="#bugs">I think I found a bug in BusyBox!  What should I do?!</a>
19 <li><a href="#job_control">Why do I keep getting "sh: can't access tty; job control
20         turned off" errors?  Why doesn't Control-C work within my shell?</a>
21 <li><a href="#demanding">I demand that you to add &lt;favorite feature&gt; right now!   How come
22         you don't answer all my questions on the mailing list instantly?  I demand
23         that you help me with all of my problems <em>Right Now</em>!</a>
24 <li><a href="#helpme">I need help with BusyBox!  What should I do?</a>
25 <li><a href="#contracts">I need you to add &lt;favorite feature&gt;!  Are the BusyBox developers willing to
26         be paid in order to fix bugs or add in &lt;favorite feature&gt;?  Are you willing to provide
27         support contracts?</a>
28 <li><a href="#external">Where can I find other small utilities since busybox does not include the features I want?</a></li>
29 <li><a href="#support">I think you guys are great and I want to help support your work!</a>
30 <li><a href="#optimize">I want to make busybox even smaller, how do I go about it?</a>
31
32
33
34 </ol>
35
36 <hr />
37 <p>
38 <h2><a name="getting_started">How can I get started using BusyBox?</a></h2>
39 <p> If you just want to try out busybox without installing it, download the
40     tarball, extract it, run "make allyesconfig", and then run "make".
41 </p>
42 <p>
43     This will create a busybox binary with all features enabled.  To try
44     out a busybox applet, type "./busybox [appletname] [options]", for
45     example "./busybox ls -l" or "./busybox cat LICENSE".  Type "./busybox"
46     to see a command list, and "busybox appletname --help" to see a brief
47     usage message for a given applet.
48 </p>
49 <p>
50     BusyBox uses the name it was invoked under to determine which applet is
51     being invoked.  (Try "mv busybox ls" and then "./ls -l".)  Installing
52     busybox consists of creating symlinks (or hardlinks) to the busybox
53     binary for each applet in busybox, and making sure these links are in
54     the shell's command $PATH.  The special applet name "busybox" (or with
55     any optional suffix, such as "busybox-static") uses the first argument
56     to determine which applet to run, as shown above.
57 </p>
58 <p>
59     BusyBox also has a feature called the "standalone shell", where the busybox
60     shell runs any built-in applets before checking the command path.  This
61     feature is also enabled by "make allyesconfig", and to try it out run
62     the command line "PATH= ./busybox ash".  This will blank your command path
63     and run busybox as your command shell, so the only commands it can find
64     (without an explicit path such as /bin/ls) are the built-in busybox ones.
65     This is another good way to see what's built into busybox.  (Note that the
66     standalone shell is dependent on the existence of /proc/self/exe, so before
67     using it in a chroot environment you must mount /proc.)
68 </p>
69 <p>
70     To build a smaller busybox binary, run "make menuconfig" and disable the
71     features you don't need.  (Or run "make allnoconfig" and then use
72     menuconfig to add just the features you need.  Don't forget to recompile
73     with "make" once you've finished configuring.)
74 </p>
75 <hr/>
76 <p/>
77 <h2><a name="build_system">How do I build a BusyBox-based system?</a></h2>
78 <p>
79     BusyBox is a package that replaces a dozen standard packages, but it is
80     not by itself a complete bootable system.  Building an entire Linux
81     distribution from source is a bit beyond the scope of this FAQ, but it
82     understandably keeps cropping up on the mailing list, so here are some
83     pointers.
84 </p>
85 <p>
86     Start by learning how to strip a working system down to the bare essentials
87     needed to run one or two commands, so you know what it is you actually
88     need.  An excellent practical place to do
89     this is the <a href="http://www.tldp.org/HOWTO/Bootdisk-HOWTO/">Linux
90     BootDisk Howto</a>, or for a more theoretical approach try
91     <a href="http://www.tldp.org/HOWTO/From-PowerUp-To-Bash-Prompt-HOWTO.html">From
92     PowerUp to Bash Prompt</a>.
93 </p>
94 <p>
95     To learn how to build a working Linux system entirely from source code,
96     the place to go is the <a href="http://www.linuxfromscratch.org">Linux
97     From Scratch</a> project.  They have an entire book of step-by-step
98     instructions you can
99     <a href="http://www.linuxfromscratch.org/lfs/view/stable/">read online</a>
100     or
101     <a href="http://www.linuxfromscratch.org/lfs/downloads/stable/">download</a>.
102     Be sure to check out the other sections of their main page, including
103     Beyond Linux From Scratch, Hardened Linux From Scratch, their Hints
104     directory, and their LiveCD project.  (They also have mailing lists which
105     are better sources of answers to Linux-system building questions than
106     the busybox list.)
107 </p>
108 <p>
109     If you want an automated yet customizable system builder which produces
110     a BusyBox and uClibc based system, try
111     <a href="http://buildroot.uclibc.org">buildroot</a>, which is
112     another project by the maintainer of the uClibc (Erik Andersen).
113     Download the tarball, extract it, unset CC, make.
114     For more instructions, see the website.
115 </p>
116
117 <hr />
118 <p>
119 <h2><a name="init">Busybox init isn't working!</a></h2>
120 <p>
121     Build a statically linked version of the following "hello world" program
122     with your cross compiler toolchain.
123 </p>
124 <pre>
125 #include &lt;stdio.h&gt;
126
127 int main(int argc, char *argv)
128 {
129   printf("Hello world!\n");
130   sleep(999999999);
131 }
132 </pre>
133
134 <p>
135     Now try to boot your device with an "init=" argument pointing to your
136     hello world program.  Did you see the hello world message?  Until you
137     do, don't bother messing with busybox init.
138 </p>
139
140 <p>
141     Once you've got it working statically linked, try getting it to work
142     dynamically linked.  Then read the FAQ entry before this one.
143 </p>
144
145 <hr />
146 <p>
147 <h2><a name="kernel">Which Linux kernel versions are supported?</a></h2>
148 <p>
149     Full functionality requires Linux 2.4.x or better.  (Earlier versions may
150     still work, but are no longer regularly tested.)  A large fraction of the
151     code should run on just about anything.  While the current code is fairly
152     Linux specific, it should be fairly easy to port the majority of the code
153     to support, say, FreeBSD or Solaris, or Mac OS X, or even Windows (if you
154     are into that sort of thing).
155 </p>
156 <hr />
157 <p>
158 <h2><a name="arch">Which architectures does BusyBox run on?</a></h2>
159 <p>
160     BusyBox in general will build on any architecture supported by gcc.
161     Kernel module loading for 2.4 Linux kernels is currently
162     limited to ARM, CRIS, H8/300, x86, ia64, x86_64, m68k, MIPS, PowerPC,
163     S390, SH3/4/5, Sparc, v850e, and x86_64 for 2.4.x kernels.
164 </p>
165 <p>
166     With 2.6.x kernels, module loading support should work on all architectures.
167 </p>
168 <hr />
169 <p>
170 <h2><a name="libc">Which C libraries are supported?</a></h2>
171 <p>
172     On Linux, BusyBox releases are tested against uClibc (0.9.27 or later) and
173     glibc (2.2 or later).  Both should provide full functionality with busybox,
174     and if you find a bug we want to hear about it.
175 </p>
176 <p>
177     Linux-libc5 is no longer maintained (and has no known advantages over
178     uClibc), dietlibc is known to have numerous unfixed bugs, and klibc is
179     missing too many features to build BusyBox.  If you require a small C
180     library for Linux, the busybox developers recommend uClibc.
181 </p>
182 <p>
183     Some BusyBox applets have been built and run under a combination
184     of newlib and libgloss (see
185     <a href="http://www.busybox.net/lists/busybox/2005-March/013759.html">this thread</a>).
186     This is still experimental, but may be supported in a future release.
187 </p>
188 <hr />
189 <p>
190 <h2><a name="commercial">Can I include BusyBox as part of the software on my device?</a></h2>
191
192     Yes.  As long as you <a href="http://busybox.net/license.html">fully comply
193     with the generous terms of the GPL BusyBox license</a> you can ship BusyBox
194     as part of the software on your device.
195
196     <br>
197     <a href="#support">Please consider sharing some of the money you make.</a>
198
199
200 <hr />
201 <p>
202 <h2><a name="bugs">I think I found a bug in BusyBox!  What should I do?</a></h2>
203 <p>
204
205
206 <p>
207
208     If you simply need help with using or configuring BusyBox, please submit a
209     detailed description of your problem to the BusyBox mailing list at <a
210     href="mailto:busybox@mail.busybox.net"> busybox@mail.busybox.net</a>.
211     Please do not send email to individual developers asking
212     for private help unless you are planning on paying for consulting services.
213     When we answer questions on the BusyBox mailing list, it helps everyone,
214     while private answers help only you...
215
216     <p>
217
218     The developers of BusyBox are busy people, and have only so much they can
219     keep in their brains at a time.  As a result, bug reports sometimes get
220     lost when posted to the mailing list.  To prevent your bug report from
221     getting lost, if you find a bug in BusyBox, please use the <a
222     href="http://bugs.busybox.net/">BusyBox Bug and Patch Tracking System</a>
223     to submit a detailed bug report.
224
225     <p>
226
227     The same also applies to patches... Regardless of whether your patch is a
228     bug fix or adds shiney new features, please post your patch to the <a
229     href="http://bugs.busybox.net/">BusyBox Bug and Patch Tracking System</a>
230     to make certain it is properly considered.
231
232
233 <hr />
234 <p>
235 <h2><a name="job_control">Why do I keep getting "sh: can't access tty; job control
236         turned off" errors?  Why doesn't Control-C work within my shell?</a></h2>
237 <p>
238
239     Job control will be turned off since your shell can not obtain a controlling
240     terminal.  This typically happens when you run your shell on /dev/console.
241     The kernel will not provide a controlling terminal on the /dev/console
242     device.  Your should run your shell on a normal tty such as tty1 or ttyS0
243     and everything will work perfectly.  If you <em>REALLY</em> want your shell
244     to run on /dev/console, then you can hack your kernel (if you are into that
245     sortof thing) by changing drivers/char/tty_io.c to change the lines where
246     it sets "noctty = 1;" to instead set it to "0".  I recommend you instead
247     run your shell on a real console...
248
249
250 <hr />
251 <p>
252 <h2><a name="demanding">I demand that you to add &lt;favorite feature&gt; right now!   How come
253         you don't answer all my questions on the mailing list instantly?  I demand
254         that you help me with all of my problems <em>Right Now</em>!</a></h2>
255 <p>
256
257     You have not paid us a single cent and yet you still have the product of
258     many years of our work.  We are not your slaves!  We work on BusyBox
259     because we find it useful and interesting.  If you go off flaming us, we
260     will ignore you.
261
262
263 <hr />
264 <p>
265 <h2><a name="helpme">I need help with BusyBox!  What should I do?</a></h2>
266 <p>
267
268     If you find that you need help with BusyBox, you can ask for help on the
269     BusyBox mailing list at busybox@mail.busybox.net.  In addition to the BusyBox
270     mailing list, Erik (andersee), Manuel (mjn3), Rob (landley) and others are
271     known to hang out on the uClibc IRC channel: #uclibc on irc.freenode.net.
272     (Daily logs of that IRC channel, going back to 2002, are available
273     <a href="http://ibot.Rikers.org/%23uclibc/">here</a>.)
274
275     <p>
276
277     <b>Please do not send private email to Rob, Erik, Manuel, or the other
278     BusyBox contributors asking for private help unless you are planning on
279     paying for consulting services.</b>
280
281     <p>
282
283     When we answer questions on the BusyBox mailing list, it helps everyone
284     since people with similar problems in the future will be able to get help
285     by searching the mailing list archives.  Private help is reserved as a paid
286     service.  If you need to use private communication, or if you are serious
287     about getting timely assistance with BusyBox, you should seriously consider
288     paying for consulting services.
289
290     <p>
291
292
293
294 <hr />
295 <p>
296 <h2><a name="contracts">I need you to add &lt;favorite feature&gt;!  Are the BusyBox
297         developers willing to be paid in order to fix bugs or add in &lt;favorite feature&gt;?
298         Are you willing to provide support contracts?</a></h2>
299 <p>
300
301     Sure!  Now you have our attention!  What you should do is contact <a
302         href="mailto:andersen@codepoet.org">Erik Andersen</a> of <a
303         href="http://codepoet-consulting.com/">CodePoet Consulting</a> to bid
304     on your project.  If Erik is too busy to personally add your feature, there
305     are many other active BusyBox contributors who will almost certainly be able
306     to help you out.  Erik can contact them privately, and may even let you to
307     post your request for services on the mailing list.
308
309
310 <hr />
311 <p>
312 <h2><a name="external">Where can I find other small utilities since busybox 
313         does not include the features I want?</a></h2>
314 <p>
315         We maintain such a <a href="tinyutils.html">list</a> on this site!
316
317
318 <hr />
319 <p>
320 <h2><a name="support">I think you guys are great and I want to help support your work!</a></h2>
321 <p>
322
323     Wow, that would be great!  If you would like to make a donation to help
324     support BusyBox, and/or request features, you can click here:
325
326     <!-- Begin PayPal Logo -->
327     <center>
328     <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
329         <input type="hidden" name="cmd" value="_xclick">
330         <input type="hidden" name="business" value="andersen@codepoet.org">
331         <input type="hidden" name="item_name" value="Support BusyBox">
332         <input type="hidden" name="image_url" value="http://codepoet-consulting.com/images/codepoet.png">
333         <input type="hidden" name="no_shipping" value="1">
334         <input type="image" src="images/donate.png" name="submit" alt="Make donation using PayPal">
335     </form>
336     </center>
337     <!-- End PayPal Logo -->
338
339     If you prefer to contact Erik directly to make a donation, donate hardware,
340     request support, etc, you can contact
341     <a href="http://codepoet-consulting.com/">CodePoet Consulting</a> here.
342     CodePoet Consulting can accept both Visa and MasterCard for those that do
343     not trust PayPal...
344
345 <hr />
346 <p>
347 <h2><a name="optimize">I want to make busybox even smaller, how do I go about it?</a></h2>
348 <p>
349         To conserve bytes it's good to know where they're being used, and the
350         size of the final executable isn't always a reliable indicator of
351         the size of the components (since various structures are rounded up,
352         so a small change may not even be visible by itself, but many small
353         savings add up).
354 </p>
355 <p>
356         The busybox Makefile can generate a report of how much space is actually
357         being used by each function and variable.  Run "<b>make sizes</b>" (preferably
358         with CONFIG_DEBUG off) to get a list of symbols and the amount of
359         space allocated for each one, sorted by size.
360 </p>
361 <hr />
362
363
364
365 <br>
366 <br>
367 <br>
368
369 <!--#include file="footer.html" -->