Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
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

  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