From: Peter Korsgaard <jacmet@uclibc.org>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 01/10] New, simpler, infrastructure for building the Linux kernel
Date: Fri, 18 Jun 2010 21:30:06 +0200 [thread overview]
Message-ID: <87bpb8b0ld.fsf@macbook.be.48ers.dk> (raw)
In-Reply-To: <851a84fbbe113196adb69e1a241e18a958cd77c2.1276454802.git.thomas.petazzoni@free-electrons.com> (Thomas Petazzoni's message of "Sun, 13 Jun 2010 20:50:05 +0200")
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:
Hi, some comments:
Thomas> This patch introduces a single, simple, infrastructure to build the
Thomas> Linux kernel. The configuration is limited to :
Thomas> * Kernel version: a fixed recent stable version, custom stable
Thomas> version, or custom tarball URL
Thomas> * Kernel patch: either a local file, directory or an URL
Thomas> * Kernel configuration: either the name of a defconfig or the
Thomas> location of a custom configuration file
Thomas> * Kernel image: either uImage, bzImage, zImage or vmlinux.
Thomas> +choice
Thomas> + prompt "Kernel version"
Thomas> + default BR2_LINUX_KERNEL_2_6_34
Thomas> +
Thomas> +config BR2_LINUX_KERNEL_2_6_34
Thomas> + bool "2.6.34"
Thomas> +
Thomas> +config BR2_LINUX_KERNEL_CUSTOM_STABLE
Thomas> + bool "Custom stable version"
I would drop "stable" here.
Thomas> +
Thomas> +config BR2_LINUX_KERNEL_CUSTOM_TARBALL
Thomas> + bool "Custom tarball"
Thomas> +
What about the same-as-kernel-headers choice? Or perhaps the fixed
version should used that?
Thomas> +if BR2_LINUX_KERNEL_CUSTOM_TARBALL
Thomas> +
Thomas> +config BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION
Thomas> + string "URL of custom kernel tarball"
Thomas> +
Thomas> +endif # BR2_LINUX_KERNEL_CUSTOM_TARBALL
For single options, just adding the 'depends on
BR2_LINUX_KERNEL_CUSTOM_TARBALL' is shorter/easier to read than all
those endif's - IMHO.
Thomas> +config BR2_LINUX_KERNEL_PATCH
Thomas> + bool "Custom patch for the Linux kernel"
Thomas> +
Thomas> +if BR2_LINUX_KERNEL_PATCH
Thomas> +
Thomas> +config BR2_LINUX_KERNEL_PATCH_LOCATION
Thomas> + string "Location of custom kernel patch"
Thomas> + help
Thomas> + The location can be an URL, a file path, or a directory. In
Thomas> + the case of a directory, all files matching linux-*.patch
Thomas> + will be applied.
Thomas> +
Thomas> +endif # BR2_LINUX_KERNEL_PATCH
Why not just keep this a single option and only make it do something if
it's different than ""?
Thomas> +choice
Thomas> + prompt "Kernel configuration"
Thomas> + default BR2_LINUX_KERNEL_USE_DEFCONFIG
Thomas> +
Thomas> +config BR2_LINUX_KERNEL_USE_DEFCONFIG
Thomas> + bool "Using a defconfig"
Thomas> +
Thomas> +config BR2_LINUX_KERNEL_USE_CUSTOM
Thomas> + bool "Using a custom config file"
Thomas> +
Thomas> +endchoice
Thomas> +
Thomas> +if BR2_LINUX_KERNEL_USE_DEFCONFIG
Thomas> +
Thomas> +config BR2_LINUX_KERNEL_DEFCONFIG
Thomas> + string "Defconfig name"
Thomas> + help
Thomas> + Name of the defconfig file to use, without the leading
Thomas> + _defconfig.
Trailing.
Thomas> +
Thomas> +endif # BR2_LINUX_KERNEL_USE_DEFCONFIG
Thomas> +
Thomas> +if BR2_LINUX_KERNEL_USE_CUSTOM
Thomas> +
Thomas> +config BR2_LINUX_KERNEL_CUSTOM_FILE
Thomas> + string "Configuration file path"
Thomas> + help
Thomas> + Path to the kernel configuration file.
Thomas> +
Thomas> +endif # BR2_LINUX_KERNEL_USE_CUSTOM
I think it would be nicer to do something like what you're doing with
BR2_LINUX_KERNEL_PATCH_LOCATION - E.G. make it autodetect if it's a
defconfig in the kernel tree or an external file. You can either do this
using $(wildcard ..) (to check if the file exists), or simply check for
slashes in the string $(findstring /,..).
If we do this, then I would prefer to give the complete make target for
defconfigs - E.G. 'blah_defconfig', no just 'blah'.
Thomas> +choice
Thomas> + prompt "Kernel binary format"
Thomas> + default BR2_LINUX_KERNEL_UIMAGE if !BR2_386
Thomas> + default BR2_LINUX_KERNEL_BZIMAGE if BR2_386
The symbol is BR2_i386. I guess we also want it on BR2_x86_64 as well.
I would have expected to see a hidden BR2_LINUX_KERNEL_FORMAT with the
text strings "zImage", "bzImage", "uImage", .. - That can then be used
as the make target.
Thomas> +# Get the real Linux version, which tells us where kernel modules are
Thomas> +# going to be installed in the target filesystem.
Thomas> +LINUX26_VERSION_PROBED = `$(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) --no-print-directory -s kernelrelease`
We typically use $(shell ..)
Thomas> +# Download
Thomas> +$(LINUX26_DIR)/.stamp_downloaded:
Thomas> + @$(call MESSAGE,"Downloading kernel")
Thomas> + $(call DOWNLOAD,$(LINUX26_SITE),$(LINUX26_SOURCE))
Thomas> +ifeq ($(BR2_LINUX_KERNEL_PATCH),y)
Thomas> +ifneq ($(findstring http://,$(LINUX26_PATCH)),)
Thomas> + $(call DOWNLOAD,$(dir $(LINUX26_PATCH)),$(notdir $(LINUX26_PATCH)))
Thomas> +else ifneq ($(findstring ftp://,$(LINUX26_PATCH)),)
Thomas> + $(call DOWNLOAD,$(dir $(LINUX26_PATCH)),$(notdir $(LINUX26_PATCH)))
You can combine these using $(filter) - E.G.:
ifneq ($(filter http:// ftp://,$(LINUX26_PATCH)),)
Thomas> +# Patch
Thomas> +$(LINUX26_DIR)/.stamp_patched: $(LINUX26_DIR)/.stamp_extracted
Thomas> + @$(call MESSAGE,"Patching kernel")
Thomas> +ifeq ($(BR2_LINUX_KERNEL_PATCH),y)
Thomas> +ifneq ($(findstring http://,$(LINUX26_PATCH)),)
Thomas> + toolchain/patch-kernel.sh $(@D) $(DL_DIR) $(notdir $(LINUX26_PATCH))
Thomas> +else ifneq ($(findstring ftp://,$(LINUX26_PATCH)),)
Thomas> + toolchain/patch-kernel.sh $(@D) $(DL_DIR) $(notdir $(LINUX26_PATCH))
Same as above.
Thomas> +else ifeq ($(shell test -d $(LINUX26_PATCH) && echo "dir"),dir)
Thomas> + toolchain/patch-kernel.sh $(@D) $(LINUX26_PATCH) linux-*.patch
You have to escape the * - E.G. linux-\*.patch
Thomas> +else
Thomas> + toolchain/patch-kernel.sh $(@D) $(dir $(LINUX26_PATCH)) $(notdir $(LINUX26_PATCH))
Thomas> +endif
Thomas> +endif
Thomas> + $(Q)touch $@
Thomas> +
Thomas> +
Thomas> +# Configuration
Thomas> +$(LINUX26_DIR)/.stamp_configured: $(LINUX26_DIR)/.stamp_patched
Thomas> + @$(call MESSAGE,"Configuring kernel")
Thomas> +ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
Thomas> + $(MAKE1) $(LINUX26_MAKE_FLAGS) -C $(@D) $(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG))_defconfig
Thomas> +else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM),y)
Thomas> + cp $(BR2_LINUX_KERNEL_CUSTOM_FILE) $(@D)/.config
Thomas> + yes "" | $(MAKE1) $(LINUX26_MAKE_FLAGS) -C $(@D) oldconfig
Hmm, why the yes '' here and not for defconfig? I would prefer to get
rid of it, so the user is in control (they can always use the yes
''|make stuff on the BR commandline if they want unattended builds, like
I do for buildbot).
Thomas> +endif
Thomas> + $(Q)touch $@
Thomas> +
Thomas> +# Compilation
Thomas> +$(LINUX26_DIR)/.stamp_compiled: $(LINUX26_DIR)/.stamp_configured
Thomas> + @$(call MESSAGE,"Compiling kernel")
Thomas> + $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(@D)
Thomas> +ifeq ($(BR2_LINUX_KERNEL_UIMAGE),y)
Thomas> + $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(@D) uImage
Why not simply $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(@D) $(LINUX26_FORMAT)
where LINUX26_FORMAT is uImage/zImage/bzImage? That's afaik how it used
to be done.
Thomas> +# Installation
Thomas> +$(LINUX26_DIR)/.stamp_installed: $(LINUX26_DIR)/.stamp_compiled
Thomas> + @$(call MESSAGE,"Installing kernel")
Thomas> + cp $(LINUX26_IMAGE_PATH) $(BINARIES_DIR)
Thomas> + $(MAKE1) $(LINUX26_MAKE_FLAGS) -C $(@D) \
Thomas> + INSTALL_MOD_PATH=$(TARGET_DIR) modules_install
Does that do something sane with a nonmodular kernel?
Thomas> + # Remove symbolic links pointing to build directories, not
Thomas> + # relevant on the target
Thomas> + rm -f $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION_PROBED)/build
Thomas> + rm -f $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION_PROBED)/source
Thomas> + $(Q)touch $@
Thomas> +
Thomas> +linux26: $(LINUX26_DEPENDENCIES) $(LINUX26_DIR)/.stamp_installed
Thomas> +
Thomas> +ifeq ($(BR2_LINUX_KERNEL),y)
Thomas> +TARGETS+=linux26
Thomas> +endif
Thomas> \ No newline at end of file
You're good at this one ;)
--
Bye, Peter Korsgaard
next prev parent reply other threads:[~2010-06-18 19:30 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-13 18:50 [Buildroot] [pull request] Pull request for branch linux-cleanup Thomas Petazzoni
2010-06-13 18:50 ` [Buildroot] [PATCH 01/10] New, simpler, infrastructure for building the Linux kernel Thomas Petazzoni
2010-06-18 19:30 ` Peter Korsgaard [this message]
2010-06-19 14:13 ` Thomas Petazzoni
2010-06-19 19:48 ` Peter Korsgaard
2010-06-20 13:35 ` Thomas Petazzoni
2010-06-20 17:51 ` Peter Korsgaard
2010-06-20 19:22 ` Thomas Petazzoni
2010-06-20 21:08 ` Peter Korsgaard
2010-06-13 18:50 ` [Buildroot] [PATCH 02/10] Remove old Linux infrastructure Thomas Petazzoni
2010-06-13 18:50 ` [Buildroot] [PATCH 03/10] iso9660: take into account the linux changes Thomas Petazzoni
2010-06-18 19:32 ` Peter Korsgaard
2010-06-13 18:50 ` [Buildroot] [PATCH 04/10] module-init-tools: remove support for cross-depmod Thomas Petazzoni
2010-06-13 18:50 ` [Buildroot] [PATCH 05/10] module-init-tools: bump version + convert to autotools Thomas Petazzoni
2010-06-18 19:34 ` Peter Korsgaard
2010-06-13 18:50 ` [Buildroot] [PATCH 06/10] linux: Add dependency on host-module-init-tools Thomas Petazzoni
2010-06-13 18:50 ` [Buildroot] [PATCH 07/10] Add generic functions to enable/set/disable options in kconfig files Thomas Petazzoni
2010-06-13 18:50 ` [Buildroot] [PATCH 08/10] linux: adjust kernel config according to the Buildroot configuration Thomas Petazzoni
2010-06-18 19:43 ` Peter Korsgaard
2010-06-19 14:24 ` Thomas Petazzoni
2010-06-19 17:45 ` Peter Korsgaard
[not found] ` <AANLkTincS1TpfzFUHCVgD5kr8csXcHUuaQzjzOSabD6N@mail.gmail.com>
2010-06-20 7:06 ` Peter Korsgaard
2010-06-13 18:50 ` [Buildroot] [PATCH 09/10] linux: add support for linux26-{menuconfig, xconfig, gconfig} targets Thomas Petazzoni
2010-06-13 18:50 ` [Buildroot] [PATCH 10/10] linux: add support for initramfs Thomas Petazzoni
2010-06-14 1:50 ` [Buildroot] [pull request] Pull request for branch linux-cleanup Paul Jones
2010-06-18 6:46 ` Thomas Petazzoni
2010-06-20 13:37 ` Thomas Petazzoni
2010-06-20 13:51 ` Thomas Petazzoni
2010-06-20 17:52 ` Peter Korsgaard
2010-06-20 19:22 ` Thomas Petazzoni
2010-06-22 20:15 ` Thomas Petazzoni
2010-06-23 9:29 ` Peter Korsgaard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87bpb8b0ld.fsf@macbook.be.48ers.dk \
--to=jacmet@uclibc.org \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox