Commit 8463801f authored by Peter Korsgaard's avatar Peter Korsgaard
Browse files

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

parents ab2f5567 49b3ac65
Loading
Loading
Loading
Loading
+92 −53
Original line number Diff line number Diff line
@@ -182,18 +182,23 @@
 $ make
</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>
    <ul>
      <li>Download source files (as required)</li>
      <li>Configure cross-compile toolchain</li>
      <li>Build/install cross-compile toolchain</li>
      <li>Configure, build and install the cross-compiling toolchain
      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 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>
    </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>.
    This directory contains several subdirectories:</p>
@@ -330,19 +335,14 @@
      completely rebuild your toolchain and tools, these changes will be
      lost.</li>

      <li>Customize the target filesystem skeleton available under <code>
      fs/skeleton/</code>. You can customize configuration files or other
      stuff here. However, the full file hierarchy is not yet present
      because it's created during the compilation process. Therefore, you
      can't do everything on this target filesystem skeleton, but changes to
      it do remain even if you completely rebuild the cross-compilation
      toolchain and the tools. <br /> You can also customize the <code>
      target/generic/device_table.txt</code> file, which is used by the
      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>Create your own <i>target skeleton</i>. You can start with
      the default skeleton available under <code>fs/skeleton</code>
      and then customize it to suit your
      needs. The <code>BR2_ROOTFS_SKELETON_CUSTOM</code>
      and <code>BR2_ROOTFS_SKELETON_CUSTOM_PATH</code> will allow you
      to specify the location of your custom skeleton. At build time,
      the contents of the skeleton are copied to output/target before
      any package installation.</li>

      <li>Add support for your own target in Buildroot, so that you
      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>,
    <code>ARCH-linux-ld</code>, etc.</p>

    <p><b>Important</b>: do not try to move a gcc-3.x toolchain to another
    directory &mdash; it won't work because there are some hardcoded paths
    in the gcc-3.x configuration. If you are using a current gcc-4.x, it is
    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 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
    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>

    <p>It might be useful not to use the toolchain generated by
    Buildroot, for example if you already have a toolchain that is known
    to work for your specific CPU, or if 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>). Buildroot supports using an <i>external
    toolchain</i>.</p>
    <p>Using an already existing toolchain is useful for different
    reasons:</p>

    <ul>
      <li>you already have a toolchain that is known to work for your
	specific CPU</li>
      <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
    <code>Toolchain</code> menu, and :</p>
@@ -727,6 +733,17 @@ endif
    <ul>
      <li>Select the <code>External binary toolchain</code> toolchain
      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>
      appropriately. It should be set to a path where a bin/ directory
      contains your cross-compiling tools</li>
@@ -735,18 +752,12 @@ endif
      correspond to your cross-compiling tools</li>
    </ul>

    <p>If you are using an external toolchain based on <i>uClibc</i>, the
    <code>Core C library from the external toolchain</code> and
    <code>Libraries to copy from the external toolchain</code> options
    should already have correct values. However, if your external
    toolchain is based on <i>glibc</i>, you'll have to change these values
    according to your cross-compiling toolchain.</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>
    <p>Our external toolchain support has been tested with toolchains
    from CodeSourcery, toolchains generated
    by <a href="http://ymorin.is-a-geek.org/dokuwiki/projects/crosstool">Crosstool-NG</a>,
    and toolchains generated by Buildroot itself. In general, all
    toolchains that support the <i>sysroot</i> feature should
    work. If not, do not hesitate to contact the developers.</p>

    <h2 id="add_packages">Adding new packages to Buildroot</h2>

@@ -981,9 +992,12 @@ $(eval $(call GENTARGETS,package,libfoo,host))
    <code>libfoo</code>) :</p>

    <ul>
      <li><code>LIBFOO_VERSION</code>, mandatory, must contain the version
      of the package. Note that if <code>HOST_LIBFOO_VERSION</code> doesn't
      exist, it is assumed to be the same as <code>LIBFOO_VERSION</code>.<br/>
      <li><code>LIBFOO_VERSION</code>, mandatory, must contain the
      version of the package. Note that
      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>

      <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
      package after extraction.</li>

      <li><code>LIBFOO_SITE</code> may contain the Internet location of the
      tarball of the package. 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
      <li><code>LIBFOO_SITE</code> may contain the Internet location
      of the package. It can either be the HTTP or FTP location of a
      tarball, or the URL of a Git or Subversion repository
      (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>.
      <br/>Example:
      <code>LIBFOO_SITE=http://www.libfoosoftware.org/libfoo</code>.</li>
      <br/>Examples:<br/>
      <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
      of package name) that are required for the current target package to