diff mbox

Extending buildroot functionality for creating board support packages (BSP) out of buildroot tree

Message ID 516B06C0.9030207@gmx.de
State Rejected
Headers show

Commit Message

universe II April 14, 2013, 7:42 p.m. UTC
Is there interest in incorporating this feature into buildroot?
I prepared a patch for it, please see attachment.

Regards,
Andreas



On 04/12/2013 11:51 AM, universe II wrote:
> Dear all,
> we are using buildroot for porting an existing embedded PowerPC board 
> to linux. For this purpose we have to make modifications to the kernel 
> (adding and changing files to support custom hardware). This can 
> easily be done by enabling custom patches in the menuconfig.
> This is a wonderful solution when the development of the kernel 
> modifications is done and the patches are existing but during 
> development this could be time consuming. The reason is that we can 
> not do the kernel modifcations in the kernel tree itself but in a 
> completely separated directory structure. This is caused by our 
> existing version control system and by project development requirements.
>
> Imagine that you made a small modification to one of the custom files  
> (e.g. changing a printk() statement) and you want to re-build the 
> kernel. You have to develop a script which takes a virgin kernel, 
> extracts the gz file, makes a copy of the tree, modifies the files in 
> the copy and then creates the patch and copies this patch to the 
> buildroot tree. Even on a fast hardware this takes some time and you 
> have to do it for every change.
>
> I spent some time this morning to evaluate if there could be a more 
> elegant solution. Here is what I've done:
> 1) In linux/Config.in: Add a new entry to the kernel menuconfig which 
> allows to enter a script name or a directory name (similar to the 
> custom patch option)
> 2) In linux/linux.mk: After unpacking the kernel and applying the 
> patches (if any) the given script or all scripts in the given 
> directory are executed.
>
> This allows me to make modification to the unpacked kernel tree 
> without the need to create patch files but also opens up flexibility 
> for other functionality which may arise in the future.
>
> Let me know what you think about this. If you are interested in 
> incorporating these changes into the official buildroot suite, l can 
> provide the changes I made.
>
> Regards,
> Andreas
>
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
diff mbox

Patch

diff -Naur linux_org/Config.in linux/Config.in
--- linux_org/Config.in	2013-02-28 22:48:28.000000000 +0100
+++ linux/Config.in	2013-04-12 11:06:18.985657337 +0200
@@ -95,6 +95,17 @@ 
 	  matching linux-*.patch in the directory will be applied.
 
 #
+# Pre-compile script
+#
+
+config BR2_LINUX_KERNEL_PRE_COMPILE_SCRIPT
+	string "Pre-compile script(s)"
+	help
+	  A name of a script or the name of a directory containing one or
+	  more scripts to be executed before kernel compilation
+	  and after application of patches (if any).
+
+#
 # Configuration selection
 #
 
diff -Naur linux_org/linux.mk linux/linux.mk
--- linux_org/linux.mk	2013-02-28 22:48:28.000000000 +0100
+++ linux/linux.mk	2013-04-12 12:44:35.539272633 +0200
@@ -32,6 +32,7 @@ 
 endif
 
 LINUX_PATCHES = $(call qstrip,$(BR2_LINUX_KERNEL_PATCH))
+LINUX_PRE_SCRIPTS = $(call qstrip,$(BR2_LINUX_KERNEL_PRE_COMPILE_SCRIPT))
 
 LINUX_INSTALL_IMAGES = YES
 LINUX_DEPENDENCIES  += host-module-init-tools
@@ -149,6 +150,21 @@ 
 LINUX_POST_PATCH_HOOKS += LINUX_APPLY_PATCHES
 
 
+define LINUX_PRE_COMPILE_SCRIPT
+	if test -d $(LINUX_PRE_SCRIPTS); then \
+		for s in `ls -1 $(LINUX_PRE_SCRIPTS)`; do \
+			echo "Calling script $(LINUX_PRE_SCRIPTS)/$$s"; \
+			$(LINUX_PRE_SCRIPTS)/$$s; \
+		done \
+	else \
+		echo "Calling script $$s"; \
+		$$s; \
+	fi
+endef
+
+LINUX_POST_PATCH_HOOKS += LINUX_PRE_COMPILE_SCRIPT
+
+
 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)