blob: e270705698014cbd9b7f57315996a3ac5164abb1 [file] [log] [blame]
Alexandre Belloni95442bb2013-06-07 12:13:46 +02001################################################################################
Thomas Petazzoni487e21c2010-04-03 18:46:46 +02002#
Thomas Petazzoniaf526612011-07-11 22:46:07 +02003# Linux kernel target
Thomas Petazzoni487e21c2010-04-03 18:46:46 +02004#
Alexandre Belloni95442bb2013-06-07 12:13:46 +02005################################################################################
Alexandre Belloni70270402013-06-05 23:53:25 +00006
Jerzy Grzegoreke0d9d332013-07-20 08:52:43 +02007LINUX_VERSION = $(call qstrip,$(BR2_LINUX_KERNEL_VERSION))
Luca Ceresoli67f18362012-05-17 19:33:09 +02008LINUX_LICENSE = GPLv2
9LINUX_LICENSE_FILES = COPYING
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020010
Thomas Petazzoniaf526612011-07-11 22:46:07 +020011# Compute LINUX_SOURCE and LINUX_SITE from the configuration
Rafal Fabich73da2ff2013-02-23 19:03:30 +010012ifeq ($(BR2_LINUX_KERNEL_CUSTOM_TARBALL),y)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +020013LINUX_TARBALL = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION))
Arnout Vandecappelle (Essensium/Mind)579fea22013-01-09 12:12:44 +000014LINUX_SITE = $(patsubst %/,%,$(dir $(LINUX_TARBALL)))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +020015LINUX_SOURCE = $(notdir $(LINUX_TARBALL))
Rafal Fabich73da2ff2013-02-23 19:03:30 +010016else ifeq ($(BR2_LINUX_KERNEL_CUSTOM_LOCAL),y)
17LINUX_SITE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_LOCAL_PATH))
18LINUX_SITE_METHOD = local
Thomas Petazzoni205fb192011-07-11 22:46:11 +020019else ifeq ($(BR2_LINUX_KERNEL_CUSTOM_GIT),y)
Thomas De Schampheleire63ecded2013-09-02 22:07:54 +020020LINUX_SITE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_REPO_URL))
Thomas Petazzoni205fb192011-07-11 22:46:11 +020021LINUX_SITE_METHOD = git
Thomas De Schampheleire63ecded2013-09-02 22:07:54 +020022else ifeq ($(BR2_LINUX_KERNEL_CUSTOM_HG),y)
23LINUX_SITE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_REPO_URL))
24LINUX_SITE_METHOD = hg
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020025else
Raúl Sánchez Siles98b5cc32013-05-11 01:40:36 +000026LINUX_SOURCE = linux-$(LINUX_VERSION).tar.xz
Thomas Petazzonif45f7752011-07-11 22:46:16 +020027# In X.Y.Z, get X and Y. We replace dots and dashes by spaces in order
28# to use the $(word) function. We support versions such as 3.1,
29# 2.6.32, 2.6.32-rc1, 3.0-rc6, etc.
Gustavo Zacarias80d7b682011-10-24 11:54:03 -030030ifeq ($(findstring x2.6.,x$(LINUX_VERSION)),x2.6.)
31LINUX_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/v2.6/
32else
33LINUX_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/v3.x/
34endif
Thomas Petazzonif45f7752011-07-11 22:46:16 +020035# release candidates are in testing/ subdir
36ifneq ($(findstring -rc,$(LINUX_VERSION)),)
Peter Korsgaardea7f5ff2011-07-14 16:38:07 +020037LINUX_SITE := $(LINUX_SITE)testing/
Thomas Petazzonif45f7752011-07-11 22:46:16 +020038endif # -rc
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020039endif
40
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +020041LINUX_PATCHES = $(call qstrip,$(BR2_LINUX_KERNEL_PATCH))
42
43LINUX_INSTALL_IMAGES = YES
Fabio Porcedda96d91372014-03-06 10:42:28 +010044LINUX_DEPENDENCIES += host-kmod host-lzop
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020045
Maxime Ripard902609f2012-07-30 14:32:46 +020046ifeq ($(BR2_LINUX_KERNEL_UBOOT_IMAGE),y)
47 LINUX_DEPENDENCIES += host-uboot-tools
48endif
49
Thomas Petazzoniaf526612011-07-11 22:46:07 +020050LINUX_MAKE_FLAGS = \
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020051 HOSTCC="$(HOSTCC)" \
52 HOSTCFLAGS="$(HOSTCFLAGS)" \
53 ARCH=$(KERNEL_ARCH) \
54 INSTALL_MOD_PATH=$(TARGET_DIR) \
Martin Hicksd10e46f2011-02-01 12:13:00 -050055 CROSS_COMPILE="$(CCACHE) $(TARGET_CROSS)" \
Peter Korsgaardcc345192013-09-10 21:54:59 +020056 DEPMOD=$(HOST_DIR)/sbin/depmod
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020057
58# Get the real Linux version, which tells us where kernel modules are
59# going to be installed in the target filesystem.
Thomas Petazzoniaf526612011-07-11 22:46:07 +020060LINUX_VERSION_PROBED = $(shell $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) --no-print-directory -s kernelrelease)
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020061
Maxime Ripard69fc4972012-07-30 14:32:45 +020062ifeq ($(BR2_LINUX_KERNEL_USE_INTREE_DTS),y)
Peter Korsgaard309c2f52012-12-21 08:39:14 +010063KERNEL_DTS_NAME = $(call qstrip,$(BR2_LINUX_KERNEL_INTREE_DTS_NAME))
Maxime Ripard69fc4972012-07-30 14:32:45 +020064else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_DTS),y)
Thomas Petazzoni82d2a472013-06-05 06:21:09 +000065KERNEL_DTS_NAME = $(basename $(notdir $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH))))
Maxime Ripard69fc4972012-07-30 14:32:45 +020066endif
67
Peter Korsgaard0ffdc162013-04-15 08:55:53 +020068ifeq ($(BR2_LINUX_KERNEL_DTS_SUPPORT)$(KERNEL_DTS_NAME),y)
69$(error No kernel device tree source specified, check your \
70BR2_LINUX_KERNEL_USE_INTREE_DTS / BR2_LINUX_KERNEL_USE_CUSTOM_DTS settings)
71endif
72
Maxime Ripard978928e2012-07-30 14:32:47 +020073ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y)
74ifneq ($(words $(KERNEL_DTS_NAME)),1)
75$(error Kernel with appended device tree needs exactly one DTS source.\
76 Check BR2_LINUX_KERNEL_INTREE_DTS_NAME or BR2_LINUX_KERNEL_CUSTOM_DTS_PATH.)
77endif
78endif
79
Peter Korsgaard309c2f52012-12-21 08:39:14 +010080KERNEL_DTBS = $(addsuffix .dtb,$(KERNEL_DTS_NAME))
81
Martin Hickse2ed6c82011-03-21 13:39:43 -040082ifeq ($(BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +010083LINUX_IMAGE_NAME = $(call qstrip,$(BR2_LINUX_KERNEL_IMAGE_TARGET_NAME))
Martin Hickse2ed6c82011-03-21 13:39:43 -040084else
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020085ifeq ($(BR2_LINUX_KERNEL_UIMAGE),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +010086LINUX_IMAGE_NAME = uImage
Maxime Ripard978928e2012-07-30 14:32:47 +020087else ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +010088LINUX_IMAGE_NAME = uImage
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020089else ifeq ($(BR2_LINUX_KERNEL_BZIMAGE),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +010090LINUX_IMAGE_NAME = bzImage
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020091else ifeq ($(BR2_LINUX_KERNEL_ZIMAGE),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +010092LINUX_IMAGE_NAME = zImage
Maxime Ripard978928e2012-07-30 14:32:47 +020093else ifeq ($(BR2_LINUX_KERNEL_APPENDED_ZIMAGE),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +010094LINUX_IMAGE_NAME = zImage
Maxime Ripard18e752d2012-07-30 14:32:48 +020095else ifeq ($(BR2_LINUX_KERNEL_CUIMAGE),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +010096LINUX_IMAGE_NAME = cuImage.$(KERNEL_DTS_NAME)
Maxime Ripard18e752d2012-07-30 14:32:48 +020097else ifeq ($(BR2_LINUX_KERNEL_SIMPLEIMAGE),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +010098LINUX_IMAGE_NAME = simpleImage.$(KERNEL_DTS_NAME)
Maxime Ripard18e752d2012-07-30 14:32:48 +020099else ifeq ($(BR2_LINUX_KERNEL_LINUX_BIN),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +0100100LINUX_IMAGE_NAME = linux.bin
Thomas Petazzonib626dc02010-09-01 15:26:24 +0200101else ifeq ($(BR2_LINUX_KERNEL_VMLINUX_BIN),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +0100102LINUX_IMAGE_NAME = vmlinux.bin
Thomas Petazzoni71c05022010-12-05 21:53:23 +0100103else ifeq ($(BR2_LINUX_KERNEL_VMLINUX),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +0100104LINUX_IMAGE_NAME = vmlinux
Kelvin Cheungc1485d52011-09-20 17:01:26 +0800105else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +0100106LINUX_IMAGE_NAME = vmlinuz
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200107endif
Martin Hickse2ed6c82011-03-21 13:39:43 -0400108endif
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200109
Julien Boibessot8215e192013-03-13 11:13:24 +0000110LINUX_KERNEL_UIMAGE_LOADADDR=$(call qstrip,$(BR2_LINUX_KERNEL_UIMAGE_LOADADDR))
111ifneq ($(LINUX_KERNEL_UIMAGE_LOADADDR),)
Fabio Porcedda96d91372014-03-06 10:42:28 +0100112LINUX_MAKE_FLAGS += LOADADDR="$(LINUX_KERNEL_UIMAGE_LOADADDR)"
Julien Boibessot8215e192013-03-13 11:13:24 +0000113endif
114
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100115# Compute the arch path, since i386 and x86_64 are in arch/x86 and not
116# in arch/$(KERNEL_ARCH). Even if the kernel creates symbolic links
117# for bzImage, arch/i386 and arch/x86_64 do not exist when copying the
118# defconfig file.
119ifeq ($(KERNEL_ARCH),i386)
Fabio Porcedda96d91372014-03-06 10:42:28 +0100120KERNEL_ARCH_PATH = $(LINUX_DIR)/arch/x86
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100121else ifeq ($(KERNEL_ARCH),x86_64)
Fabio Porcedda96d91372014-03-06 10:42:28 +0100122KERNEL_ARCH_PATH = $(LINUX_DIR)/arch/x86
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100123else
Fabio Porcedda96d91372014-03-06 10:42:28 +0100124KERNEL_ARCH_PATH = $(LINUX_DIR)/arch/$(KERNEL_ARCH)
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100125endif
126
Thomas Petazzoni71c05022010-12-05 21:53:23 +0100127ifeq ($(BR2_LINUX_KERNEL_VMLINUX),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +0100128LINUX_IMAGE_PATH = $(LINUX_DIR)/$(LINUX_IMAGE_NAME)
Kelvin Cheungc1485d52011-09-20 17:01:26 +0800129else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ),y)
Fabio Porcedda96d91372014-03-06 10:42:28 +0100130LINUX_IMAGE_PATH = $(LINUX_DIR)/$(LINUX_IMAGE_NAME)
Thomas Petazzoni71c05022010-12-05 21:53:23 +0100131else
Thomas Petazzoni96652632010-09-07 15:08:07 +0200132ifeq ($(KERNEL_ARCH),avr32)
Fabio Porcedda96d91372014-03-06 10:42:28 +0100133LINUX_IMAGE_PATH = $(KERNEL_ARCH_PATH)/boot/images/$(LINUX_IMAGE_NAME)
Thomas Petazzoni96652632010-09-07 15:08:07 +0200134else
Fabio Porcedda96d91372014-03-06 10:42:28 +0100135LINUX_IMAGE_PATH = $(KERNEL_ARCH_PATH)/boot/$(LINUX_IMAGE_NAME)
Thomas Petazzoni96652632010-09-07 15:08:07 +0200136endif
Thomas Petazzoni71c05022010-12-05 21:53:23 +0100137endif # BR2_LINUX_KERNEL_VMLINUX
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200138
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200139define LINUX_DOWNLOAD_PATCHES
140 $(if $(LINUX_PATCHES),
141 @$(call MESSAGE,"Download additional patches"))
142 $(foreach patch,$(filter ftp://% http://%,$(LINUX_PATCHES)),\
Alvaro G. M0a4856c2012-03-16 14:42:53 +0100143 $(call DOWNLOAD,$(patch))$(sep))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200144endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200145
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200146LINUX_POST_DOWNLOAD_HOOKS += LINUX_DOWNLOAD_PATCHES
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200147
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200148define LINUX_APPLY_PATCHES
149 for p in $(LINUX_PATCHES) ; do \
Thomas Petazzoni55b0a372010-12-05 21:53:18 +0100150 if echo $$p | grep -q -E "^ftp://|^http://" ; then \
Thomas Petazzoni59a326b2011-08-31 23:35:04 +0200151 support/scripts/apply-patches.sh $(@D) $(DL_DIR) `basename $$p` ; \
Thomas Petazzoni55b0a372010-12-05 21:53:18 +0100152 elif test -d $$p ; then \
Thomas Petazzoni59a326b2011-08-31 23:35:04 +0200153 support/scripts/apply-patches.sh $(@D) $$p linux-\*.patch ; \
Thomas Petazzoni55b0a372010-12-05 21:53:18 +0100154 else \
Thomas Petazzoni59a326b2011-08-31 23:35:04 +0200155 support/scripts/apply-patches.sh $(@D) `dirname $$p` `basename $$p` ; \
Thomas Petazzoni55b0a372010-12-05 21:53:18 +0100156 fi \
157 done
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200158endef
159
160LINUX_POST_PATCH_HOOKS += LINUX_APPLY_PATCHES
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200161
162
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200163ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200164KERNEL_SOURCE_CONFIG = $(KERNEL_ARCH_PATH)/configs/$(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG))_defconfig
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200165else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
Thomas Petazzoni0dc79012014-03-04 19:16:41 +0100166KERNEL_SOURCE_CONFIG = $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200167endif
168
169define LINUX_CONFIGURE_CMDS
Yann E. MORIN0a541c82014-01-28 21:11:23 +0100170 $(INSTALL) -m 0644 $(KERNEL_SOURCE_CONFIG) $(KERNEL_ARCH_PATH)/configs/buildroot_defconfig
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200171 $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) buildroot_defconfig
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100172 rm $(KERNEL_ARCH_PATH)/configs/buildroot_defconfig
Yann E. MORIN72189e52013-07-14 00:27:30 +0200173 $(if $(BR2_arm)$(BR2_armeb),
174 $(call KCONFIG_ENABLE_OPT,CONFIG_AEABI,$(@D)/.config))
Thomas Petazzonied23c922013-12-29 18:33:45 +0100175 $(if $(BR2_TARGET_ROOTFS_CPIO),
176 $(call KCONFIG_ENABLE_OPT,CONFIG_BLK_DEV_INITRD,$(@D)/.config))
Thomas Petazzonif5079212010-06-13 19:19:38 +0200177 # As the kernel gets compiled before root filesystems are
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200178 # built, we create a fake cpio file. It'll be
179 # replaced later by the real cpio archive, and the kernel will be
Thomas Petazzonif5079212010-06-13 19:19:38 +0200180 # rebuilt using the linux26-rebuild-with-initramfs target.
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200181 $(if $(BR2_TARGET_ROOTFS_INITRAMFS),
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200182 touch $(BINARIES_DIR)/rootfs.cpio
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200183 $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_SOURCE,\"$(BINARIES_DIR)/rootfs.cpio\",$(@D)/.config)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200184 $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_UID,0,$(@D)/.config)
Valentine Barshak391c82e2012-10-10 03:34:56 +0400185 $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_GID,0,$(@D)/.config))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200186 $(if $(BR2_ROOTFS_DEVICE_CREATION_STATIC),,
187 $(call KCONFIG_ENABLE_OPT,CONFIG_DEVTMPFS,$(@D)/.config)
188 $(call KCONFIG_ENABLE_OPT,CONFIG_DEVTMPFS_MOUNT,$(@D)/.config))
eric.le.bihan.dev@free.fr937a9542014-02-07 14:21:32 +0100189 $(if $(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV),
190 $(call KCONFIG_ENABLE_OPT,CONFIG_INOTIFY_USER,$(@D)/.config))
Anders Daranderaaef2ca2013-12-16 11:53:20 +0100191 $(if $(BR2_PACKAGE_KTAP),
192 $(call KCONFIG_ENABLE_OPT,CONFIG_DEBUG_FS,$(@D)/.config)
193 $(call KCONFIG_ENABLE_OPT,CONFIG_EVENT_TRACING,$(@D)/.config)
194 $(call KCONFIG_ENABLE_OPT,CONFIG_PERF_EVENTS,$(@D)/.config)
195 $(call KCONFIG_ENABLE_OPT,CONFIG_FUNCTION_TRACER,$(@D)/.config))
Maxime Ripard90759a62012-03-23 16:49:53 +0100196 $(if $(BR2_PACKAGE_SYSTEMD),
eric.le.bihan.dev@free.fr2c66e442014-02-07 14:21:34 +0100197 $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUPS,$(@D)/.config)
eric.le.bihan.dev@free.fr4c10eed2014-02-24 10:25:42 +0100198 $(call KCONFIG_ENABLE_OPT,CONFIG_INOTIFY_USER,$(@D)/.config)
199 $(call KCONFIG_ENABLE_OPT,CONFIG_FHANDLE,$(@D)/.config)
200 $(call KCONFIG_ENABLE_OPT,CONFIG_AUTOFS4_FS,$(@D)/.config)
201 $(call KCONFIG_ENABLE_OPT,CONFIG_TMPFS_POSIX_ACL,$(@D)/.config)
202 $(call KCONFIG_ENABLE_OPT,CONFIG_TMPFS_POSIX_XATTR,$(@D)/.config))
Maxime Ripard978928e2012-07-30 14:32:47 +0200203 $(if $(BR2_LINUX_KERNEL_APPENDED_DTB),
204 $(call KCONFIG_ENABLE_OPT,CONFIG_ARM_APPENDED_DTB,$(@D)/.config))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200205 yes '' | $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) oldconfig
206endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200207
Maxime Ripard69fc4972012-07-30 14:32:45 +0200208ifeq ($(BR2_LINUX_KERNEL_DTS_SUPPORT),y)
Maxime Ripard978928e2012-07-30 14:32:47 +0200209ifeq ($(BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT),)
Maxime Ripard69fc4972012-07-30 14:32:45 +0200210define LINUX_BUILD_DTB
Peter Korsgaard309c2f52012-12-21 08:39:14 +0100211 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(KERNEL_DTBS)
Maxime Ripard69fc4972012-07-30 14:32:45 +0200212endef
213define LINUX_INSTALL_DTB
Peter Korsgaard3cab8aa2013-04-14 19:31:30 +0200214 # dtbs moved from arch/<ARCH>/boot to arch/<ARCH>/boot/dts since 3.8-rc1
Peter Korsgaardef347052012-12-21 09:07:45 +0100215 cp $(addprefix \
216 $(KERNEL_ARCH_PATH)/boot/$(if $(wildcard \
217 $(addprefix $(KERNEL_ARCH_PATH)/boot/dts/,$(KERNEL_DTBS))),dts/),$(KERNEL_DTBS)) \
Maxime Riparddd1aa622012-12-19 22:48:09 +0000218 $(BINARIES_DIR)/
Maxime Ripard69fc4972012-07-30 14:32:45 +0200219endef
Maxime Ripard88d350c2013-02-14 04:27:54 +0000220define LINUX_INSTALL_DTB_TARGET
Peter Korsgaard3cab8aa2013-04-14 19:31:30 +0200221 # dtbs moved from arch/<ARCH>/boot to arch/<ARCH>/boot/dts since 3.8-rc1
Maxime Ripard88d350c2013-02-14 04:27:54 +0000222 cp $(addprefix \
223 $(KERNEL_ARCH_PATH)/boot/$(if $(wildcard \
224 $(addprefix $(KERNEL_ARCH_PATH)/boot/dts/,$(KERNEL_DTBS))),dts/),$(KERNEL_DTBS)) \
225 $(TARGET_DIR)/boot/
226endef
Maxime Ripard69fc4972012-07-30 14:32:45 +0200227endif
Maxime Ripard978928e2012-07-30 14:32:47 +0200228endif
229
Arnout Vandecappelle (Essensium/Mind)a1cfe202013-01-08 11:23:56 +0000230ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y)
231# dtbs moved from arch/$ARCH/boot to arch/$ARCH/boot/dts since 3.8-rc1
232define LINUX_APPEND_DTB
233 if [ -e $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb ]; then \
234 cat $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb; \
235 else \
236 cat $(KERNEL_ARCH_PATH)/boot/dts/$(KERNEL_DTS_NAME).dtb; \
237 fi >> $(KERNEL_ARCH_PATH)/boot/zImage
238endef
Maxime Ripard978928e2012-07-30 14:32:47 +0200239ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y)
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200240# We need to generate a new u-boot image that takes into
241# account the extra-size added by the device tree at the end
242# of the image. To do so, we first need to retrieve both load
243# address and entry point for the kernel from the already
244# generate uboot image before using mkimage -l.
Arnout Vandecappelle13ae0072013-11-07 00:12:35 +0100245LINUX_APPEND_DTB += $(sep) MKIMAGE_ARGS=`$(MKIMAGE) -l $(LINUX_IMAGE_PATH) |\
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200246 sed -n -e 's/Image Name:[ ]*\(.*\)/-n \1/p' -e 's/Load Address:/-a/p' -e 's/Entry Point:/-e/p'`; \
Arnout Vandecappelle13ae0072013-11-07 00:12:35 +0100247 $(MKIMAGE) -A $(MKIMAGE_ARCH) -O linux \
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200248 -T kernel -C none $${MKIMAGE_ARGS} \
249 -d $(KERNEL_ARCH_PATH)/boot/zImage $(LINUX_IMAGE_PATH);
Arnout Vandecappelle (Essensium/Mind)a1cfe202013-01-08 11:23:56 +0000250endif
Maxime Ripard978928e2012-07-30 14:32:47 +0200251endif
Maxime Ripard69fc4972012-07-30 14:32:45 +0200252
Thomas Petazzoni4944e8c2010-06-13 19:18:34 +0200253# Compilation. We make sure the kernel gets rebuilt when the
254# configuration has changed.
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200255define LINUX_BUILD_CMDS
Maxime Ripard69fc4972012-07-30 14:32:45 +0200256 $(if $(BR2_LINUX_KERNEL_USE_CUSTOM_DTS),
257 cp $(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH) $(KERNEL_ARCH_PATH)/boot/dts/)
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200258 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_NAME)
Peter Korsgaardce03b892011-07-07 23:40:09 +0200259 @if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200260 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) modules ; \
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200261 fi
Maxime Ripard69fc4972012-07-30 14:32:45 +0200262 $(LINUX_BUILD_DTB)
Maxime Ripard978928e2012-07-30 14:32:47 +0200263 $(LINUX_APPEND_DTB)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200264endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200265
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200266
Thomas Petazzonieff25f42011-07-05 21:53:54 +0200267ifeq ($(BR2_LINUX_KERNEL_INSTALL_TARGET),y)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200268define LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200269 install -m 0644 -D $(LINUX_IMAGE_PATH) $(TARGET_DIR)/boot/$(LINUX_IMAGE_NAME)
Maxime Ripard88d350c2013-02-14 04:27:54 +0000270 $(LINUX_INSTALL_DTB_TARGET)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200271endef
Thomas Petazzonieff25f42011-07-05 21:53:54 +0200272endif
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200273
Thomas De Schampheleire707d44d2012-05-15 08:18:25 +0000274
275define LINUX_INSTALL_HOST_TOOLS
276 # Installing dtc (device tree compiler) as host tool, if selected
277 if grep -q "CONFIG_DTC=y" $(@D)/.config; then \
278 $(INSTALL) -D -m 0755 $(@D)/scripts/dtc/dtc $(HOST_DIR)/usr/bin/dtc ; \
279 fi
280endef
281
282
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200283define LINUX_INSTALL_IMAGES_CMDS
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200284 cp $(LINUX_IMAGE_PATH) $(BINARIES_DIR)
Reuben Dowle23553542013-03-27 23:01:15 +0000285 $(LINUX_INSTALL_DTB)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200286endef
287
288define LINUX_INSTALL_TARGET_CMDS
289 $(LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET)
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200290 # Install modules and remove symbolic links pointing to build
291 # directories, not relevant on the target
Peter Korsgaardce03b892011-07-07 23:40:09 +0200292 @if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \
Peter Korsgaard3f817232013-09-11 13:21:53 +0200293 $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) modules_install; \
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200294 rm -f $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/build ; \
295 rm -f $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/source ; \
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200296 fi
Thomas De Schampheleire707d44d2012-05-15 08:18:25 +0000297 $(LINUX_INSTALL_HOST_TOOLS)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200298endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200299
Jérôme Pouiller741cbcc2013-09-03 10:45:41 +0200300include $(sort $(wildcard linux/linux-ext-*.mk))
Thomas De Schampheleire3011d232011-09-17 22:22:51 +0200301
Arnout Vandecappelle (Essensium/Mind)e1502eb2012-07-03 00:07:32 +0200302$(eval $(generic-package))
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200303
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000304ifeq ($(BR2_LINUX_KERNEL),y)
Fabio Porceddaeca29bd2014-03-06 10:42:29 +0100305linux-menuconfig linux-xconfig linux-gconfig linux-nconfig linux26-menuconfig linux26-xconfig linux26-gconfig linux26-nconfig: linux-configure
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200306 $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) \
Peter Korsgaardc1ce30f2010-12-27 22:50:18 +0100307 $(subst linux-,,$(subst linux26-,,$@))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200308 rm -f $(LINUX_DIR)/.stamp_{built,target_installed,images_installed}
Thomas Petazzoni4944e8c2010-06-13 19:18:34 +0200309
Fabio Porceddaeca29bd2014-03-06 10:42:29 +0100310linux-savedefconfig linux26-savedefconfig: linux-configure
Jean-Christophe PLAGNIOL-VILLARDf5777ce2011-08-22 21:28:47 +0200311 $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) \
312 $(subst linux-,,$(subst linux26-,,$@))
313
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200314ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000315linux-update-config linux26-update-config: linux-configure $(LINUX_DIR)/.config
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200316 cp -f $(LINUX_DIR)/.config $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
317
318linux-update-defconfig linux26-update-defconfig: linux-savedefconfig
319 cp -f $(LINUX_DIR)/defconfig $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
320else
321linux-update-config linux26-update-config: ;
322linux-update-defconfig linux26-update-defconfig: ;
323endif
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000324endif
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200325
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200326# Support for rebuilding the kernel after the cpio archive has
327# been generated in $(BINARIES_DIR)/rootfs.cpio.
328$(LINUX_DIR)/.stamp_initramfs_rebuilt: $(LINUX_DIR)/.stamp_target_installed $(LINUX_DIR)/.stamp_images_installed $(BINARIES_DIR)/rootfs.cpio
Thomas Petazzonif5079212010-06-13 19:19:38 +0200329 @$(call MESSAGE,"Rebuilding kernel with initramfs")
Thomas Petazzonif5079212010-06-13 19:19:38 +0200330 # Build the kernel.
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200331 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_NAME)
Nathan Ford1ac04c32013-07-31 11:47:36 -0400332 $(LINUX_APPEND_DTB)
Thomas Petazzonif5079212010-06-13 19:19:38 +0200333 # Copy the kernel image to its final destination
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200334 cp $(LINUX_IMAGE_PATH) $(BINARIES_DIR)
Stephan Hoffmannaaed42d2012-03-17 10:46:55 +0100335 # If there is a .ub file copy it to the final destination
Markus Kaindlc9ccdf82012-03-21 02:19:04 +0100336 test ! -f $(LINUX_IMAGE_PATH).ub || cp $(LINUX_IMAGE_PATH).ub $(BINARIES_DIR)
Thomas Petazzonif5079212010-06-13 19:19:38 +0200337 $(Q)touch $@
338
339# The initramfs building code must make sure this target gets called
340# after it generated the initramfs list of files.
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200341linux-rebuild-with-initramfs linux26-rebuild-with-initramfs: $(LINUX_DIR)/.stamp_initramfs_rebuilt
Thomas Petazzonif5079212010-06-13 19:19:38 +0200342
Thomas Petazzoniaf5dc832010-07-29 15:40:28 +0200343# Checks to give errors that the user can understand
Peter Korsgaard3e5e39a2010-09-28 14:43:25 +0200344ifeq ($(filter source,$(MAKECMDGOALS)),)
Thomas Petazzoniaf5dc832010-07-29 15:40:28 +0200345ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
346ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG)),)
347$(error No kernel defconfig name specified, check your BR2_LINUX_KERNEL_DEFCONFIG setting)
348endif
349endif
350
351ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
352ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)),)
353$(error No kernel configuration file specified, check your BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE setting)
354endif
Peter Korsgaard3e5e39a2010-09-28 14:43:25 +0200355endif
356
357endif