Commit 94600799 authored by Thomas Petazzoni's avatar Thomas Petazzoni Committed by Peter Korsgaard
Browse files

documentation: Update to explain how board support works

parent beb43c7d
Loading
Loading
Loading
Loading
+36 −81
Original line number Diff line number Diff line
@@ -578,87 +578,42 @@ $(ZLIB_DIR)/libz.a: $(ZLIB_DIR)/.configured

    <h2 id="board_support"> Creating your own board support</h2>

    <p>Creating your own board support in Buildroot allows you to have
    a convenient place to store your project's target filesystem skeleton
    and configuration files for Buildroot, Busybox, uClibc, and the kernel.

    <p>Follow these steps to integrate your board in Buildroot:</p>

    <ol>
      <li>Create a new directory in <code>target/device/</code> named
      after your company or organization</li>

      <li>Add a line <code>source
      "target/device/yourcompany/Config.in"</code> in
      <code>target/device/Config.in</code> so that your board appears
      in the configuration system</li>

      <li>In <code>target/device/yourcompany/</code>, create a
      directory for your project. This way, you'll be able to store
      several of your company's projects inside Buildroot.</li>

      <li>Create a <code>target/device/yourcompany/Config.in</code>
      file that looks like the following:

<pre>
menuconfig BR2_TARGET_COMPANY
	bool "Company projects"

if BR2_TARGET_COMPANY

config BR2_TARGET_COMPANY_PROJECT_FOOBAR
	bool "Support for Company project Foobar"
	help
	  This option enables support for Company project Foobar

endif
</pre>

      Of course, you should customize the different values to match your
      company/organization and your project. This file will create a
      menu entry that contains the different projects of your
      company/organization.</li>

      <li>Create a <code>target/device/yourcompany/Makefile.in</code>
      file that looks like the following:

<pre>
ifeq ($(BR2_TARGET_COMPANY_PROJECT_FOOBAR),y)
include target/device/yourcompany/project-foobar/Makefile.in
endif
</pre>

      </li>

      <li>Create the
      <code>target/device/yourcompany/project-foobar/Makefile.in</code>
      file. It is recommended that you define a
      <code>BOARD_PATH</code> variable set to
      <code>target/device/yourcompany/project-foobar</code> as it
      will simplify further definitions. Then, the file might define
      one or more of the following variables:
        <ul>
          <li><code>TARGET_SKELETON</code> to a directory that contains
          the target skeleton for your project. If this variable is
          defined, this target skeleton will be used instead of the
          default one. If defined, the convention is to define it to
          <code>$(BOARD_PATH)/target_skeleton</code> so that the target
          skeleton is stored in the board specific directory.</li>
        </ul>
      </li>

      <li>In the
      <code>target/device/yourcompany/project-foobar/</code>
      directory you can store configuration files for the kernel,
      Busybox or uClibc.

      You can furthermore create one or more preconfigured configuration
      files, referencing those files. These config files are named
      <code>something_defconfig</code> and are stored in the toplevel
      <code>configs/</code> directory. Your users will then be able
      to run <code>make something_defconfig</code> and get the right
      configuration for your project</li>
    </ol>
    <p>Creating your own board support in Buildroot allows users of a
    particular hardware platform to easily build a system that is
    known to work.</p>

    <p>To do so, you need to create a normal Buildroot configuration
    that builds a basic system for the hardware: toolchain, kernel,
    bootloader, filesystem and a simple Busybox-only userspace. No
    specific package should be selected: the configuration should be
    as minimal as possible, and should only build a working basic
    Busybox system for the target platform. You can of course use more
    complicated configurations for your internal projects, but the
    Buildroot project will only integrate basic board
    configurations. This is because package selections are highly
    application-specific.</p>

    <p>Once you have a known working configuration, run <code>make
    savedefconfig</code>. This will generate a
    minimal <code>defconfig</code> file at the root of the Buildroot
    source tree. Move this file into the <code>configs/</code>
    directory, and rename it <code>MYBOARD_defconfig</code>.</p>

    <p>It is recommended to use as much as possible upstream versions
    of the Linux kernel and bootloaders, and to use as much as
    possible default kernel and bootloader configurations. If they are
    incorrect for your platform, we encourage you to send fixes to the
    corresponding upstream projects.</p>

    <p>However, in the mean time, you may want to store kernel or
    bootloader configuration or patches specific to your target
    platform. To do so, create a
    directory <code>board/MANUFACTURER</code> and a
    subdirectory <code>board/MANUFACTURER/BOARDNAME</code> (after
    replacing, of course, MANUFACTURER and BOARDNAME with the
    appropriate values, in lower case letters). You can then store
    your patches and configurations in these directories, and
    reference them from the main Buildroot configuration.</p>

    <h2 id="using_toolchain">Using the generated toolchain outside Buildroot</h2>