Patchwork linux: add default defconfig

login
register
mail settings
Submitter Arnout Vandecappelle
Date Sept. 2, 2012, 3:05 p.m.
Message ID <1346598341-20434-1-git-send-email-arnout@mind.be>
Download mbox | patch
Permalink /patch/181185/
State Rejected
Headers show

Comments

Arnout Vandecappelle - Sept. 2, 2012, 3:05 p.m.
Buildroot currently requires a defconfig to be supplied for the kernel:
either a custom supplied one, or one from the kernel tree.  However,
the kernel can (usually) also select a default defconfig, based on
the architecture.  So make this option available to buildroot.

We also make this the default, so the user can compile a kernel with
minimal effort.

Microblaze currently (linux-3.5) doesn't have a default defconfig.
Older versions also lack it for some architectures (e.g. mips was
introduced in 2.6.35) but that's nearly impossible to check for at
buildroot level.

Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

---
 linux/Config.in |    8 +++++++-
 linux/linux.mk  |   15 ++++++++++++++-
 2 files changed, 21 insertions(+), 2 deletions(-)
Yann E. MORIN - Sept. 2, 2012, 3:16 p.m.
Arnout, All,

On Sunday 02 September 2012 17:05:41 Arnout Vandecappelle (Essensium/Mind) wrote:
> Buildroot currently requires a defconfig to be supplied for the kernel:
> either a custom supplied one, or one from the kernel tree.  However,
> the kernel can (usually) also select a default defconfig, based on
> the architecture.  So make this option available to buildroot.
> 
> We also make this the default, so the user can compile a kernel with
> minimal effort.
> 
> Microblaze currently (linux-3.5) doesn't have a default defconfig.
> Older versions also lack it for some architectures (e.g. mips was
> introduced in 2.6.35) but that's nearly impossible to check for at
> buildroot level.
> 
> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

Regards,
Yann E. MORIN.
Thomas Petazzoni - May 26, 2013, 3:54 p.m.
Dear Arnout Vandecappelle (Essensium/Mind),

On Sun,  2 Sep 2012 17:05:41 +0200, Arnout Vandecappelle
(Essensium/Mind) wrote:
> Buildroot currently requires a defconfig to be supplied for the kernel:
> either a custom supplied one, or one from the kernel tree.  However,
> the kernel can (usually) also select a default defconfig, based on
> the architecture.  So make this option available to buildroot.
> 
> We also make this the default, so the user can compile a kernel with
> minimal effort.
> 
> Microblaze currently (linux-3.5) doesn't have a default defconfig.
> Older versions also lack it for some architectures (e.g. mips was
> introduced in 2.6.35) but that's nearly impossible to check for at
> buildroot level.
> 
> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

I'm not sure I agree with this one. On many architectures, the default
defconfig doesn't necessarily make sense. For example, on ARM, the
default defconfig is versatile, which is very unlikely to match the
user's hardware.

In the current situation, if the user only enables the "Linux kernel",
he gets an error at build time telling him that building a kernel
without specifying a configuration is not possible. I think this is a
sane behavior that should be preserved.

With this patch, the user will enable "Linux kernel", not notice that
it should be configured, do the build, and then try to boot the kernel
on some hardware platform... and get something that doesn't work at all.

So I believe here that "compiling a kernel with minimal effort" is not
possible. You _have_ to select a configuration.

The only architecture on which I believe this would make sense are i386
and x86_64, because the kernel only provides one defconfig for each of
them. In this case, something like:

config BR2_LINUX_KERNEL_DEFCONFIG
        string "Defconfig name"
        depends on BR2_LINUX_KERNEL_USE_DEFCONFIG
+	default "i386" if BR2_i386
+	default "x86_64" if BR2_x86_64

would be sufficient. Even though some defconfig contain so many options
enabled that they take ages to build, and are a bit irrelevant to build
a kernel for an embedded system, but that's a different story.

Best regards,

Thomas

Patch

diff --git a/linux/Config.in b/linux/Config.in
index 9c63215..1165bc9 100644
--- a/linux/Config.in
+++ b/linux/Config.in
@@ -101,7 +101,13 @@  config BR2_LINUX_KERNEL_PATCH
 
 choice
 	prompt "Kernel configuration"
-	default BR2_LINUX_KERNEL_USE_DEFCONFIG
+	# microblaze doesn't have an in-kernel defconfig (as of 3.5)
+	default BR2_LINUX_KERNEL_USE_DEFCONFIG if BR2_microblazeel || BR2_microblazebe
+	default BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG
+
+config BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG
+	bool "Using the default supplied by the kernel"
+	depends on !(BR2_microblazeel || BR2_microblazebe)
 
 config BR2_LINUX_KERNEL_USE_DEFCONFIG
 	bool "Using a defconfig"
diff --git a/linux/linux.mk b/linux/linux.mk
index c4bdf90..a248ae4 100644
--- a/linux/linux.mk
+++ b/linux/linux.mk
@@ -146,6 +146,13 @@  endef
 
 LINUX_POST_PATCH_HOOKS += LINUX_APPLY_PATCHES
 
+ifeq ($(BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG),y)
+
+define LINUX_BASE_CONFIGURE_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) defconfig
+endef
+
+else # BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG
 
 ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
 KERNEL_SOURCE_CONFIG = $(KERNEL_ARCH_PATH)/configs/$(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG))_defconfig
@@ -153,10 +160,16 @@  else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
 KERNEL_SOURCE_CONFIG = $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
 endif
 
-define LINUX_CONFIGURE_CMDS
+define LINUX_BASE_CONFIGURE_CMDS
 	cp $(KERNEL_SOURCE_CONFIG) $(KERNEL_ARCH_PATH)/configs/buildroot_defconfig
 	$(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) buildroot_defconfig
 	rm $(KERNEL_ARCH_PATH)/configs/buildroot_defconfig
+endef
+
+endif # BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG
+
+define LINUX_CONFIGURE_CMDS
+	$(LINUX_BASE_CONFIGURE_CMDS)
 	$(if $(BR2_ARM_EABI),
 		$(call KCONFIG_ENABLE_OPT,CONFIG_AEABI,$(@D)/.config),
 		$(call KCONFIG_DISABLE_OPT,CONFIG_AEABI,$(@D)/.config))