Pull request for branch arnout-update-config
From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
Hello,
This is a refresh of the patches that describe in the manual how
to save the configuration in the board directory, that add the post-build overlay option, and that does 'make savedefconfig' save to a configured file rather than "defconfig".
The patches that add a xxx-update-config for each package with a
configuration possibility and that add an update-all-configs goal have been left out, because at the BR developer days it was decided to always update the config after you do a xxx-menuconfig. So those patches will become superfluous anyway. They will come in a separate series.
These patches come as a series rather than individually because the
later ones all update the documentation that is added in the first one.
Regards,
Arnout
--
The following changes since commit ddd69b5609cc9bd954afcfc2f91831d64b9cfff7:
libffi: switch to using a Git version, brings Microblaze and Xtensa support (2013-02-05 15:57:02 +0100)
are available in the git repository at:
https://git.gitorious.org/buildroot/buildroot.git arnout-update-config
for you to fetch changes up to 41e27bc2d2881606d1da299f6056d24bc9d34e78:
Make savedefconfig save to a configured file. (2013-02-05 17:59:37 +0100)
----------------------------------------------------------------
Arnout Vandecappelle (Essensium/Mind) (4):
manual: add section about storing the configuration. target/generic: add filesystem overlay option
busybox: busybox-update-config should depend on busybox-configure Make savedefconfig save to a configured file.
Config.in | 12 +++ Makefile | 26 ++++- docs/manual/adding-packages-directory.txt | 1 + docs/manual/board-support.txt | 38 ------- docs/manual/customize-rootfs.txt | 17 +-- docs/manual/customize-store.txt | 159 +++++++++++++++++++++++++++++ docs/manual/customize.txt | 2 + package/busybox/busybox.mk | 2 +- system/Config.in | 11 ++ 9 files changed, 219 insertions(+), 49 deletions(-) delete mode 100644 docs/manual/board-support.txt create mode 100644 docs/manual/customize-store.txt -- Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
PATCH 1/4 manual: add section about storing the configuration.
From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
Reuse part of board-support.txt, and remove that one because it was unused.
---
v4:
- Rebased against master.
v3:
- Removed the section about out-of-tree configuration.
- Added barebox config.
- Comments from Luca.
v2: mention LINUX_KERNEL_PATCH also in in-tree documentation
(Samuel Martin)
It's probably Acked-by Luca, but since my changes are pretty heavy (removing a whole section, adding barebox) I didn't include the ack.
--- docs/manual/adding-packages-directory.txt | 1 + docs/manual/board-support.txt | 38 ------- docs/manual/customize-store.txt | 160 +++++++++++++++++++++++++++++ docs/manual/customize.txt | 2 + 4 files changed, 163 insertions(+), 38 deletions(-) delete mode 100644 docs/manual/board-support.txt create mode 100644 docs/manual/customize-store.txt
docs/manual/adding-packages-directory.txt +1 -0
@@ -168,6 +168,7 @@ coding style]. The +.mk+ file ~~~~~~~~~~~~~~ +[[adding-packages-mk]] Finally, here's the hardest part. Create a file named +libfoo.mk+. It describes how the package should be downloaded, configured, built,
docs/manual/board-support.txt deleted +0 -38
@@ -1,38 +0,0 @@ -// -*- mode:doc -*- ; - -[[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 upstream versions of the Linux kernel and -bootloaders where possible, and also to use default kernel and bootloader -configurations if possible. If the defaults 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+ (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.
docs/manual/customize-store.txt new file +160 -0
160 lines not on this page · raw message
docs/manual/customize.txt +2 -0
@@ -12,3 +12,5 @@ include::customize-uclibc-config.txt[] include::customize-kernel-config.txt[] include::customize-toolchain.txt[] + +include::customize-store.txt[]
Signature · 1 line
1.7.10.4
PATCH 1/4 manual: add section about storing the configuration.
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Arnout" == Arnout Vandecappelle (Essensium/Mind) <[email protected]> writes:
Arnout> From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]> Arnout> Reuse part of board-support.txt, and remove that one because it Arnout> was unused.
Committed with minor fixes (see below).
Arnout> +Other package configuration
Arnout> +^^^^^^^^^^^^^^^^^^^^^^^^^^^
Arnout> +
Arnout> +The configuration files for busybox, the linux kernel, barebox, uClibc and Arnout> +crosstool-NG should be stored as well. For each of these, a
s/as well/as well if changed/
Arnout> +* For crosstool-NG and at91bootstrap3 and no helper exists so you Arnout> + have to copy the config file manually to
s/at91bootstrap3 and no/at91bootstap3, no/
Signature · 1 line
Bye, Peter Korsgaard
PATCH 2/4 target/generic: add filesystem overlay option
In reply to Arnout Vandecappelle (Essensium/Mind)From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
The filesystem overlay is a tree that is copied over the target fs after building everything - which is currently usually done in the post-build script.
---
v4: Rebased against master.
v3: keep the custom skeleton documentation
v2: don't deprecate custom skeleton
--- Makefile | 9 +++++++++ docs/manual/customize-rootfs.txt | 17 +++++++++++------ docs/manual/customize-store.txt | 13 +++++-------- system/Config.in | 11 +++++++++++ 4 files changed, 36 insertions(+), 14 deletions(-)
Makefile +9 -0
@@ -501,6 +501,15 @@ endif echo "PRETTY_NAME=\"Buildroot $(BR2_VERSION)\"" \ ) > $(TARGET_DIR)/etc/os-release + @for dir in $(call qstrip,$(BR2_ROOTFS_OVERLAY)); do \ + if [ -d $${dir} ]; then \ + $(call MESSAGE,"Copying overlay $${dir}"); \ + rsync -a \ + --exclude .svn --exclude .git --exclude .hg --exclude '*~' \ + $${dir}/ $(TARGET_DIR); \ + fi \ + done + ifneq ($(BR2_ROOTFS_POST_BUILD_SCRIPT),"") @$(call MESSAGE,"Executing post-build script\(s\)") @$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_BUILD_SCRIPT)), \
docs/manual/customize-rootfs.txt +11 -6
@@ -24,6 +24,12 @@ there are a few ways to customize the resulting target filesystem. skeleton are copied to output/target before any package installation. +* Create a filesystem overlay: a tree of files that are copied directly + over the target filesystem after it has been built. Set + +BR2_ROOTFS_OVERLAY+ to the top of the tree. +.git+, +.svn+, + +.hg+ directories and files ending with +~+ are excluded. + _Among these first 3 methods, this one should be preferred_. + * In the Buildroot configuration, you can specify the path to a *post-build script*, that gets called 'after' Buildroot builds all the selected software, but 'before' the rootfs packages are
@@ -31,12 +37,11 @@ there are a few ways to customize the resulting target filesystem. specify the location of your post-build script. This option can be found in the +System configuration+ menu. The destination root filesystem folder is given as the first argument to this script, - and this script can then be used to copy programs, static data or - any other needed file to your target filesystem. You should, - however, use this feature with care. Whenever you find that a - certain package generates wrong or unneeded files, you should fix - that package rather than work around it with a post-build cleanup - script. _Among these first 3 methods, this one should be preferred_. + and this script can then be used to remove or modify any file in your + target filesystem. You should, however, use this feature with care. + Whenever you find that a certain package generates wrong or unneeded + files, you should fix that package rather than work around it with a + post-build cleanup script. You may also use these variables in your post-build script: - +BUILDROOT_CONFIG+: the path to the Buildroot .config file - +HOST_DIR+, +STAGING_DIR+, +TARGET_DIR+: see
docs/manual/customize-store.txt +5 -8
@@ -136,15 +136,12 @@ you can skip the steps that are not relevant for your use case. 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+. It should contain - the following command: -+ ------------- -rsync -a --exclude .empty --exclude '*~' ${0%/*}/fs-overlay $1 ------------- -+ -1. Set +BR2_ROOTFS_POST_BUILD_SCRIPT+ to +board/<manufacturer>/<boardname>/post-build.sh+ + +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+.
system/Config.in +11 -0
@@ -249,6 +249,17 @@ config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW endif # BR2_ROOTFS_SKELETON_DEFAULT +config BR2_ROOTFS_OVERLAY + string "Root filesystem overlay directories" + default "" + help + Specify a list of directories that are copied over the target + root filesystem after the build has finished and before it is + packed into the selected filesystem images. + + They are copied as-is into the rootfs, excluding files ending with + ~ and .git, .svn and .hg directories. + config BR2_ROOTFS_POST_BUILD_SCRIPT string "Custom script to run before creating filesystem images" default ""
Signature · 1 line
1.7.10.4
PATCH 2/4 target/generic: add filesystem overlay option
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Arnout" == Arnout Vandecappelle (Essensium/Mind) <[email protected]> writes:
Arnout> From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]> Arnout> The filesystem overlay is a tree that is copied over the target fs Arnout> after building everything - which is currently usually done in the Arnout> post-build script.
Arnout> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <[email protected]> Arnout> Acked-by: Luca Ceresoli <[email protected]>
Arnout> ---
Arnout> v4: Rebased against master.
Arnout> v3: keep the custom skeleton documentation
Arnout> v2: don't deprecate custom skeleton
Arnout> ---
Arnout> Makefile | 9 +++++++++ Arnout> docs/manual/customize-rootfs.txt | 17 +++++++++++------ Arnout> docs/manual/customize-store.txt | 13 +++++-------- Arnout> system/Config.in | 11 +++++++++++
Arnout> 4 files changed, 36 insertions(+), 14 deletions(-)
Arnout> diff --git a/Makefile b/Makefile
Arnout> index 6f8ed0e..ac59071 100644
Arnout> --- a/Makefile
Arnout> +++ b/Makefile
Arnout> @@ -501,6 +501,15 @@ endif
Arnout> echo "PRETTY_NAME=\"Buildroot $(BR2_VERSION)\"" \
Arnout> ) > $(TARGET_DIR)/etc/os-release
Arnout> + @for dir in $(call qstrip,$(BR2_ROOTFS_OVERLAY)); do \
Arnout> + if [ -d $${dir} ]; then \
Arnout> + $(call MESSAGE,"Copying overlay $${dir}"); \
Arnout> + rsync -a \
Arnout> + --exclude .svn --exclude .git --exclude .hg --exclude '*~' \
Arnout> + $${dir}/ $(TARGET_DIR); \
Arnout> + fi \
Similar to the recent discussion about the post-build script, I don't think we should ignore missing (misspelled?) directories, so I dropped the -d test and committed, thanks.
Signature · 1 line
Bye, Peter Korsgaard
PATCH 2/4 target/generic: add filesystem overlay option
Quoted 11 lines · Peter Korsgaard
Arnout> + @for dir in $(call qstrip,$(BR2_ROOTFS_OVERLAY)); do \ Arnout> + if [ -d $${dir} ]; then \ Arnout> + $(call MESSAGE,"Copying overlay $${dir}"); \ Arnout> + rsync -a \ Arnout> + --exclude .svn --exclude .git --exclude .hg --exclude '*~' \ Arnout> + $${dir}/ $(TARGET_DIR); \ Arnout> + fi \Similar to the recent discussion about the post-build script, I don't think we should ignore missing (misspelled?) directories, so I dropped the -d test and committed, thanks.
Yes, thanks, that was a left-over from when I had a default value for
the overlay.
Regards,
Arnout
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
PATCH 3/4 busybox: busybox-update-config should depend on busybox-configure
In reply to Arnout Vandecappelle (Essensium/Mind)From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
Before the config file can be copied, it has to exist. The other xxx-update-config targets do this as well.
---
v4: Rebased against master.
v2: small spelling mistake in commit message
--- package/busybox/busybox.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
package/busybox/busybox.mk +1 -1
@@ -223,5 +223,5 @@ busybox-menuconfig busybox-xconfig busybox-gconfig: busybox-patch rm -f $(BUSYBOX_DIR)/.stamp_built rm -f $(BUSYBOX_DIR)/.stamp_target_installed -busybox-update-config: +busybox-update-config: busybox-configure cp -f $(BUSYBOX_BUILD_CONFIG) $(BUSYBOX_CONFIG_FILE)
Signature · 1 line
1.7.10.4
PATCH 3/4 busybox: busybox-update-config should depend on busybox-configure
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Arnout" == Arnout Vandecappelle (Essensium/Mind) <[email protected]> writes:
Arnout> From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]> Arnout> Before the config file can be copied, it has to exist. The Arnout> other xxx-update-config targets do this as well.
Committed, thanks.
Signature · 1 line
Bye, Peter Korsgaard
PATCH 4/4 Make savedefconfig save to a configured file.
In reply to Arnout Vandecappelle (Essensium/Mind)From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
Store BR2_DEFCONFIG in .config, and use it to update the original input defconfig file after updating the configuration. When a config is created by using the BR2_DEFCONFIG=... option, this is saved in the .config file; later runs of savedefconfig will update that same location. It is also possible to configure this place in the interactive configuration.
The BR2_DEFCONFIG value itself is not saved into the generated defconfig, since Kconfig considers it at its default. This is intentional, to avoid hard-coding an absolute path in the defconfig. It will anyway be set again when the defconfig is used with the 'make BR2_DEFCONFIG=... defconfig' command.
As a side-effect of this change, the *config options have been moved out of the BR2_HAVE_DOT_CONFIG condition. This doesn't make any functional difference, because the .config is still not read for the *config targets. However, the defconfig and savedefconfig targets do need to include .config now, which makes them slightly slower.
---
v4: Rebased against master.
v3: replaced foo_defconfig documentation with BR2_DEFCONFIG.
--- Config.in | 12 ++++++++++++ Makefile | 17 +++++++++++++---- docs/manual/customize-store.txt | 10 ++++++---- 3 files changed, 31 insertions(+), 8 deletions(-)
Config.in +12 -0
@@ -22,6 +22,18 @@ config BR2_HOSTARCH_NEEDS_IA32_LIBS source "arch/Config.in" +config BR2_DEFCONFIG_FROM_ENV + string + option env="BR2_DEFCONFIG" + +config BR2_DEFCONFIG + string "Location to save buildroot config" + default BR2_DEFCONFIG_FROM_ENV if BR2_DEFCONFIG_FROM_ENV != "" + default "$(CONFIG_DIR)/defconfig" + help + When running 'make savedefconfig', the defconfig file will be saved + in this location. + menu "Build options" menu "Commands"
Makefile +13 -4
@@ -56,7 +56,7 @@ DATE:=$(shell date +%Y%m%d) export BR2_VERSION_FULL:=$(BR2_VERSION)$(shell $(TOPDIR)/support/scripts/setlocalversion) noconfig_targets:=menuconfig nconfig gconfig xconfig config oldconfig randconfig \ - defconfig %_defconfig savedefconfig allyesconfig allnoconfig silentoldconfig release \ + %_defconfig allyesconfig allnoconfig silentoldconfig release \ randpackageconfig allyespackageconfig allnopackageconfig \ source-check print-version
@@ -594,6 +594,8 @@ else # ifeq ($(BR2_HAVE_DOT_CONFIG),y) all: menuconfig +endif # ifeq ($(BR2_HAVE_DOT_CONFIG),y) + # configuration # ---------------------------------------------------------------------------
@@ -604,7 +606,12 @@ $(BUILD_DIR)/buildroot-config/%onf: mkdir -p $(@D)/lxdialog $(MAKE) CC="$(HOSTCC_NOCCACHE)" HOSTCC="$(HOSTCC_NOCCACHE)" obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F) +DEFCONFIG = $(call qstrip,$(BR2_DEFCONFIG)) + +# We don't want to fully expand BR2_DEFCONFIG here, so Kconfig will +# recognize that if it's still at its default $(CONFIG_DIR)/defconfig COMMON_CONFIG_ENV = \ + BR2_DEFCONFIG='$(call qstrip,$(value BR2_DEFCONFIG))' \ KCONFIG_AUTOCONFIG=$(BUILD_DIR)/buildroot-config/auto.conf \ KCONFIG_AUTOHEADER=$(BUILD_DIR)/buildroot-config/autoconf.h \ KCONFIG_TRISTATE=$(BUILD_DIR)/buildroot-config/tristate.config \
@@ -682,7 +689,7 @@ silentoldconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile defconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile @mkdir -p $(BUILD_DIR)/buildroot-config - @$(COMMON_CONFIG_ENV) $< --defconfig$(if $(BR2_DEFCONFIG),=$(BR2_DEFCONFIG)) $(CONFIG_CONFIG_IN) + @$(COMMON_CONFIG_ENV) $< --defconfig$(if $(DEFCONFIG),=$(DEFCONFIG)) $(CONFIG_CONFIG_IN) %_defconfig: $(BUILD_DIR)/buildroot-config/conf $(TOPDIR)/configs/%_defconfig outputmakefile @mkdir -p $(BUILD_DIR)/buildroot-config
@@ -690,13 +697,15 @@ defconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile savedefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile @mkdir -p $(BUILD_DIR)/buildroot-config - @$(COMMON_CONFIG_ENV) $< --savedefconfig=$(CONFIG_DIR)/defconfig $(CONFIG_CONFIG_IN) + @$(COMMON_CONFIG_ENV) $< \ + --savedefconfig=$(if $(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig) \ + $(CONFIG_CONFIG_IN) # check if download URLs are outdated source-check: $(MAKE) DL_MODE=SOURCE_CHECK $(EXTRAMAKEARGS) source -endif # ifeq ($(BR2_HAVE_DOT_CONFIG),y) +.PHONY: defconfig savedefconfig ############################################################# #
docs/manual/customize-store.txt +6 -4
@@ -20,13 +20,15 @@ Buildroot configuration ^^^^^^^^^^^^^^^^^^^^^^^ For storing the buildroot configuration itself, buildroot offers the -following command: +make savedefconfig+ +following command: +make savedefconfig+. This strips the buildroot configuration down by removing configuration options that are@their default value. The result is stored in a file -called +defconfig+. Copy this file to +foo_defconfig+ in the +configs+ -directory. The configuration can then be rebuilt by running -+make foo_defconfig+ +called +defconfig+. If you want to save it in another place, update set +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>+.
Signature · 1 line
1.7.10.4
PATCH 4/4 Make savedefconfig save to a configured file.
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Arnout" == Arnout Vandecappelle (Essensium/Mind) <[email protected]> writes:
Arnout> From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]> Arnout> Store BR2_DEFCONFIG in .config, and use it to update the Arnout> original input defconfig file after updating the configuration. Arnout> When a config is created by using the BR2_DEFCONFIG=... option, Arnout> this is saved in the .config file; later runs of savedefconfig Arnout> will update that same location.
Committed with a minor fix (see below) - Thanks.
Arnout> +called +defconfig+. If you want to save it in another place, update set
s/update set/change/
Signature · 1 line
Bye, Peter Korsgaard
PATCH 4/4 Make savedefconfig save to a configured file.
In reply to Arnout Vandecappelle (Essensium/Mind)Quoted 5 lines · Arnout Vandecappelle (Essensium/Mind)
source "
arch/Config.in"Config.in +3
-0+config BR2_DEFCONFIG_FROM_ENV + string + option env="BR2_DEFCONFIG"
Config.in config BR2_HOSTARCH_NEEDS_IA32_LIBS · line 37
Quoted 10 lines
Config.in +9
-0+ +config BR2_DEFCONFIG + string "Location to save buildroot config" + default BR2_DEFCONFIG_FROM_ENV if BR2_DEFCONFIG_FROM_ENV != "" + default "$(CONFIG_DIR)/defconfig" + help + When running 'make savedefconfig', the defconfig file will be saved + in this location. + menu "Build options"
Any particular reason for this option to be on the toplevel menu? It looks terrible there :)
Maybe build options?
Regards.