Various simplifications of the buildroot configuration
Subsystems (2)
cover Various simplifications of the buildroot configuration
Second attempt at my "project directory" series - this time leaving out the project directory.
First patch adds a section to the manual to explain how to store the configuration. It's basically Thomas's ELC-E presentation of last year, but I've added a section for when it's out-of-tree. I also added a very brief explanation about how to add packages and patches out-of-tree.
The second patch adds the fs-overlay as a config option. Skeleton is not deprecated this time round.
The next seven patches add the update-all-config target. At Thomas S.'s suggestion, it's split up more. The first three add missing -update-config targets and fix the busybox one; the last three ones make sure that the buildroot default config files are not overwritten by update-all-config.
The final patch adds the BR2_DEFCONFIG to .config, so update-all-config can save directly to the right config file.
Regards,
Arnout
----------------------------------------------------------------
Arnout Vandecappelle (Essensium/Mind) (10):
manual: add section about storing the configuration. target/generic: add filesystem overlay option
ctng: add ctng-update-config target
busybox: busybox-update-config should depend on busybox-configure
at91bootstrap3: add -update-config target
Add update-all-config target
busybox: update-all-config shouldn't update default busybox config
crosstool-ng: update-all-config shouldn't update default busybox config
uClibc: update-all-config shouldn't update default uClibc config Make savedefconfig save to a configured file.
Config.in | 12 ++ Makefile | 32 +++- boot/at91bootstrap3/at91bootstrap3.mk | 8 + docs/manual/adding-packages-directory.txt | 1 + docs/manual/board-support.txt | 35 ---- docs/manual/customize-rootfs.txt | 21 +- docs/manual/customize-store.txt | 223 ++++++++++++++++++++++ docs/manual/customize.txt | 2 + linux/linux.mk | 2 + package/busybox/Config.in | 7 +- package/busybox/busybox.mk | 13 +- target/generic/Config.in | 11 ++ toolchain/toolchain-crosstool-ng/Config.in | 6 +- toolchain/toolchain-crosstool-ng/crosstool-ng.mk | 21 +- toolchain/uClibc/Config.in | 7 +- toolchain/uClibc/uclibc.mk | 25 +-- 16 files changed, 340 insertions(+), 86 deletions(-) delete mode 100644 docs/manual/board-support.txt create mode 100644 docs/manual/customize-store.txt
PATCH 1/10 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.
--- docs/manual/adding-packages-directory.txt | 1 + docs/manual/board-support.txt | 35 ----- docs/manual/customize-store.txt | 241 +++++++++++++++++++++++++++++ docs/manual/customize.txt | 2 + 4 files changed, 244 insertions(+), 35 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
@@ -147,6 +147,7 @@ package. 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 -35
@@ -1,35 +0,0 @@ -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 +MYBOARD_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 -platform, 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 +241 -0
241 lines not on this page · raw message
docs/manual/customize.txt +2 -0
@@ -10,3 +10,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/10 manual: add section about storing the configuration.
Arnout, all,
2012/10/21 Arnout Vandecappelle (Essensium/Mind) <[email protected]>:
Quoted 15 lines
From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
Reuse part of board-support.txt, and remove that one because it was unused.
--- docs/manual/adding-packages-directory.txt | 1 + docs/manual/board-support.txt | 35 ----- docs/manual/customize-store.txt | 241 +++++++++++++++++++++++++++++ docs/manual/customize.txt | 2 + 4 files changed, 244 insertions(+), 35 deletions(-) delete mode 100644 docs/manual/board-support.txt create mode 100644 docs/manual/customize-store.txt
[...]
docs/manual/customize-store.txt line 111
Quoted 11 lines
docs/manual/customize-store.txt new file +11
-0+Step-by-step instructions for storing configuration inside the buildroot tree +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +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.
I think you don't need to use explicit numbering here and everywhere below, which should force to "1. ..." each item.
Note that I haven't try to build the doc with this patch, I'm just referring to:
http://www.methods.co.nz/asciidoc/userguide.html#_numbered_lists
docs/manual/customize-store.txt line 121
Quoted 10 lines
+1. +make linux-menuconfig+ to update the kernel config, similar for
docs/manual/customize-store.txt new file +9
-0+ 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_TOOLCHAIN_CTNG_CONFIG+ + * +BR2_UCLIBC_CONFIG+ + * +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+
I think that we could/should/have to add such option for barebox too. I've cooked a patch for that and I'll post it shortly.
docs/manual/customize-store.txt line 127
Quoted 6 lines
+1. Write the configuration files:
docs/manual/customize-store.txt new file +5
-0+ * +make linux-update-defconfig+ + * +make busybox-update-config+ + * +cp <output>/build/build-toolchain/.config board/<manufacturer>/<boardname>/ctng.config+ + * +make uclibc-update-config+ + * +cp <output>/build/at91bootstrap3-*/.config board/<manufacturer>/<boardname>/at91bootstrap3.config+
humm... I may be a bit nit, but I would prefer fill the board/<manufacturer>/<boardname> directory with all these config. files _before_ setting the corresponding options, so I would swap this step with the previous one.
Quoted 9 lines
+1. Create +board/<manufacturer>/<boardname>/fs-overlay+ and fill it
docs/manual/customize-store.txt new file +8
-0+ with additional files you need on your rootfs, e.g. + +board/<manufacturer>/<boardname>/etc/inittab+. +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
docs/manual/customize-store.txt line 146
Quoted 10 lines
docs/manual/customize-store.txt new file +10
-0+------------ ++ +1. 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+ + +
In the following, I won't repeat all the previous points I've already mentioned.
Quoted 40 lines
docs/manual/customize-store.txt new file +40
-0+Step-by-step instructions for storing configuration outside the buildroot tree +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When you use buildroot in different projects, you may want to keep +each project separate from buildroot itself. This requires an extra +script or Makefile, but is otherwise easy to do with buildroot. +Take the following steps (very similar to storing configuration inside +the buildroot tree). + +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 <path-to-board-directory>+ +1. Set the following options to +$(BOARDDIR)/<package>.config+ + (as far as they are relevant): + * +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+ + * +BR2_PACKAGE_BUSYBOX_CONFIG+ + * +BR2_TOOLCHAIN_CTNG_CONFIG+ + * +BR2_UCLIBC_CONFIG+ + * +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+ +1. Write the configuration files: + * +make linux-update-defconfig+ + * +make busybox-update-config+ + * +cp <output>/build/build-toolchain/.config <path-to-board-directory>/ctng.config+ + * +make uclibc-update-config+ + * +cp <output>/build/at91bootstrap3-*/.config <path-to-board-directory>/at91bootstrap3.config+ +1. Create +<path-to-board-directory>/fs-overlay+ and fill it + with additional files you need on your rootfs, e.g. + +<path-to-board-directory>/etc/inittab+. +1. Create a post-build script + +<path-to-board-directory>/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 +$(BOARDDIR)/post-build.sh+ +1. If additional setuid permissions have to be set or device nodes have + to be created, create +<path-to-board-directory>/device_table.txt+
docs/manual/customize-store.txt line 196
Quoted 10 lines
docs/manual/customize-store.txt new file +10
-0+ and add that path to +BR2_ROOTFS_DEVICE_TABLE+. +1. +make savedefconfig+ to save the buildroot configuration. +1. +cp defconfig <path-to-board-directory>/buildroot.config+ +1. Create a script or Makefile in the board directory that calls + buildroot: ++ +------------ +make -C <path-to-buildroot> O=<path-to-board-directory>/output BR2_DEFCONFIG=<path-to-board-directory>/buildroot.config defconfig +make -C <path-to-buildroot> O=<path-to-board-directory>/output BOARDDIR=<path-to-board-directory> +------------
Rather a (rhetoric) question or a feature request ;-) than a comment:
since this script/makefile is located at the root of the board directory, how about automatically resolve the <path-to-board-directory>?
Quoted 25 lines
++
+1. If you have additional proprietary binaries that are compileddocs/manual/customize-store.txt new file +23
-0+ outside of buildroot, you can copy them into the rootfs as + part of +post-build.sh+ +1. If you need additional packages that are not available in buildroot + and that you don't want to make available (e.g. proprietary + applications), set +BR2_PACKAGE_OVERRIDE_FILE+ to + +$(BOARDDIR)/local.mk+. Add the following to +local.mk+ to + add package 'foo': +include foo/foo.mk+. Add the following in + +foo.mk+ (see xref:adding-packages-mk[Adding packages to buildroot]): ++ +------------ +BR2_PACKAGE_FOO = y +FOO_OVERRIDE_SRCDIR = $(BOARDDIR)/foo + +define FOO_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define FOO_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/foo $(TARGET_DIR)/usr/bin/foo +endef + +$(eval $(generic-package)) +------------
docs/manual/customize-store.txt line 231
Quoted 10 lines
docs/manual/customize-store.txt new file +10
-0++ +The +BR2_PACKAGE_FOO=y+ makes sure the package is always selected, +so there is no need for a +Config.in+ file. The +FOO_OVERRIDE_SRCDIR+ +tells buildroot to fetch the sources from the +foo+ directory, and +also makes sure that they are re-synchronized when you call +make +foo-rebuild+ ++ +1. To add patches to the linux build, set +BR2_LINUX_KERNEL_PATCH+ to + +$(BOARDDIR)/patches/linux+ and add your patches in that directory. + Similar for U-Boot, barebox, at91bootstrap and at91bootstrap3.
This point is also true for board supported in BR, except that all patches belong to the board/<manufacturer>/<boardname> directory. So, either move this point up in the "Creating your own board support" section and/or add the corresponding point to the "Step-by-step instructions for storing configuration inside the buildroot tree" section.
Quoted 21 lines
+1. To add patches for some other package 'foo', put them in the
docs/manual/customize-store.txt new file +9
-0+ +patches/foo+ directory and add the following to +local.mk+: ++ +------------ +define FOO_LOCAL_PATCHES +support/scripts/apply-patches.sh $(@D) $(BOARDDIR)/patches/foo foo-\*.patch +endef + +FOO_POST_PATCH_HOOKS += FOO_LOCAL_PATCHES +------------docs/manual/customize.txt +2
-1@@ -10,3 +10,5 @@ include::customize-uclibc-config.txt[] include::customize-kernel-config.txt[] include::customize-toolchain.txt[] + +include::customize-store.txt[] --
Quoted 1 line
1.7.10.4
Regards,
Signature · 1 line
Sam
PATCH 1/10 manual: add section about storing the configuration.
Quoted 8 lines · Samuel Martin
docs/manual/customize-store.txt line 121
Quoted 6 lines
docs/manual/customize-store.txt new file +6
-0+ (as far as they are relevant): + * +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+ + * +BR2_PACKAGE_BUSYBOX_CONFIG+ + * +BR2_TOOLCHAIN_CTNG_CONFIG+ + * +BR2_UCLIBC_CONFIG+ + * +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+I think that we could/should/have to add such option for barebox too. I've cooked a patch for that and I'll post it shortly.
My colleague Maxime has already posted such a patch a few days ago:
http://lists.busybox.net/pipermail/buildroot/2012-October/060102.html
Thomas
Signature · 4 lines
Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com
PATCH 1/10 manual: add section about storing the configuration.
In reply to Samuel MartinQuoted 3 lines · Samuel Martin
Arnout, all,
2012/10/21 Arnout Vandecappelle (Essensium/Mind)<[email protected]>:
[snip]
Quoted 4 lines
Quoted 1 line
+1. +make menuconfig+ to configure toolchain, packages and kernel.
I think you don't need to use explicit numbering here and everywhere below, which should force to "1. ..." each item.
I find the 1. notation clearer than the plain . notation (they do exactly
the same AFAICS).
Quoted 10 lines
docs/manual/customize-store.txt line 121
Quoted 10 lines
+1. +make linux-menuconfig+ to update the kernel config, similar for
docs/manual/customize-store.txt new file +9
-0+ 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_TOOLCHAIN_CTNG_CONFIG+ + * +BR2_UCLIBC_CONFIG+ + * +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+
Quoted 2 lines
I think that we could/should/have to add such option for barebox too. I've cooked a patch for that and I'll post it shortly.
I intentionally made the documentation patch first, and the others later,
so it's easier to see how the other patches affect the documentation. And I didn't make a barebox patch because Maxime is making one.
Quoted 11 lines
docs/manual/customize-store.txt
Quoted 7 lines
+1. Write the configuration files:
docs/manual/customize-store.txt new file +5
-0+ * +make linux-update-defconfig+ + * +make busybox-update-config+ + * +cp<output>/build/build-toolchain/.config board/<manufacturer>/<boardname>/ctng.config+ + * +make uclibc-update-config+ + * +cp<output>/build/at91bootstrap3-*/.config board/<manufacturer>/<boardname>/at91bootstrap3.config+humm... I may be a bit nit, but I would prefer fill the board/<manufacturer>/<boardname> directory with all these config. files _before_ setting the corresponding options, so I would swap this step with the previous one.
But then you can't use 'make xxx-update-defconfig'...
[snip]
Quoted 11 lines
docs/manual/customize-store.txt line 196
Quoted 7 lines
+1. Create a script or
Makefilein the board directory that callsdocs/manual/customize-store.txt new file +6
-0+ buildroot: ++ +------------ +make -C<path-to-buildroot> O=<path-to-board-directory>/output BR2_DEFCONFIG=<path-to-board-directory>/buildroot.config defconfig +make -C<path-to-buildroot> O=<path-to-board-directory>/output BOARDDIR=<path-to-board-directory> +------------Rather a (rhetoric) question or a feature request ;-) than a comment:
since this script/makefile is located at the root of the board directory, how about automatically resolve the <path-to-board-directory>?
Yes, but since that feature seemed to be too controversial in my first
patch series, I left it out here.
[snip]
Quoted 9 lines
docs/manual/customize-store.txt line 231
Quoted 3 lines
+1. To add patches to the linux build, set +BR2_LINUX_KERNEL_PATCH+ to
docs/manual/customize-store.txt new file +2
-0+ +$(BOARDDIR)/patches/linux+ and add your patches in that directory. + Similar for U-Boot, barebox, at91bootstrap and at91bootstrap3.This point is also true for board supported in BR, except that all patches belong to the board/<manufacturer>/<boardname> directory. So, either move this point up in the "Creating your own board support" section and/or add the corresponding point to the "Step-by-step instructions for storing configuration inside the buildroot tree" section.
True, will do.
Thanks,
Regards,
Arnout
[snip]
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286540 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/10 manual: add section about storing the configuration.
In reply to Arnout Vandecappelle (Essensium/Mind)Am 21.10.2012 01:45, schrieb Arnout Vandecappelle (Essensium/Mind):
docs/manual/customize-store.txt line 85
Quoted 4 lines
docs/manual/customize-store.txt new file +4
-0+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+.
Hello all,
so we will end with a nice tree of hopefully many board/<manufacturer>/<boardname> folders containig special settings for each board, most likely at least a kernel config file. I don't expect that too many boards will do without other settings but those in buildroot's defconfig. And we will have many <boardname>_defconfig files in the configs folder.
Wouldn't it make more sense to move buildroot's <boardname>_defconfig files to the respective board folder, so that everything would be together in one place?
Just my 2 cents
Stephan
Signature · 4 lines
reLinux - Stephan Hoffmann Am Schmidtgrund 124 50765 K?ln Tel. +49.221.95595-19 Fax: -64 www.reLinux.de sho at reLinux.de
PATCH 1/10 manual: add section about storing the configuration.
Quoted 14 lines · Stephan Hoffmann
Am 21.10.2012 01:45, schrieb Arnout Vandecappelle (Essensium/Mind):
docs/manual/customize-store.txt line 85
Quoted 4 lines
docs/manual/customize-store.txt new file +4
-0+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+.Hello all,
so we will end with a nice tree of hopefully many board/<manufacturer>/<boardname> folders containig special settings for each board, most likely at least a kernel config file. I don't expect that too many boards will do without other settings but those in buildroot's defconfig. And we will have many<boardname>_defconfig files in the configs folder.
Quoted 3 lines
Wouldn't it make more sense to move buildroot's<boardname>_defconfig files to the respective board folder, so that everything would be together in one place?
I fully agree, but I think we should first get these clean-ups committed
before considering that.
Regards,
Arnout
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286540 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 2/10 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.
Also replace the documentation for a custom skeleton with the filesystem overlay and deprecate the custom skeleton.
--- Makefile | 9 +++++++++ docs/manual/customize-rootfs.txt | 21 +++++++++------------ docs/manual/customize-store.txt | 27 +++++++++------------------ target/generic/Config.in | 11 +++++++++++ 4 files changed, 38 insertions(+), 30 deletions(-)
Makefile +9 -0
@@ -463,6 +463,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") $(BR2_ROOTFS_POST_BUILD_SCRIPT) $(TARGET_DIR)
docs/manual/customize-rootfs.txt +9 -12
@@ -1,5 +1,6 @@ Customizing the generated target filesystem ------------------------------------------- +[customize-rootfs] There are a few ways to customize the resulting target filesystem:
@@ -10,24 +11,20 @@ There are a few ways to customize the resulting target filesystem: anything to the target filesystem, but if you decide to completely rebuild your toolchain and tools, these changes will be lost. -* Create your own 'target skeleton'. You can start with the default - skeleton available under +fs/skeleton+ and then customize it to suit - your needs. The +BR2_ROOTFS_SKELETON_CUSTOM+ and - +BR2_ROOTFS_SKELETON_CUSTOM_PATH+ 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. +* 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. * 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 assembled. 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. + 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. * A special package, 'customize', stored in +package/customize+ can be used. You can put all the files that you want to see in the final
docs/manual/customize-store.txt +9 -18
@@ -127,16 +127,12 @@ you can skip the steps that are not relevant for your use case. * +cp <output>/build/at91bootstrap3-*/.config board/<manufacturer>/<boardname>/at91bootstrap3.config+ 1. Create +board/<manufacturer>/<boardname>/fs-overlay+ and fill it with additional files you need on your rootfs, e.g. - +board/<manufacturer>/<boardname>/etc/inittab+. + +board/<manufacturer>/<boardname>/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+.
@@ -172,16 +168,11 @@ the buildroot tree). * +cp <output>/build/at91bootstrap3-*/.config <path-to-board-directory>/at91bootstrap3.config+ 1. Create +<path-to-board-directory>/fs-overlay+ and fill it with additional files you need on your rootfs, e.g. - +<path-to-board-directory>/etc/inittab+. + +<path-to-board-directory>/etc/inittab+. Set +BR2_ROOTFS_OVERLAY+ + to +<path-to-board-directory>/fs-overlay+. 1. Create a post-build script - +<path-to-board-directory>/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 +$(BOARDDIR)/post-build.sh+ + +<path-to-board-directory>/post-build.sh+. Set + +BR2_ROOTFS_POST_BUILD_SCRIPT+ to +$(BOARDDIR)/post-build.sh+ 1. If additional setuid permissions have to be set or device nodes have to be created, create +<path-to-board-directory>/device_table.txt+ and add that path to +BR2_ROOTFS_DEVICE_TABLE+.
target/generic/Config.in +11 -0
@@ -166,6 +166,17 @@ config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW endif # BR2_ROOTFS_SKELETON_DEFAULT +config BR2_ROOTFS_OVERLAY + string "Root filesystem overlay" + 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. + + It is 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 3/10 ctng: add ctng-update-config target
In reply to Arnout Vandecappelle (Essensium/Mind)From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
Analogous to linux-update-config and friends.
Also update documentation.
--- docs/manual/customize-store.txt | 8 ++++---- toolchain/toolchain-crosstool-ng/crosstool-ng.mk | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-)
docs/manual/customize-store.txt +4 -4
@@ -58,8 +58,8 @@ configuration files easier. path specified by +BR2_PACKAGE_BUSYBOX_CONFIG+. * +make uclibc-update-config+ saves the uClibc configuration to the path specified by +BR2_UCLIBC_CONFIG+. -* For crosstool-NG, no helper exists so you have to copy the config - file manually to +BR2_TOOLCHAIN_CTNG_CONFIG+. +* +make ctng-update-config+ saves the crosstool-NG configuration to the + patch specified by +BR2_TOOLCHAIN_CTNG_CONFIG+. Creating your own board support
@@ -122,7 +122,7 @@ you can skip the steps that are not relevant for your use case. 1. Write the configuration files: * +make linux-update-defconfig+ * +make busybox-update-config+ - * +cp <output>/build/build-toolchain/.config board/<manufacturer>/<boardname>/ctng.config+ + * +make ctng-update-config+ * +make uclibc-update-config+ * +cp <output>/build/at91bootstrap3-*/.config board/<manufacturer>/<boardname>/at91bootstrap3.config+ 1. Create +board/<manufacturer>/<boardname>/fs-overlay+ and fill it
@@ -163,7 +163,7 @@ the buildroot tree). 1. Write the configuration files: * +make linux-update-defconfig+ * +make busybox-update-config+ - * +cp <output>/build/build-toolchain/.config <path-to-board-directory>/ctng.config+ + * +make ctng-update-config+ * +make uclibc-update-config+ * +cp <output>/build/at91bootstrap3-*/.config <path-to-board-directory>/at91bootstrap3.config+ 1. Create +<path-to-board-directory>/fs-overlay+ and fill it
toolchain/toolchain-crosstool-ng/crosstool-ng.mk +3 -0
@@ -397,3 +397,6 @@ ctng-menuconfig: $(CTNG_DIR)/.config $(call ctng-oldconfig,$<) $(call ctng-check-config-changed,$<,$<.timestamp) $(Q)rm -f $<.timestamp + +ctng-update-config: $(CTNG_DIR)/.config + cp -f $< $(CTNG_CONFIG_FILE)
Signature · 1 line
1.7.10.4
PATCH 3/10 ctng: add ctng-update-config target
Arnout, all,
2012/10/21 Arnout Vandecappelle (Essensium/Mind) <[email protected]>:
Quoted 50 lines
From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
Analogous to linux-update-config and friends.
Also update documentation.
--- docs/manual/customize-store.txt | 8 ++++---- toolchain/toolchain-crosstool-ng/crosstool-ng.mk | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-)docs/manual/customize-store.txt +4
-4@@ -58,8 +58,8 @@ configuration files easier. path specified by +BR2_PACKAGE_BUSYBOX_CONFIG+. * +make uclibc-update-config+ saves the uClibc configuration to the path specified by +BR2_UCLIBC_CONFIG+. -* For crosstool-NG, no helper exists so you have to copy the config - file manually to +BR2_TOOLCHAIN_CTNG_CONFIG+. +* +make ctng-update-config+ saves the crosstool-NG configuration to the + patch specified by +BR2_TOOLCHAIN_CTNG_CONFIG+. Creating your own board support@@ -122,7 +122,7 @@ you can skip the steps that are not relevant for your use case. 1. Write the configuration files: * +make linux-update-defconfig+ * +make busybox-update-config+ - * +cp <output>/build/build-toolchain/.config board/<manufacturer>/<boardname>/ctng.config+ + * +make ctng-update-config+ * +make uclibc-update-config+ * +cp <output>/build/at91bootstrap3-*/.config board/<manufacturer>/<boardname>/at91bootstrap3.config+ 1. Create +board/<manufacturer>/<boardname>/fs-overlay+ and fill it@@ -163,7 +163,7 @@ the buildroot tree). 1. Write the configuration files: * +make linux-update-defconfig+ * +make busybox-update-config+ - * +cp <output>/build/build-toolchain/.config <path-to-board-directory>/ctng.config+ + * +make ctng-update-config+ * +make uclibc-update-config+ * +cp <output>/build/at91bootstrap3-*/.config <path-to-board-directory>/at91bootstrap3.config+ 1. Create +<path-to-board-directory>/fs-overlay+ and fill ittoolchain/toolchain-crosstool-ng/crosstool-ng.mk +0
-0
toolchain/toolchain-crosstool-ng/crosstool-ng.mk ctng-menuconfig: $(CTNG_DIR)/.config · line 402
Quoted 6 lines
toolchain/toolchain-crosstool-ng/crosstool-ng.mk +3
-0@@ -397,3 +397,6 @@ ctng-menuconfig: $(CTNG_DIR)/.config $(call ctng-oldconfig,$<) $(call ctng-check-config-changed,$<,$<.timestamp) $(Q)rm -f $<.timestamp + +ctng-update-config: $(CTNG_DIR)/.config + cp -f $< $(CTNG_CONFIG_FILE)
IIRC, crosstool-NG (recently) learns how to save defconfig, so how about saving the ct-ng defconfig instead?
Regards,
Signature · 1 line
Sam
PATCH 3/10 ctng: add ctng-update-config target
Quoted 5 lines · Samuel Martin
Quoted 3 lines
Quoted 3 lines
+
+ctng-update-config: $(CTNG_DIR)/.config
+ cp -f $< $(CTNG_CONFIG_FILE)IIRC, crosstool-NG (recently) learns how to save defconfig, so how about saving the ct-ng defconfig instead?
Good idea, but non-trivial. Feel free to add it :-)
Regards,
Arnout
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286540 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 4/10 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 to this as well.
--- package/busybox/busybox.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
package/busybox/busybox.mk +1 -1
@@ -215,5 +215,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 4/10 busybox: busybox-update-config should depend on busybox-configure
Arnout, all,
2012/10/21 Arnout Vandecappelle (Essensium/Mind) <[email protected]>:
Quoted 15 lines
From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
Before the config file can be copied, it has to exist. The other xxx-update-config targets to this as well.
--- package/busybox/busybox.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)package/busybox/busybox.mk +0
-0
package/busybox/busybox.mk busybox-menuconfig busybox-xconfig busybox-gconfig: busybox-patch · line 219
Quoted 6 lines
package/busybox/busybox.mk +1
-1@@ -215,5 +215,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)
How about saving the busybox-defconfig instead?
Regards,
Signature · 1 line
Sam
PATCH 4/10 busybox: busybox-update-config should depend on busybox-configure
Quoted 21 lines · Samuel Martin
Arnout, all,
2012/10/21 Arnout Vandecappelle (Essensium/Mind)<[email protected]>:
Quoted 18 lines
Quoted 18 lines
From: "Arnout Vandecappelle (Essensium/Mind)"<[email protected]>
Before the config file can be copied, it has to exist. The other xxx-update-config targets to this as well.
Signed-off-by Arnout Vandecappelle (Essensium/Mind)<[email protected]>---
package/busybox/busybox.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git
a/package/busybox/busybox.mkb/package/busybox/busybox.mkindex 33f8633..e95364c 100644
---a/package/busybox/busybox.mk
+++b/package/busybox/busybox.mk
@@ -215,5 +215,5 @@ busybox-menuconfig busybox-xconfig busybox-gconfig: busybox-patchrm -f $(BUSYBOX_DIR)/.stamp_built rm -f $(BUSYBOX_DIR)/.stamp_target_installed
Quoted 4 lines
Quoted 3 lines
Quoted 3 lines
-busybox-update-config:
+busybox-update-config: busybox-configurecp -f $(BUSYBOX_BUILD_CONFIG) $(BUSYBOX_CONFIG_FILE)How about saving the busybox-defconfig instead?
Is there a busybox version that has a savedefconfig target?
Anyway, that would again be a separate patch.
Regards,
Arnout
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286540 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 5/10 at91bootstrap3: add -update-config target
In reply to Arnout Vandecappelle (Essensium/Mind)From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
--- boot/at91bootstrap3/at91bootstrap3.mk | 7 +++++++ 1 file changed, 7 insertions(+)
boot/at91bootstrap3/at91bootstrap3.mk +7 -0
@@ -65,3 +65,10 @@ $(error No at91bootstrap3 configuration file specified, check your BR2_TARGET_AT endif endif endif + +ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_USE_CUSTOM_CONFIG),y) +at91bootstrap3-update-config: at91bootstrap3-configure + cp -f $(AT91BOOTSTRAP3_DIR)/.config $(AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE) +else +at91bootstrap3-update-config: ; +endif
Signature · 1 line
1.7.10.4
PATCH 6/10 Add update-all-config target
In reply to Arnout Vandecappelle (Essensium/Mind)From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
The update-all-config target updates all the external configuration file with their current values. This includes:
- buildroot
- busybox
- linux
- crosstool-ng
- uClibc
- at91bootstrap3
Linux and buildroot are saved as defconfigs. For Linux, this means that it will fail on kernels before 2.6.33 (when the savedefconfig was added to Linux Kconfig).
---
Barebox is missing because there is no BR2_TARGET_BAREBOX_CONFIG option. Can be added once Maxime's patch has been accepted.
--- Makefile | 6 ++++++ boot/at91bootstrap3/at91bootstrap3.mk | 1 + docs/manual/customize-store.txt | 18 ++++-------------- linux/linux.mk | 2 ++ package/busybox/busybox.mk | 4 ++++ toolchain/toolchain-crosstool-ng/crosstool-ng.mk | 4 ++++ toolchain/uClibc/uclibc.mk | 4 ++++ 7 files changed, 25 insertions(+), 14 deletions(-)
Makefile +6 -0
@@ -548,6 +548,10 @@ legal-info: dirs legal-info-clean legal-info-prepare $(REDIST_SOURCES_DIR) \ show-targets: @echo $(TARGETS) +# UPDATE_ALL_CONFIG_TARGETS is set by the individual packages that have a +# save*config target. +update-all-config: savedefconfig $(UPDATE_ALL_CONFIG_TARGETS) + else # ifeq ($(BR2_HAVE_DOT_CONFIG),y) all: menuconfig
@@ -700,6 +704,8 @@ help: @echo ' defconfig - New config with default answer to all options' @echo ' BR2_DEFCONFIG, if set, is used as input' @echo ' savedefconfig - Save current config as ./defconfig (minimal config)' + @echo ' update-all-config - Update all configuration targets that have an input:' + @echo ' buildroot, busybox, linux, crosstool-ng, uClibc' @echo ' allyesconfig - New config where all options are accepted with yes' @echo ' allnoconfig - New config where all options are answered with no' @echo ' randpackageconfig - New config with random answer to package options'
boot/at91bootstrap3/at91bootstrap3.mk +1 -0
@@ -69,6 +69,7 @@ endif ifeq ($(BR2_TARGET_AT91BOOTSTRAP3_USE_CUSTOM_CONFIG),y) at91bootstrap3-update-config: at91bootstrap3-configure cp -f $(AT91BOOTSTRAP3_DIR)/.config $(AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE) +UPDATE_ALL_CONFIG_TARGETS += at91bootstrap3-update-defconfig else at91bootstrap3-update-config: ; endif
docs/manual/customize-store.txt +4 -14
@@ -60,6 +60,8 @@ configuration files easier. path specified by +BR2_UCLIBC_CONFIG+. * +make ctng-update-config+ saves the crosstool-NG configuration to the patch specified by +BR2_TOOLCHAIN_CTNG_CONFIG+. +* +make update-all-config+ updates all of the above configuration files + for which you have defined the corresponding +_CONFIG+ option. Creating your own board support
@@ -119,12 +121,6 @@ you can skip the steps that are not relevant for your use case. * +BR2_TOOLCHAIN_CTNG_CONFIG+ * +BR2_UCLIBC_CONFIG+ * +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+ -1. Write the configuration files: - * +make linux-update-defconfig+ - * +make busybox-update-config+ - * +make ctng-update-config+ - * +make uclibc-update-config+ - * +cp <output>/build/at91bootstrap3-*/.config board/<manufacturer>/<boardname>/at91bootstrap3.config+ 1. Create +board/<manufacturer>/<boardname>/fs-overlay+ and fill it with additional files you need on your rootfs, e.g. +board/<manufacturer>/<boardname>/etc/inittab+. Set +BR2_ROOTFS_OVERLAY+
@@ -136,7 +132,7 @@ you can skip the steps that are not relevant for your use case. 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. Write the configuration files: +make update-all-config+ 1. +cp defconfig configs/<boardname>_defconfig+
@@ -160,12 +156,6 @@ the buildroot tree). * +BR2_TOOLCHAIN_CTNG_CONFIG+ * +BR2_UCLIBC_CONFIG+ * +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+ -1. Write the configuration files: - * +make linux-update-defconfig+ - * +make busybox-update-config+ - * +make ctng-update-config+ - * +make uclibc-update-config+ - * +cp <output>/build/at91bootstrap3-*/.config <path-to-board-directory>/at91bootstrap3.config+ 1. Create +<path-to-board-directory>/fs-overlay+ and fill it with additional files you need on your rootfs, e.g. +<path-to-board-directory>/etc/inittab+. Set +BR2_ROOTFS_OVERLAY+
@@ -176,7 +166,7 @@ the buildroot tree). 1. If additional setuid permissions have to be set or device nodes have to be created, create +<path-to-board-directory>/device_table.txt+ and add that path to +BR2_ROOTFS_DEVICE_TABLE+. -1. +make savedefconfig+ to save the buildroot configuration. +1. Write the configuration files: +make update-all-config+ 1. +cp defconfig <path-to-board-directory>/buildroot.config+ 1. Create a script or Makefile in the board directory that calls buildroot:
linux/linux.mk +2 -0
@@ -151,6 +151,8 @@ ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y) KERNEL_SOURCE_CONFIG = $(KERNEL_ARCH_PATH)/configs/$(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG))_defconfig else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y) KERNEL_SOURCE_CONFIG = $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE) +# savedefconfig requires a kernel >= 2.6.33 +UPDATE_ALL_CONFIG_TARGETS += linux-update-defconfig endif define LINUX_CONFIGURE_CMDS
package/busybox/busybox.mk +4 -0
@@ -217,3 +217,7 @@ busybox-menuconfig busybox-xconfig busybox-gconfig: busybox-patch busybox-update-config: busybox-configure cp -f $(BUSYBOX_BUILD_CONFIG) $(BUSYBOX_CONFIG_FILE) + +ifneq ($(BUSYBOX_CONFIG_FILE),) +UPDATE_ALL_CONFIG_TARGETS += busybox-update-config +endif
toolchain/toolchain-crosstool-ng/crosstool-ng.mk +4 -0
@@ -400,3 +400,7 @@ ctng-menuconfig: $(CTNG_DIR)/.config ctng-update-config: $(CTNG_DIR)/.config cp -f $< $(CTNG_CONFIG_FILE) + +ifneq ($(CTNG_CONFIG_FILE),) +UPDATE_ALL_CONFIG_TARGETS += ctng-update-config +endif
toolchain/uClibc/uclibc.mk +4 -0
@@ -508,6 +508,10 @@ uclibc-oldconfig: $(UCLIBC_DIR)/.oldconfig uclibc-update-config: uclibc-config cp -f $(UCLIBC_DIR)/.config $(UCLIBC_CONFIG_FILE) +ifneq ($(UCLIBC_CONFIG_FILE),) +UPDATE_ALL_CONFIG_TARGETS += uclibc-update-config +endif + uclibc-configured: gcc_initial kernel-headers $(UCLIBC_DIR)/.configured uclibc-configured-source: uclibc-source
Signature · 1 line
1.7.10.4
PATCH 7/10 busybox: update-all-config shouldn't update default busybox config
In reply to Arnout Vandecappelle (Essensium/Mind)From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
The new update-all-config target will update the busybox config file if BR2_PACKAGE_BUSYBOX_CONFIG is set, even if it is set to the default value in package/busybox/busybox-xxx.config.
To avoid this, set the default BR2_PACKAGE_BUSYBOX_CONFIG to empty, and select a default to use in the .mk file.
Note that busybox-update-config will still overwrite the default file in package/busybox/busybox-xxx.config - presumably it's intentional.
--- package/busybox/Config.in | 7 ++----- package/busybox/busybox.mk | 9 +++++---- 2 files changed, 7 insertions(+), 9 deletions(-)
package/busybox/Config.in +2 -5
@@ -40,15 +40,12 @@ config BR2_BUSYBOX_VERSION config BR2_PACKAGE_BUSYBOX_CONFIG string "BusyBox configuration file to use?" - default "package/busybox/busybox-1.20.x.config" if BR2_PACKAGE_BUSYBOX_SNAPSHOT - default "package/busybox/busybox-1.18.x.config" if BR2_BUSYBOX_VERSION_1_18_X - default "package/busybox/busybox-1.19.x.config" if BR2_BUSYBOX_VERSION_1_19_X - default "package/busybox/busybox-1.20.x.config" if BR2_BUSYBOX_VERSION_1_20_X + default "" help Some people may wish to use their own modified BusyBox configuration file, and will specify their config file location with this option. - Most people will just use the default BusyBox configuration file. + If left empty, a default configuration file is used. config BR2_PACKAGE_BUSYBOX_SHOW_OTHERS bool "Show packages that are also provided by busybox"
package/busybox/busybox.mk +5 -4
@@ -6,9 +6,11 @@ ifeq ($(BR2_PACKAGE_BUSYBOX_SNAPSHOT),y) BUSYBOX_VERSION = snapshot +BUSYBOX_CONFIG_VERSION = 1.20 BUSYBOX_SITE = http://www.busybox.net/downloads/snapshots else BUSYBOX_VERSION = $(call qstrip,$(BR2_BUSYBOX_VERSION)) +BUSYBOX_CONFIG_VERSION = $(subst $(space),.,$(wordlist 1,2,$(subst .,$(space),$(BUSYBOX_VERSION)))) BUSYBOX_SITE = http://www.busybox.net/downloads endif BUSYBOX_SOURCE = busybox-$(BUSYBOX_VERSION).tar.bz2
@@ -27,9 +29,8 @@ BUSYBOX_MAKE_OPTS = \ CONFIG_PREFIX="$(TARGET_DIR)" \ SKIP_STRIP=y -ifndef BUSYBOX_CONFIG_FILE - BUSYBOX_CONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG)) -endif +BUSYBOX_CONFIG = $(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG)) +BUSYBOX_CONFIG_FILE = $(or $(wildcard $(BUSYBOX_CONFIG)),package/busybox/busybox-$(BUSYBOX_CONFIG_VERSION).x.config) define BUSYBOX_PERMISSIONS /bin/busybox f 4755 0 0 - - - - -
@@ -218,6 +219,6 @@ busybox-menuconfig busybox-xconfig busybox-gconfig: busybox-patch busybox-update-config: busybox-configure cp -f $(BUSYBOX_BUILD_CONFIG) $(BUSYBOX_CONFIG_FILE) -ifneq ($(BUSYBOX_CONFIG_FILE),) +ifneq ($(BUSYBOX_CONFIG),) UPDATE_ALL_CONFIG_TARGETS += busybox-update-config endif
Signature · 1 line
1.7.10.4
PATCH 8/10 crosstool-ng: update-all-config shouldn't update default busybox config
In reply to Arnout Vandecappelle (Essensium/Mind)From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
The new update-all-config target will update the ctng config file if BR2_TOOLCHAIN_CTNG_CONFIG is set, even if it is set to the default value in toolchain/toolchain-crosstool-ng/crosstool-ng.config-xxx
To avoid this, set the default BR2_TOOLCHAIN_CTNG_CONFIG to empty, and select a default to use in the .mk file.
Note that ctng-update-config will still overwrite the default file in toolchain/toolchain-crosstool-ng/crosstool-ng.config-xxx - presumably it's intentional.
Also factored out the often-qstripped BR2_TOOLCHAIN_CTNG_LIBC (thereby adding a few missing qstrips).
--- toolchain/toolchain-crosstool-ng/Config.in | 6 ++---- toolchain/toolchain-crosstool-ng/crosstool-ng.mk | 16 +++++++++------- 2 files changed, 11 insertions(+), 11 deletions(-)
toolchain/toolchain-crosstool-ng/Config.in +2 -4
@@ -36,15 +36,13 @@ config BR2_TOOLCHAIN_CTNG_LIBC config BR2_TOOLCHAIN_CTNG_CONFIG string "crosstool-NG configuration file to use" - default "toolchain/toolchain-crosstool-ng/crosstool-ng.config-uClibc" if BR2_TOOLCHAIN_CTNG_uClibc - default "toolchain/toolchain-crosstool-ng/crosstool-ng.config-eglibc" if BR2_TOOLCHAIN_CTNG_eglibc - default "toolchain/toolchain-crosstool-ng/crosstool-ng.config-glibc" if BR2_TOOLCHAIN_CTNG_glibc + default "" help Enter here the crosstool-NG's .config file to use. To fine-tune your toolchain, you can also call: make ctng-menuconfig - If unsure, keep the default value. + If left empty, a default configuration file is used. if BR2_TOOLCHAIN_CTNG_uClibc
toolchain/toolchain-crosstool-ng/crosstool-ng.mk +9 -7
@@ -9,9 +9,11 @@ # Internal variables CTNG_DIR := $(BUILD_DIR)/build-toolchain +CTNG_LIBC = $(call qstrip,$(BR2_TOOLCHAIN_CTNG_LIBC)) CTNG_UCLIBC_CONFIG_FILE := $(TOPDIR)/toolchain/uClibc/uClibc-0.9.33.config -CTNG_CONFIG_FILE:=$(call qstrip,$(BR2_TOOLCHAIN_CTNG_CONFIG)) +CTNG_CONFIG = $(call qstrip,$(BR2_TOOLCHAIN_CTNG_CONFIG)) +CTNG_CONFIG_FILE = $(or $(wildcard $(CTNG_CONFIG)),toolchain/toolchain-crosstool-ng/crosstool-ng.config-$(CTNG_LIBC)) # Hack! ct-ng is in fact a Makefile script. As such, it accepts all # make options, such as -C, which makes it uneeded to chdir prior
@@ -50,7 +52,7 @@ CTNG_LIBS_eglibc := $(CTNG_LIBS_glibc) #-------------- # All that we need in /lib -CTNG_LIBS_LIB += $(CTNG_LIBS_$(call qstrip,$(BR2_TOOLCHAIN_CTNG_LIBC))) +CTNG_LIBS_LIB += $(CTNG_LIBS_$(CTNG_LIBC)) #-------------- # All that we need in /usr/lib
@@ -348,7 +350,7 @@ define ctng-oldconfig $(call ctng,CT_IS_A_BACKEND=y \ CT_BACKEND_ARCH=$(CTNG_ARCH) \ CT_BACKEND_KERNEL=linux \ - CT_BACKEND_LIBC=$(BR2_TOOLCHAIN_CTNG_LIBC) \ + CT_BACKEND_LIBC=$(CTNG_LIBC) \ oldconfig ) $(call ctng-fix-dot-config,$(1),$(CTNG_FIX_DOT_CONFIG_PATHS_SED)) endef
@@ -372,9 +374,9 @@ $(CTNG_DIR)/.config: $(CTNG_CONFIG_FILE) $(CONFIG_DIR)/.config $(Q)if [ ! -f $@ ]; then \ mkdir -p "$(CTNG_DIR)"; \ libc="$$(awk -F '"' '$$1=="CT_LIBC=" { print $$2; }' "$<")"; \ - if [ "$${libc}" != "$(BR2_TOOLCHAIN_CTNG_LIBC)" ]; then \ + if [ "$${libc}" != "$(CTNG_LIBC)" ]; then \ echo "* Inconsistency in crosstool-NG config file '$<'"; \ - echo "* - buildroot configured for '$(BR2_TOOLCHAIN_CTNG_LIBC)'"; \ + echo "* - buildroot configured for '$(CTNG_LIBC)'"; \ echo "* - given config file for '$${libc}'"; \ exit 1; \ fi; \
@@ -392,7 +394,7 @@ ctng-menuconfig: $(CTNG_DIR)/.config $(Q)$(call ctng,CT_IS_A_BACKEND=y \ CT_BACKEND_ARCH=$(CTNG_ARCH) \ CT_BACKEND_KERNEL=linux \ - CT_BACKEND_LIBC=$(BR2_TOOLCHAIN_CTNG_LIBC) \ + CT_BACKEND_LIBC=$(CTNG_LIBC) \ menuconfig ) $(call ctng-oldconfig,$<) $(call ctng-check-config-changed,$<,$<.timestamp)
@@ -401,6 +403,6 @@ ctng-menuconfig: $(CTNG_DIR)/.config ctng-update-config: $(CTNG_DIR)/.config cp -f $< $(CTNG_CONFIG_FILE) -ifneq ($(CTNG_CONFIG_FILE),) +ifneq ($(CTNG_CONFIG),) UPDATE_ALL_CONFIG_TARGETS += ctng-update-config endif
Signature · 1 line
1.7.10.4
PATCH 8/10 crosstool-ng: update-all-config shouldn't update default busybox config
Arnout, all
Nitpicking: take care of the commit message. ;-)
In the subject: s/busybox/crosstool-ng/
Regards,
Signature · 1 line
Sam
PATCH 8/10 crosstool-ng: update-all-config shouldn't update default busybox config
Quoted 2 lines · Samuel Martin
Nitpicking: take care of the commit message.;-)
In the subject: s/busybox/crosstool-ng/
ACK, thanks,
Regards,
Arnout
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286540 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 9/10 uClibc: update-all-config shouldn't update default uClibc config
In reply to Arnout Vandecappelle (Essensium/Mind)From: "Arnout Vandecappelle (Essensium/Mind)" <[email protected]>
The new update-all-config target will update the uClibc config file if BR2_UCLIBC_CONFIG is set, even if it is set to the default value in toolchain/uClibc/uClibc-xxx.config.
To avoid this, set the default BR2_UCLIBC_CONFIG to empty, and select a default to use in the .mk file.
Note that uclibc-update-config will still overwrite the default file in toolchain/uClibc/uClibc-xxx.config - presumably it's intentional.
--- toolchain/uClibc/Config.in | 7 ++----- toolchain/uClibc/uclibc.mk | 23 +++++++++++------------ 2 files changed, 13 insertions(+), 17 deletions(-)
toolchain/uClibc/Config.in +2 -5
@@ -42,15 +42,12 @@ config BR2_UCLIBC_VERSION_STRING config BR2_UCLIBC_CONFIG string "uClibc configuration file to use?" - default "toolchain/uClibc/uClibc-0.9.31.config" if BR2_UCLIBC_VERSION_0_9_31 - default "toolchain/uClibc/uClibc-0.9.32.config" if BR2_UCLIBC_VERSION_0_9_32 - default "toolchain/uClibc/uClibc-0.9.33.config" if BR2_UCLIBC_VERSION_0_9_33 - default "toolchain/uClibc/uClibc-snapshot.config" if BR2_UCLIBC_VERSION_SNAPSHOT + default "" help Some people may wish to use their own modified uClibc configuration file and will specify their config file location with this option. See also docs/README in this package. - If unsure, use the default. + If left empty, a default configuration will be used. config BR2_PTHREAD_DEBUG bool "Thread library debugging"
toolchain/uClibc/uclibc.mk +11 -12
@@ -6,22 +6,21 @@ ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y) -# specifying UCLIBC_CONFIG_FILE on the command-line overrides the .config -# setting. -ifndef UCLIBC_CONFIG_FILE -UCLIBC_CONFIG_FILE=$(call qstrip,$(BR2_UCLIBC_CONFIG)) -endif - -UCLIBC_VERSION:=$(call qstrip,$(BR2_UCLIBC_VERSION_STRING)) +UCLIBC_VERSION = $(call qstrip,$(BR2_UCLIBC_VERSION_STRING)) ifeq ($(BR2_UCLIBC_VERSION_SNAPSHOT),y) -UCLIBC_SITE:=http://www.uclibc.org/downloads/snapshots -UCLIBC_DIR:=$(TOOLCHAIN_DIR)/uClibc +UCLIBC_SITE = http://www.uclibc.org/downloads/snapshots +UCLIBC_DIR = $(TOOLCHAIN_DIR)/uClibc +UCLIBC_CONFIG_VERSION = snapshot else -UCLIBC_SITE:=http://www.uclibc.org/downloads -UCLIBC_DIR:=$(TOOLCHAIN_DIR)/uClibc-$(UCLIBC_VERSION) +UCLIBC_SITE = http://www.uclibc.org/downloads +UCLIBC_DIR = $(TOOLCHAIN_DIR)/uClibc-$(UCLIBC_VERSION) +UCLIBC_CONFIG_VERSION = $(subst $(space),.,$(wordlist 1,3,$(subst .,$(space),$(UCLIBC_VERSION)))) endif +UCLIBC_CONFIG = $(call qstrip,$(BR2_UCLIBC_CONFIG)) +UCLIBC_CONFIG_FILE = $(or $(wildcard $(UCLIBC_CONFIG)),toolchain/uClibc/uClibc-$(UCLIBC_CONFIG_VERSION).config) + UCLIBC_PATCH_DIR:=toolchain/uClibc/ UCLIBC_SOURCE:=uClibc-$(UCLIBC_VERSION).tar.bz2
@@ -508,7 +507,7 @@ uclibc-oldconfig: $(UCLIBC_DIR)/.oldconfig uclibc-update-config: uclibc-config cp -f $(UCLIBC_DIR)/.config $(UCLIBC_CONFIG_FILE) -ifneq ($(UCLIBC_CONFIG_FILE),) +ifneq ($(UCLIBC_CONFIG),) UPDATE_ALL_CONFIG_TARGETS += uclibc-update-config endif
Signature · 1 line
1.7.10.4
PATCH 10/10 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.
--- Config.in | 12 ++++++++++++ Makefile | 17 +++++++++++++---- docs/manual/customize-store.txt | 1 + 3 files changed, 26 insertions(+), 4 deletions(-)
Config.in +12 -0
@@ -16,6 +16,18 @@ config BR2_HOSTARCH source "target/Config.in.arch" +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
@@ -556,6 +556,8 @@ else # ifeq ($(BR2_HAVE_DOT_CONFIG),y) all: menuconfig +endif # ifeq ($(BR2_HAVE_DOT_CONFIG),y) + # configuration # ---------------------------------------------------------------------------
@@ -566,7 +568,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 \
@@ -638,7 +645,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
@@ -646,13 +653,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 +1 -0
@@ -156,6 +156,7 @@ the buildroot tree). * +BR2_TOOLCHAIN_CTNG_CONFIG+ * +BR2_UCLIBC_CONFIG+ * +BR2_TARGET_AT91BOOTSTRAP3_CUSTOM_CONFIG_FILE+ +1. Set +BR2_DEFCONFIG+ to +<path-to-board-directory>/buildroot.config+ 1. Create +<path-to-board-directory>/fs-overlay+ and fill it with additional files you need on your rootfs, e.g. +<path-to-board-directory>/etc/inittab+. Set +BR2_ROOTFS_OVERLAY+
Signature · 1 line
1.7.10.4