diff mbox

Linux kernel: add support for config fragment files

Message ID 1423576221-24249-1-git-send-email-bos@je-eigen-domein.nl
State Superseded
Headers show

Commit Message

Floris Bos Feb. 10, 2015, 1:50 p.m. UTC
Adds configuration option to merge additional kernel configuration files
to the main kernel configuration using scripts/kconfig/merge_config.sh

For use-cases in which it is desired to build a custom Linux kernel based on
the defconfig of the target device, but with a couple extra options/modules
enabled.

Signed-off-by: Floris Bos <bos@je-eigen-domein.nl>
---
 linux/Config.in | 6 ++++++
 linux/linux.mk  | 3 +++
 2 files changed, 9 insertions(+)

Comments

Baruch Siach Feb. 10, 2015, 7:19 p.m. UTC | #1
Hi Floris,

On Tue, Feb 10, 2015 at 02:50:21PM +0100, Floris Bos wrote:
> Adds configuration option to merge additional kernel configuration files
> to the main kernel configuration using scripts/kconfig/merge_config.sh
> 
> For use-cases in which it is desired to build a custom Linux kernel based on
> the defconfig of the target device, but with a couple extra options/modules
> enabled.
> 
> Signed-off-by: Floris Bos <bos@je-eigen-domein.nl>
> ---

[...]

