diff options
Diffstat (limited to 'docs/buildroot.html')
| -rw-r--r-- | docs/buildroot.html | 145 | 
1 files changed, 92 insertions, 53 deletions
diff --git a/docs/buildroot.html b/docs/buildroot.html index 0a0114a3b..144461298 100644 --- a/docs/buildroot.html +++ b/docs/buildroot.html @@ -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 — 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 — 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 — 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  | 
