|
@@ -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>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/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>
|
|
|
|
- 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
|
|
<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
|
|
|
|
- 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
|
|
<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
|
|
|
|
- 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
|
|
<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
|
|
|
|
- <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>
|
|
<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
|
|
|
|
- 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>
|
|
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
|
|
|
|
- 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>.
|
|
<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
|
|
<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
|