summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux/Config.in42
-rw-r--r--linux/linux.mk19
2 files changed, 61 insertions, 0 deletions
diff --git a/linux/Config.in b/linux/Config.in
index 915b1b619..16c7ea72f 100644
--- a/linux/Config.in
+++ b/linux/Config.in
@@ -175,6 +175,48 @@ config BR2_LINUX_KERNEL_IMAGE_TARGET_NAME
Specify the kernel make target to build the kernel that you
need.
+config BR2_LINUX_KERNEL_DTS_SUPPORT
+ bool "Device tree support"
+ help
+ Compile a device tree source into a device tree blob.
+ Select the dts file to compile in the options below.
+
+if BR2_LINUX_KERNEL_DTS_SUPPORT
+
+choice
+ prompt "Device tree source"
+ default BR2_LINUX_KERNEL_USE_INTREE_DTS
+
+config BR2_LINUX_KERNEL_USE_INTREE_DTS
+ bool "Use a device tree present in the kernel."
+ help
+ Use a device tree source distributed with
+ the kernel sources. The dts files are located
+ in the arch/<arch>/boot/dts folder.
+
+config BR2_LINUX_KERNEL_USE_CUSTOM_DTS
+ bool "Use a custom device tree file"
+ help
+ Use a custom device tree file, i.e, a device
+ tree file that does not belong to the kernel
+ source tree.
+endchoice
+
+config BR2_LINUX_KERNEL_INTREE_DTS_NAME
+ string "Device Tree Source file name"
+ depends on BR2_LINUX_KERNEL_USE_INTREE_DTS
+ help
+ Name of the device tree source file, without
+ the trailing .dts
+
+config BR2_LINUX_KERNEL_CUSTOM_DTS_PATH
+ string "Device Tree Source file path"
+ depends on BR2_LINUX_KERNEL_USE_CUSTOM_DTS
+ help
+ Path to the device tree source file
+
+endif
+
config BR2_LINUX_KERNEL_INSTALL_TARGET
bool "Install kernel image to /boot in target"
depends on !BR2_TARGET_ROOTFS_INITRAMFS
diff --git a/linux/linux.mk b/linux/linux.mk
index 1b7e0b755..099f8ba04 100644
--- a/linux/linux.mk
+++ b/linux/linux.mk
@@ -48,6 +48,12 @@ LINUX_MAKE_FLAGS = \
# going to be installed in the target filesystem.
LINUX_VERSION_PROBED = $(shell $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) --no-print-directory -s kernelrelease)
+ifeq ($(BR2_LINUX_KERNEL_USE_INTREE_DTS),y)
+KERNEL_DTS_NAME = $(BR2_LINUX_KERNEL_INTREE_DTS_NAME)
+else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_DTS),y)
+KERNEL_DTS_NAME = $(basename $(notdir $(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH)))
+endif
+
ifeq ($(BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM),y)
LINUX_IMAGE_NAME=$(call qstrip,$(BR2_LINUX_KERNEL_IMAGE_TARGET_NAME))
else
@@ -155,13 +161,25 @@ define LINUX_CONFIGURE_CMDS
yes '' | $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) oldconfig
endef
+ifeq ($(BR2_LINUX_KERNEL_DTS_SUPPORT),y)
+define LINUX_BUILD_DTB
+ $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(KERNEL_DTS_NAME).dtb
+endef
+define LINUX_INSTALL_DTB
+ cp $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb $(BINARIES_DIR)/
+endef
+endif
+
# Compilation. We make sure the kernel gets rebuilt when the
# configuration has changed.
define LINUX_BUILD_CMDS
+ $(if $(BR2_LINUX_KERNEL_USE_CUSTOM_DTS),
+ cp $(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH) $(KERNEL_ARCH_PATH)/boot/dts/)
$(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_NAME)
@if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \
$(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) modules ; \
fi
+ $(LINUX_BUILD_DTB)
endef
@@ -186,6 +204,7 @@ endef
define LINUX_INSTALL_TARGET_CMDS
$(LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET)
+ $(LINUX_INSTALL_DTB)
# Install modules and remove symbolic links pointing to build
# directories, not relevant on the target
@if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \