[Buildroot] [PATCH] Add custom development tree support
Sergii Kovalchuk
aetheriadraconis at gmail.com
Wed Jul 7 13:35:45 UTC 2010
This patch is useful in cases, when buildroot has to be linked against
predefined Linux kernel (already extracted/cloned and configured) and use custom
kernel headers in its toolchain. It adds the following menuconfig options:
Kernel:
Kernel version: "Custom tree"
Custom development tree location:
Kernel configuration: "Using existing config file"
Toolchain:
Kernel headers: "Development tree headers"
Signed-off-by: Sergii Kovalchuk <aetheriadraconis at gmail.com>
---
linux/Config.in | 24 ++++++++++++++++++++
linux/linux.mk | 8 ++++++
toolchain/kernel-headers/Config.in | 5 ++++
.../kernel-headers/kernel-headers-new.makefile | 13 ++++++++++-
4 files changed, 49 insertions(+), 1 deletions(-)
diff --git a/linux/Config.in b/linux/Config.in
index d8a5157..cb4d500 100644
--- a/linux/Config.in
+++ b/linux/Config.in
@@ -16,6 +16,7 @@ if BR2_LINUX_KERNEL
# version as the kernel headers
# 3. A custom stable version
# 4. A custom tarball
+# 5. A custom development tree
#
choice
prompt "Kernel version"
@@ -47,6 +48,17 @@ config BR2_LINUX_KERNEL_CUSTOM_TARBALL
This option allows to specify the http or ftp location of a
specific kernel source tarball
+config BR2_LINUX_KERNEL_DEV_TREE
+ bool "Custom tree"
+ help
+ This option allows to specify the location of custom kernel
+ development tree. The kernel will be built without any extra
+ actions, such as downloading, extracting and configuring.
+
+ Note. This option enables additional option under toolchain
+ kernel headers, called "Development tree headers", to use this
+ development tree for toolchain building
+
endchoice
config BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE
@@ -58,12 +70,17 @@ config BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION
string "URL of custom kernel tarball"
depends on BR2_LINUX_KERNEL_CUSTOM_TARBALL
+config BR2_LINUX_KERNEL_DEV_TREE_LOCATION
+ string "Custom development tree location"
+ depends on BR2_LINUX_KERNEL_DEV_TREE
+
config BR2_LINUX_KERNEL_VERSION
string
default "2.6.34" if BR2_LINUX_KERNEL_2_6_34
default BR2_DEFAULT_KERNEL_HEADERS if BR2_LINUX_KERNEL_SAME_AS_HEADERS
default BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE if BR2_LINUX_KERNEL_CUSTOM_VERSION
default "custom" if BR2_LINUX_KERNEL_CUSTOM_TARBALL
+ default "dev-tree" if BR2_LINUX_KERNEL_DEV_TREE
#
# Patch selection
@@ -71,6 +88,7 @@ config BR2_LINUX_KERNEL_VERSION
config BR2_LINUX_KERNEL_PATCH
string "Custom kernel patch"
+ depends on BR2_LINUX_KERNEL_CUSTOM_VERSION || BR2_LINUX_KERNEL_CUSTOM_TARBALL
help
The location can be an URL, a file path, or a directory. In
the case of a directory, all files matching linux-*.patch
@@ -86,10 +104,16 @@ choice
config BR2_LINUX_KERNEL_USE_DEFCONFIG
bool "Using a defconfig"
+ depends on BR2_LINUX_KERNEL_CUSTOM_VERSION || BR2_LINUX_KERNEL_CUSTOM_TARBALL
config BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG
bool "Using a custom config file"
+ depends on BR2_LINUX_KERNEL_CUSTOM_VERSION || BR2_LINUX_KERNEL_CUSTOM_TARBALL
+config BR2_LINUX_KERNEL_USE_EXISTING_CONFIG
+ bool "Using existing config file"
+ depends on BR2_LINUX_KERNEL_DEV_TREE
+
endchoice
config BR2_LINUX_KERNEL_DEFCONFIG
diff --git a/linux/linux.mk b/linux/linux.mk
index 593a1b4..56cf066 100644
--- a/linux/linux.mk
+++ b/linux/linux.mk
@@ -55,11 +55,18 @@ endif
touch $@
# Extraction
+ifneq ($(LINUX26_VERSION),dev-tree)
$(LINUX26_DIR)/.stamp_extracted: $(LINUX26_DIR)/.stamp_downloaded
@$(call MESSAGE,"Extracting kernel")
mkdir -p $(@D)
$(Q)$(INFLATE$(suffix $(LINUX26_SOURCE))) $(DL_DIR)/$(LINUX26_SOURCE) | \
tar -C $(@D) $(TAR_STRIP_COMPONENTS)=1 $(TAR_OPTIONS) -
+else
+$(LINUX26_DIR)/.stamp_extracted:
+ @$(call MESSAGE,"Re-generating symlinks to development tree")
+ rm -f $(@D)
+ ln -s $(BR2_LINUX_KERNEL_DEV_TREE_LOCATION) $(@D)
+endif # dev-tree
$(Q)touch $@
# Patch
@@ -85,6 +92,7 @@ ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
cp $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE) $(@D)/.config
endif
+
ifeq ($(BR2_ARM_EABI),y)
$(call KCONFIG_ENABLE_OPT,CONFIG_AEABI,$(@D)/.config)
else
diff --git a/toolchain/kernel-headers/Config.in b/toolchain/kernel-headers/Config.in
index fea3ee4..3b21607 100644
--- a/toolchain/kernel-headers/Config.in
+++ b/toolchain/kernel-headers/Config.in
@@ -50,6 +50,11 @@ choice
config BR2_KERNEL_HEADERS_SNAP
bool "Local Linux snapshot (linux-2.6.tar.bz2)"
+
+ config BR2_KERNEL_HEADERS_DEV_TREE
+ bool "Development tree headers"
+ depends on BR2_LINUX_KERNEL_DEV_TREE
+
endchoice
config BR2_DEFAULT_KERNEL_VERSION
diff --git a/toolchain/kernel-headers/kernel-headers-new.makefile b/toolchain/kernel-headers/kernel-headers-new.makefile
index 2237a0a..9ab9ad4 100644
--- a/toolchain/kernel-headers/kernel-headers-new.makefile
+++ b/toolchain/kernel-headers/kernel-headers-new.makefile
@@ -20,7 +20,13 @@ LINUX_HEADERS_VERSION:=$(VERSION).$(PATCHLEVEL)$(SUBLEVEL)$(EXTRAVERSION)
LINUX_HEADERS_SITE:=$(BR2_KERNEL_MIRROR)/linux/kernel/v2.6/
LINUX_HEADERS_SOURCE:=linux-$(LINUX_HEADERS_VERSION).tar.bz2
LINUX_HEADERS_CAT:=$(BZCAT)
+
+ifneq ($(BR2_KERNEL_HEADERS_DEV_TREE),y)
LINUX_HEADERS_UNPACK_DIR:=$(TOOLCHAIN_DIR)/linux-$(LINUX_HEADERS_VERSION)
+else
+LINUX_HEADERS_UNPACK_DIR:=$(TOOLCHAIN_DIR)/linux-dev-tree
+endif
+
LINUX_HEADERS_DIR:=$(TOOLCHAIN_DIR)/linux
LINUX_HEADERS_DEPENDS:=
@@ -41,7 +47,12 @@ ifneq ($(KERNEL_HEADERS_PATCH_DIR),)
endif
touch $@
+ifneq ($(BR2_KERNEL_HEADERS_DEV_TREE),y)
$(LINUX_HEADERS_DIR)/.configured: $(LINUX_HEADERS_UNPACK_DIR)/.patched
+else
+$(LINUX_HEADERS_DIR)/.configured:
+ ln -s $(BR2_LINUX_KERNEL_DEV_TREE_LOCATION) $(LINUX_HEADERS_UNPACK_DIR)
+endif
(cd $(LINUX_HEADERS_UNPACK_DIR); \
$(MAKE) ARCH=$(KERNEL_ARCH) \
HOSTCC="$(HOSTCC)" HOSTCFLAGS="$(HOSTCFLAGS)" \
@@ -52,5 +63,5 @@ ifeq ($(BR2_ARCH),"cris")
ln -s $(LINUX_HEADERS_DIR)/include/arch-v10/arch $(LINUX_HEADERS_DIR)/include/arch
cp -a $(LINUX_HEADERS_UNPACK_DIR)/include/linux/user.h $(LINUX_HEADERS_DIR)/include/linux
$(SED) "/^#include <asm\/page\.h>/d" $(LINUX_HEADERS_DIR)/include/asm/user.h
-endif
+endif
touch $@
--
1.7.1
More information about the buildroot
mailing list