Merge branch 'for-2010.11/doc-updates' of git://git.busybox.net/~tpetazzoni/git/buildroot

This commit is contained in:
Peter Korsgaard 2010-11-24 16:40:28 +01:00
commit 8463801fa9

View File

@ -182,18 +182,23 @@
$ make $ make
</pre> </pre>
<p>You <b>should never</b> use <code>make -jN</code> with
Buildroot: it does not support <i>top-level parallel
make</i>. Instead, use the <code>BR2_JLEVEL</code> option to tell
Buildroot to run each package compilation with <pre>make
-jN</pre>.</p>
<p>This command will generally perform the following steps:</p> <p>This command will generally perform the following steps:</p>
<ul> <ul>
<li>Download source files (as required)</li> <li>Download source files (as required)</li>
<li>Configure cross-compile toolchain</li> <li>Configure, build and install the cross-compiling toolchain
<li>Build/install cross-compile toolchain</li> if an internal toolchain is used, or import a toolchain if an
external toolchain is used</li>
<li>Build/install selected target packages</li> <li>Build/install selected target packages</li>
<li>Build a kernel image</li> <li>Build a kernel image, if selected</li>
<li>Build a bootloader image, if selected</li>
<li>Create a root filesystem in selected formats</li> <li>Create a root filesystem in selected formats</li>
</ul> </ul>
<p>Some of the above steps might not be performed if they are not
selected in the Buildroot configuration.
</p>
<p>Buildroot output is stored in a single directory, <code>output/</code>. <p>Buildroot output is stored in a single directory, <code>output/</code>.
This directory contains several subdirectories:</p> This directory contains several subdirectories:</p>
@ -330,19 +335,14 @@
completely rebuild your toolchain and tools, these changes will be completely rebuild your toolchain and tools, these changes will be
lost.</li> lost.</li>
<li>Customize the target filesystem skeleton available under <code> <li>Create your own <i>target skeleton</i>. You can start with
fs/skeleton/</code>. You can customize configuration files or other the default skeleton available under <code>fs/skeleton</code>
stuff here. However, the full file hierarchy is not yet present and then customize it to suit your
because it's created during the compilation process. Therefore, you needs. The <code>BR2_ROOTFS_SKELETON_CUSTOM</code>
can't do everything on this target filesystem skeleton, but changes to and <code>BR2_ROOTFS_SKELETON_CUSTOM_PATH</code> will allow you
it do remain even if you completely rebuild the cross-compilation to specify the location of your custom skeleton. At build time,
toolchain and the tools. <br /> You can also customize the <code> the contents of the skeleton are copied to output/target before
target/generic/device_table.txt</code> file, which is used by the any package installation.</li>
tools that generate the target filesystem image to properly set
permissions and create device nodes.<br /> These customizations are
deployed into <code>output/target/</code> just before the actual image
is made. Simply rebuilding the image by running make should propagate
any new changes to the image.</li>
<li>Add support for your own target in Buildroot, so that you <li>Add support for your own target in Buildroot, so that you
have your own target skeleton (see <a href="#board_support">this have your own target skeleton (see <a href="#board_support">this
@ -671,12 +671,9 @@ endif
then to use <code>ARCH-linux-gcc</code>, <code>ARCH-linux-objdump</code>, then to use <code>ARCH-linux-gcc</code>, <code>ARCH-linux-objdump</code>,
<code>ARCH-linux-ld</code>, etc.</p> <code>ARCH-linux-ld</code>, etc.</p>
<p><b>Important</b>: do not try to move a gcc-3.x toolchain to another <p>It is possible to relocate the toolchain &mdash; but
directory &mdash; it won't work because there are some hardcoded paths then <code>--sysroot</code> must be passed every time the compiler
in the gcc-3.x configuration. If you are using a current gcc-4.x, it is is called to tell where the libraries and header files are.</p>
possible to relocate the toolchain &mdash; but then <code>--sysroot</code>
must be passed every time the compiler is called to tell where the
libraries and header files are.</p>
<p>It is also possible to generate the Buildroot toolchain in a <p>It is also possible to generate the Buildroot toolchain in a
directory other than <code>output/staging</code> by using the <code> directory other than <code>output/staging</code> by using the <code>
@ -713,13 +710,22 @@ endif
<h2 id="external_toolchain">Using an external toolchain</h2> <h2 id="external_toolchain">Using an external toolchain</h2>
<p>It might be useful not to use the toolchain generated by <p>Using an already existing toolchain is useful for different
Buildroot, for example if you already have a toolchain that is known reasons:</p>
to work for your specific CPU, or if the toolchain generation feature
of Buildroot is not sufficiently flexible for you (for example if you <ul>
need to generate a system with <i>glibc</i> instead of <li>you already have a toolchain that is known to work for your
<i>uClibc</i>). Buildroot supports using an <i>external specific CPU</li>
toolchain</i>.</p> <li>you want to speed up the Buildroot build process by skipping
the long toolchain build part</li>
<li>the toolchain generation feature of Buildroot is not
sufficiently flexible for you (for example if you need to
generate a system with <i>glibc</i> instead of
<i>uClibc</i>)</li>
</ul>
<p>Buildroot supports using existing toolchains through a
mechanism called <i>external toolchain</i>.</p>
<p>To enable the use of an external toolchain, go to the <p>To enable the use of an external toolchain, go to the
<code>Toolchain</code> menu, and :</p> <code>Toolchain</code> menu, and :</p>
@ -727,6 +733,17 @@ endif
<ul> <ul>
<li>Select the <code>External binary toolchain</code> toolchain <li>Select the <code>External binary toolchain</code> toolchain
type</li> type</li>
<li>Select the appropriate <code>External toolchain C
library</code></li>
<li>Select the appropriate values for <code>Enable large
file</code>, <code>Enable IPv6</code>, <code>Enable
RPC</code>, <code>Enable toolchain
locale/i18n</code>, <code>Enable WCHAR</code>, <code>Enable
program invocation</code>, <code>Build/install c++ compiler and
libstdc++</code>, according to the configuration of your
external toolchain. Buildroot will check those values at the
beginning of the compilation process and will tell you if you
used incorrect values.</li>
<li>Adjust the <code>External toolchain path</code> <li>Adjust the <code>External toolchain path</code>
appropriately. It should be set to a path where a bin/ directory appropriately. It should be set to a path where a bin/ directory
contains your cross-compiling tools</li> contains your cross-compiling tools</li>
@ -735,18 +752,12 @@ endif
correspond to your cross-compiling tools</li> correspond to your cross-compiling tools</li>
</ul> </ul>
<p>If you are using an external toolchain based on <i>uClibc</i>, the <p>Our external toolchain support has been tested with toolchains
<code>Core C library from the external toolchain</code> and from CodeSourcery, toolchains generated
<code>Libraries to copy from the external toolchain</code> options by <a href="http://ymorin.is-a-geek.org/dokuwiki/projects/crosstool">Crosstool-NG</a>,
should already have correct values. However, if your external and toolchains generated by Buildroot itself. In general, all
toolchain is based on <i>glibc</i>, you'll have to change these values toolchains that support the <i>sysroot</i> feature should
according to your cross-compiling toolchain.</p> work. If not, do not hesitate to contact the developers.</p>
<p>To generate external toolchains, we recommend using
<a href="http://ymorin.is-a-geek.org/dokuwiki/projects/crosstool">Crosstool-NG</a>.
It allows generating toolchains based on <i>uClibc</i>, <i>glibc</i>
and <i>eglibc</i> for a wide range of architectures and has good
community support.</p>
<h2 id="add_packages">Adding new packages to Buildroot</h2> <h2 id="add_packages">Adding new packages to Buildroot</h2>
@ -981,9 +992,12 @@ $(eval $(call GENTARGETS,package,libfoo,host))
<code>libfoo</code>) :</p> <code>libfoo</code>) :</p>
<ul> <ul>
<li><code>LIBFOO_VERSION</code>, mandatory, must contain the version <li><code>LIBFOO_VERSION</code>, mandatory, must contain the
of the package. Note that if <code>HOST_LIBFOO_VERSION</code> doesn't version of the package. Note that
exist, it is assumed to be the same as <code>LIBFOO_VERSION</code>.<br/> if <code>HOST_LIBFOO_VERSION</code> doesn't exist, it is assumed
to be the same as <code>LIBFOO_VERSION</code>. It can also be a
Subversion or Git branch or tag, for packages that are fetched
directly from their revision control system.<br/>
Example: <code>LIBFOO_VERSION = 0.1.2</code></li> Example: <code>LIBFOO_VERSION = 0.1.2</code></li>
<li><code>LIBFOO_SOURCE</code> may contain the name of the tarball of <li><code>LIBFOO_SOURCE</code> may contain the name of the tarball of
@ -1002,13 +1016,38 @@ $(eval $(call GENTARGETS,package,libfoo,host))
in the package directory inside Buildroot will be applied to the in the package directory inside Buildroot will be applied to the
package after extraction.</li> package after extraction.</li>
<li><code>LIBFOO_SITE</code> may contain the Internet location of the <li><code>LIBFOO_SITE</code> may contain the Internet location
tarball of the package. If <code>HOST_LIBFOO_SITE</code> is not of the package. It can either be the HTTP or FTP location of a
specified, it defaults to <code>LIBFOO_SITE</code>. If none are tarball, or the URL of a Git or Subversion repository
specified, then the location is assumed to be (see <code>LIBFOO_SITE_METHOD</code>
below). If <code>HOST_LIBFOO_SITE</code> is not specified, it
defaults to <code>LIBFOO_SITE</code>. If none are specified,
then the location is assumed to be
<code>http://$$(BR2_SOURCEFORGE_MIRROR).dl.sourceforge.net/sourceforge/packagename</code>. <code>http://$$(BR2_SOURCEFORGE_MIRROR).dl.sourceforge.net/sourceforge/packagename</code>.
<br/>Example: <br/>Examples:<br/>
<code>LIBFOO_SITE=http://www.libfoosoftware.org/libfoo</code>.</li> <code>LIBFOO_SITE=http://www.libfoosoftware.org/libfoo</code><br/>
<code>LIBFOO_SITE=http://svn.xiph.org/trunk/Tremor/</code></li>
<li><code>LIBFOO_SITE_METHOD</code> may contain the method to
fetch the package source code. It can either
be <code>WGET</code> (for normal FTP/HTTP downloads of
tarballs), <code>SVN</code> or <code>GIT</code>. When not
specified, it is guessed from the URL given
in <code>LIBFOO_SITE</code>: <code>git://</code>
and <code>svn://</code> URLs will use the <code>GIT</code>
and <code>SVN</code> methods respectively. All other URL-types
will use the <code>WGET</code> method. So for example, in the
case of a package whose source code is available through
Subversion repository on HTTP, one <i>must</i>
specifiy <code>LIBFOO_SITE_METHOD=SVN</code>. For <code>SVN</code>
and <code>GIT</code> methods, what Buildroot does is a
checkout/clone of the repository which is then tarballed and
stored into the download cache. Next builds will not
checkout/clone again, but will use the tarball
directly. When <code>HOST_LIBFOO_SITE_METHOD</code> is not
specified, it defaults to the value
of <code>LIBFOO_SITE_METHOD</code>. See <code>package/multimedia/tremor/</code>
for an example.</li>
<li><code>LIBFOO_DEPENDENCIES</code> lists the dependencies (in terms <li><code>LIBFOO_DEPENDENCIES</code> lists the dependencies (in terms
of package name) that are required for the current target package to of package name) that are required for the current target package to