kumquat-buildroot/docs/manual/customize-store.txt
Thomas De Schampheleire 77007ad950 manual/user guide: high-level restructuring
This patch performs some additional restructuring of the manual,
specifically in the User Guide. In detail:

- Rename 'Daily use' to 'General Buildroot usage'
- Move chapters 'make tips', 'Eclipse integration', and 'Advanced usage' as
  sections under the 'General Buildroot usage' chapter.
- Rename 'Details on Buildroot configuration' into 'Buildroot configuration'
- Rework the 'Customization' section as follows:
  - Move the short section on debugging the external toolchain wrapper into
    the rest of the explanation on external toolchains.
  - Remove the now redundant section on toolchains, as this is already
    explained in much more detail in the 'Buildroot configuration' chapter.
  - Move the sections on busybox/uclibc/kernel configuration from chapter
    'Customization' into a separate chapter 'Configuration of other
    components'.
  - Rename the remaining part of the original 'Customization' chapter into
    'Project-specific customization' and fold it together with the next
    chapter 'Storing the configuration'
- Remove the chapter 'Going further in Buildroot innards' thanks to:
  - Moving the chapter 'How Buildroot works' to the Developer guide.
  - Moving the 'Advanced Buildroot usage' section to the 'General Buildroot
    usage' chapter.
- Remove the chapter 'Hacking Buildroot' by:
  - Adding a reference to adding packages to the 'Project-specific
    customizations' chapter
  - Leaving out the explicit reference to creating board support, as this is
    part of the previous chapter already, so an extra reference is
    redundant.

Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2014-08-21 15:39:32 +02:00

153 lines
7.1 KiB
Plaintext

// -*- mode:doc; -*-
// vim: set syntax=asciidoc:
[[customize-store-basics]]
=== Basics for storing the configuration
When you have a buildroot configuration that you are satisfied with and
you want to share it with others, put it under revision control or move
on to a different buildroot project, you need to store the configuration
so it can be rebuilt later. The configuration that needs to be stored
consists of the buildroot configuration, the configuration files for
packages that you use (kernel, busybox, uClibc, ...), and your rootfs
modifications.
[[customize-store-buildroot-config]]
==== Buildroot configuration
For storing the buildroot configuration itself, buildroot offers the
following command: +make savedefconfig+.
This strips the buildroot configuration down by removing configuration
options that are at their default value. The result is stored in a file
called +defconfig+. If you want to save it in another place, change
the +BR2_DEFCONFIG+ option, or call make with +make savedefconfig
BR2_DEFCONFIG=<path-to-defconfig>+. The usual place is
+configs/<boardname>_defconfig+. The configuration can then be rebuilt by
running +make <boardname>_defconfig+.
Alternatively, you can copy the file to any other place and rebuild with
+make defconfig BR2_DEFCONFIG=<path-to-defconfig-file>+.
[[customize-store-package-config]]
==== Other package configuration
The configuration files for busybox, the linux kernel, barebox and
uClibc should be stored as well if changed. For each of these, a
buildroot configuration option exists to point to an input
configuration file, e.g. +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+. To
save their configuration, set those configuration options to a path
outside your output directory,
e.g. +board/<manufacturer>/<boardname>/linux.config+. Then, copy the
configuration files to that path.
Make sure that you create a configuration file 'before' changing
the +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+ etc. options. Otherwise,
buildroot will try to access this config file, which doesn't exist
yet, and will fail. You can create the configuration file by running
+make linux-menuconfig+ etc.
Buildroot provides a few helper targets to make the saving of
configuration files easier.
* +make linux-update-defconfig+ saves the linux configuration to the
path specified by +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+. It
simplifies the config file by removing default values. However,
this only works with kernels starting from 2.6.33. For earlier
kernels, use +make linux-update-config+.
* +make busybox-update-config+ saves the busybox configuration to the
path specified by +BR2_PACKAGE_BUSYBOX_CONFIG+.
* +make uclibc-update-config+ saves the uClibc configuration to the
path specified by +BR2_UCLIBC_CONFIG+.
* +make barebox-update-defconfig+ saves the barebox configuration to the
path specified by +BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE+.
* For at91bootstrap3, no helper exists so you have to copy the config
file manually to +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+.
[[customize-store-board-support]]
=== Creating your own board support
Creating your own board support in Buildroot allows users of a
particular hardware platform to easily build a system that is known to
work.
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.
Once you have a known working configuration, run +make
savedefconfig+. This will generate a minimal +defconfig+ file at the
root of the Buildroot source tree. Move this file into the +configs/+
directory, and rename it +<boardname>_defconfig+.
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
board, or no default exists, we encourage you to send fixes to the
corresponding upstream projects.
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 +board/<manufacturer>+ and a subdirectory
+board/<manufacturer>/<boardname>+. You can then store your patches
and configurations in these directories, and reference them from the main
Buildroot configuration.
=== Step-by-step instructions for storing configuration
To store the configuration for a specific product, device or
application, it is advisable to use the same conventions as for the
board support: put the buildroot defconfig in the +configs+ directory,
and any other files in a subdirectory of the +boards+ directory. This
section gives step-by-step instructions about how to do that. Of course,
you can skip the steps that are not relevant for your use case.
1. +make menuconfig+ to configure toolchain, packages and kernel.
1. +make linux-menuconfig+ to update the kernel config, similar for
other configuration.
1. +mkdir -p board/<manufacturer>/<boardname>+
1. Set the following options to +board/<manufacturer>/<boardname>/<package>.config+
(as far as they are relevant):
* +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+
* +BR2_PACKAGE_BUSYBOX_CONFIG+
* +BR2_UCLIBC_CONFIG+
* +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+
* +BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE+
1. Write the configuration files:
* +make linux-update-defconfig+
* +make busybox-update-config+
* +make uclibc-update-config+
* +cp <output>/build/at91bootstrap3-*/.config board/<manufacturer>/<boardname>/at91bootstrap3.config+
* +make barebox-update-defconfig+
1. Create +board/<manufacturer>/<boardname>/fs-overlay/+ and fill it
with additional files you need on your rootfs, e.g.
+board/<manufacturer>/<boardname>/fs-overlay/etc/inittab+.
Set +BR2_ROOTFS_OVERLAY+
to +board/<manufacturer>/<boardname>/fs-overlay+.
1. Create a post-build script
+board/<manufacturer>/<boardname>/post-build.sh+. Set
+BR2_ROOTFS_POST_BUILD_SCRIPT+ to
+board/<manufacturer>/<boardname>/post-build.sh+
1. If additional setuid permissions have to be set or device nodes have
to be created, create +board/<manufacturer>/<boardname>/device_table.txt+
and add that path to +BR2_ROOTFS_DEVICE_TABLE+.
1. +make savedefconfig+ to save the buildroot configuration.
1. +cp defconfig configs/<boardname>_defconfig+
1. To add patches to the linux build, set +BR2_LINUX_KERNEL_PATCH+ to
+board/<manufacturer>/<boardname>/patches/linux/+ and add your
patches in that directory. Each patch should be called
+linux-<num>-<description>.patch+. Similar for U-Boot, barebox,
at91bootstrap and at91bootstrap3.
1. If you need modifications to other packages, or if you need to add
packages, do that directly in the +packages/+ directory, following the
instructions in xref:adding-packages[].