> @@ -178,6 +179,8 @@ define LINUX_CONFIGURE_CMDS
>  	$(INSTALL) -m 0644 $(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
> +	$(if $(LINUX_KERNEL_CONFIG_FRAGMENTS),
> +		$(@D)/scripts/kconfig/merge_config.sh -m -O $(@D) $(@D)/.config $(LINUX_KERNEL_CONFIG_FRAGMENTS))

The merge_config.sh script is in the kernel since version 3.3. The -O 
parameter is only supported since v3.9. How do you handle older kernels?

baruch
Floris Bos Feb. 10, 2015, 9:09 p.m. UTC | #2
On 02/10/2015 08:19 PM, Baruch Siach wrote:
> On Tue, Feb 10, 2015 at 02:50:21PM +0100, Floris Bos wrote:
>> Adds configuration option to merge additional kernel configuration files
>> to the main kernel configuration using scripts/kconfig/merge_config.sh
>>
>> For use-cases in which it is desired to build a custom Linux kernel based on
>> the defconfig of the target device, but with a couple extra options/modules
>> enabled.
>>
>> Signed-off-by: Floris Bos <bos@je-eigen-domein.nl>
>> ---
> [...]
>
>> @@ -178,6 +179,8 @@ define LINUX_CONFIGURE_CMDS
>>   	$(INSTALL) -m 0644 $(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
>> +	$(if $(LINUX_KERNEL_CONFIG_FRAGMENTS),
>> +		$(@D)/scripts/kconfig/merge_config.sh -m -O $(@D) $(@D)/.config $(LINUX_KERNEL_CONFIG_FRAGMENTS))
> The merge_config.sh script is in the kernel since version 3.3. The -O
> parameter is only supported since v3.9. How do you handle older kernels?

Could make it use the merge_config.sh we have in buildroot (in 
support/kconfig) instead, if support for old kernel versions is a 
requirement.


Yours sincerely,

Floris Bos
Baruch Siach Feb. 10, 2015, 9:16 p.m. UTC | #3
Hi Floris,

On Tue, Feb 10, 2015 at 10:09:44PM +0100, Floris Bos wrote:
> On 02/10/2015 08:19 PM, Baruch Siach wrote:
> >On Tue, Feb 10, 2015 at 02:50:21PM +0100, Floris Bos wrote:
> >>Adds configuration option to merge additional kernel configuration files
> >>to the main kernel configuration using scripts/kconfig/merge_config.sh
> >>
> >>For use-cases in which it is desired to build a custom Linux kernel based on
> >>the defconfig of the target device, but with a couple extra options/modules
> >>enabled.
> >>
> >>Signed-off-by: Floris Bos <bos@je-eigen-domein.nl>
> >>---
> >[...]
> >
> >>@@ -178,6 +179,8 @@ define LINUX_CONFIGURE_CMDS
> >>  	$(INSTALL) -m 0644 $(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
> >>+	$(if $(LINUX_KERNEL_CONFIG_FRAGMENTS),
> >>+		$(@D)/scripts/kconfig/merge_config.sh -m -O $(@D) $(@D)/.config $(LINUX_KERNEL_CONFIG_FRAGMENTS))
> >The merge_config.sh script is in the kernel since version 3.3. The -O
> >parameter is only supported since v3.9. How do you handle older kernels?
> 
> Could make it use the merge_config.sh we have in buildroot (in
> support/kconfig) instead, if support for old kernel versions is a
> requirement.

Sounds better, IMO. You may also consider going one further step, and add this 
feature to the generic kconfig infrastructure.

baruch
Thomas Petazzoni Feb. 14, 2015, 9:01 a.m. UTC | #4
Dear Floris Bos,

On Tue, 10 Feb 2015 14:50:21 +0100, Floris Bos wrote:

> +config BR2_LINUX_KERNEL_CONFIG_FRAGMENTS
> +	string "Additional configuration fragment files"
> +	help
> +	  A space-seperated list of kernel configuration fragment files,
> +	  that will be merged to the main kernel configuration file.

Instead of introducing a new option for this, can't we make the
existing option that provides the kernel configuration file path a
space-separated option that allows you to pass multiple kernel config
file fragments?

Or maybe you want to support the combination of a kernel defconfig +
some fragments?

Thanks,

Thomas
Floris Bos Feb. 14, 2015, 1:47 p.m. UTC | #5
Hi Thomas,

On 02/14/2015 10:01 AM, Thomas Petazzoni wrote:
> Dear Floris Bos,
>
> On Tue, 10 Feb 2015 14:50:21 +0100, Floris Bos wrote:
>
>> +config BR2_LINUX_KERNEL_CONFIG_FRAGMENTS
>> +	string "Additional configuration fragment files"
>> +	help
>> +	  A space-seperated list of kernel configuration fragment files,
>> +	  that will be merged to the main kernel configuration file.
> Instead of introducing a new option for this, can't we make the
> existing option that provides the kernel configuration file path a
> space-separated option that allows you to pass multiple kernel config
> file fragments?
>
> Or maybe you want to support the combination of a kernel defconfig +
> some fragments?

As mentioned in the commit message my use-case indeed involves combining 
a kernel defconfig with a fragment.
To be more precise: I simply want to stay in sync with the Raspberry Pi 
defconfig -which changes a lot-, with a few tiny modifications of my own.
diff mbox

Patch

diff --git a/linux/Config.in b/linux/Config.in
index c981493..afa68b0 100644
--- a/linux/Config.in
+++ b/linux/Config.in
@@ -161,6 +161,12 @@  config BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE
 	help
 	  Path to the kernel configuration file
 
+config BR2_LINUX_KERNEL_CONFIG_FRAGMENTS
+	string "Additional configuration fragment files"
+	help
+	  A space-seperated list of kernel configuration fragment files,
+	  that will be merged to the main kernel configuration file.
+
 #
 # Binary format
 #
diff --git a/linux/linux.mk b/linux/linux.mk
index 29f59e8..02c3f66 100644
--- a/linux/linux.mk
+++ b/linux/linux.mk
@@ -39,6 +39,7 @@  endif # -rc
 endif
 
 LINUX_PATCHES = $(call qstrip,$(BR2_LINUX_KERNEL_PATCH))
+LINUX_KERNEL_CONFIG_FRAGMENTS = $(call qstrip,$(BR2_LINUX_KERNEL_CONFIG_FRAGMENTS))
 
 LINUX_INSTALL_IMAGES = YES
 LINUX_DEPENDENCIES += host-kmod host-lzop
@@ -178,6 +179,8 @@  define LINUX_CONFIGURE_CMDS
 	$(INSTALL) -m 0644 $(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
+	$(if $(LINUX_KERNEL_CONFIG_FRAGMENTS),
+		$(@D)/scripts/kconfig/merge_config.sh -m -O $(@D) $(@D)/.config $(LINUX_KERNEL_CONFIG_FRAGMENTS))
 	$(if $(BR2_arm)$(BR2_armeb),
 		$(call KCONFIG_ENABLE_OPT,CONFIG_AEABI,$(@D)/.config))
 	$(if $(BR2_TARGET_ROOTFS_CPIO),