blob: cf728aad05d9c80eb8874c82d7d90647d47964ee [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
Yann E. MORINca807822014-02-08 17:26:05 +010044LINUX_DEPENDENCIES += host-kmod
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)
Thomas Petazzoniaf526612011-07-11 22:46:07 +020083LINUX_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)
Thomas Petazzoniaf526612011-07-11 22:46:07 +020086LINUX_IMAGE_NAME=uImage
Maxime Ripard978928e2012-07-30 14:32:47 +020087else ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y)
88LINUX_IMAGE_NAME=uImage
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020089else ifeq ($(BR2_LINUX_KERNEL_BZIMAGE),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +020090LINUX_IMAGE_NAME=bzImage
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020091else ifeq ($(BR2_LINUX_KERNEL_ZIMAGE),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +020092LINUX_IMAGE_NAME=zImage
Maxime Ripard978928e2012-07-30 14:32:47 +020093else ifeq ($(BR2_LINUX_KERNEL_APPENDED_ZIMAGE),y)
94LINUX_IMAGE_NAME=zImage
Maxime Ripard18e752d2012-07-30 14:32:48 +020095else ifeq ($(BR2_LINUX_KERNEL_CUIMAGE),y)
96LINUX_IMAGE_NAME=cuImage.$(KERNEL_DTS_NAME)
97else ifeq ($(BR2_LINUX_KERNEL_SIMPLEIMAGE),y)
98LINUX_IMAGE_NAME=simpleImage.$(KERNEL_DTS_NAME)
99else ifeq ($(BR2_LINUX_KERNEL_LINUX_BIN),y)
100LINUX_IMAGE_NAME=linux.bin
Thomas Petazzonib626dc02010-09-01 15:26:24 +0200101else ifeq ($(BR2_LINUX_KERNEL_VMLINUX_BIN),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200102LINUX_IMAGE_NAME=vmlinux.bin
Thomas Petazzoni71c05022010-12-05 21:53:23 +0100103else ifeq ($(BR2_LINUX_KERNEL_VMLINUX),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200104LINUX_IMAGE_NAME=vmlinux
Kelvin Cheungc1485d52011-09-20 17:01:26 +0800105else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ),y)
106LINUX_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),)
112LINUX_MAKE_FLAGS+=LOADADDR="$(LINUX_KERNEL_UIMAGE_LOADADDR)"
113endif
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)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200120KERNEL_ARCH_PATH=$(LINUX_DIR)/arch/x86
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100121else ifeq ($(KERNEL_ARCH),x86_64)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200122KERNEL_ARCH_PATH=$(LINUX_DIR)/arch/x86
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100123else
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200124KERNEL_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)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200128LINUX_IMAGE_PATH=$(LINUX_DIR)/$(LINUX_IMAGE_NAME)
Kelvin Cheungc1485d52011-09-20 17:01:26 +0800129else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ),y)
130LINUX_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)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200133LINUX_IMAGE_PATH=$(KERNEL_ARCH_PATH)/boot/images/$(LINUX_IMAGE_NAME)
Thomas Petazzoni96652632010-09-07 15:08:07 +0200134else
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200135LINUX_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)
Yann E. MORINca807822014-02-08 17:26:05 +0100166KERNEL_SOURCE_CONFIG = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE))
167endif
168
169ifeq ($(call KCONFIG_GET_OPT,CONFIG_KERNEL_LZO,$(KERNEL_SOURCE_CONFIG)),y)
170LINUX_DEPENDENCIES += host-lzop
171endif
172ifeq ($(call KCONFIG_GET_OPT,CONFIG_RD_LZO,$(KERNEL_SOURCE_CONFIG)),y)
173LINUX_DEPENDENCIES += host-lzop
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200174endif
175
176define LINUX_CONFIGURE_CMDS
Yann E. MORIN0a541c82014-01-28 21:11:23 +0100177 $(INSTALL) -m 0644 $(KERNEL_SOURCE_CONFIG) $(KERNEL_ARCH_PATH)/configs/buildroot_defconfig
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200178 $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) buildroot_defconfig
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100179 rm $(KERNEL_ARCH_PATH)/configs/buildroot_defconfig
Yann E. MORIN72189e52013-07-14 00:27:30 +0200180 $(if $(BR2_arm)$(BR2_armeb),
181 $(call KCONFIG_ENABLE_OPT,CONFIG_AEABI,$(@D)/.config))
Thomas Petazzonied23c922013-12-29 18:33:45 +0100182 $(if $(BR2_TARGET_ROOTFS_CPIO),
183 $(call KCONFIG_ENABLE_OPT,CONFIG_BLK_DEV_INITRD,$(@D)/.config))
Thomas Petazzonif5079212010-06-13 19:19:38 +0200184 # As the kernel gets compiled before root filesystems are
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200185 # built, we create a fake cpio file. It'll be
186 # replaced later by the real cpio archive, and the kernel will be
Thomas Petazzonif5079212010-06-13 19:19:38 +0200187 # rebuilt using the linux26-rebuild-with-initramfs target.
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200188 $(if $(BR2_TARGET_ROOTFS_INITRAMFS),
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200189 touch $(BINARIES_DIR)/rootfs.cpio
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200190 $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_SOURCE,\"$(BINARIES_DIR)/rootfs.cpio\",$(@D)/.config)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200191 $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_UID,0,$(@D)/.config)
Valentine Barshak391c82e2012-10-10 03:34:56 +0400192 $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_GID,0,$(@D)/.config))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200193 $(if $(BR2_ROOTFS_DEVICE_CREATION_STATIC),,
194 $(call KCONFIG_ENABLE_OPT,CONFIG_DEVTMPFS,$(@D)/.config)
195 $(call KCONFIG_ENABLE_OPT,CONFIG_DEVTMPFS_MOUNT,$(@D)/.config))
eric.le.bihan.dev@free.fr937a9542014-02-07 14:21:32 +0100196 $(if $(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV),
197 $(call KCONFIG_ENABLE_OPT,CONFIG_INOTIFY_USER,$(@D)/.config))
Anders Daranderaaef2ca2013-12-16 11:53:20 +0100198 $(if $(BR2_PACKAGE_KTAP),
199 $(call KCONFIG_ENABLE_OPT,CONFIG_DEBUG_FS,$(@D)/.config)
200 $(call KCONFIG_ENABLE_OPT,CONFIG_EVENT_TRACING,$(@D)/.config)
201 $(call KCONFIG_ENABLE_OPT,CONFIG_PERF_EVENTS,$(@D)/.config)
202 $(call KCONFIG_ENABLE_OPT,CONFIG_FUNCTION_TRACER,$(@D)/.config))
Maxime Ripard90759a62012-03-23 16:49:53 +0100203 $(if $(BR2_PACKAGE_SYSTEMD),
eric.le.bihan.dev@free.fr2c66e442014-02-07 14:21:34 +0100204 $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUPS,$(@D)/.config)
eric.le.bihan.dev@free.fr4c10eed2014-02-24 10:25:42 +0100205 $(call KCONFIG_ENABLE_OPT,CONFIG_INOTIFY_USER,$(@D)/.config)
206 $(call KCONFIG_ENABLE_OPT,CONFIG_FHANDLE,$(@D)/.config)
207 $(call KCONFIG_ENABLE_OPT,CONFIG_AUTOFS4_FS,$(@D)/.config)
208 $(call KCONFIG_ENABLE_OPT,CONFIG_TMPFS_POSIX_ACL,$(@D)/.config)
209 $(call KCONFIG_ENABLE_OPT,CONFIG_TMPFS_POSIX_XATTR,$(@D)/.config))
Maxime Ripard978928e2012-07-30 14:32:47 +0200210 $(if $(BR2_LINUX_KERNEL_APPENDED_DTB),
211 $(call KCONFIG_ENABLE_OPT,CONFIG_ARM_APPENDED_DTB,$(@D)/.config))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200212 yes '' | $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) oldconfig
213endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200214
Maxime Ripard69fc4972012-07-30 14:32:45 +0200215ifeq ($(BR2_LINUX_KERNEL_DTS_SUPPORT),y)
Maxime Ripard978928e2012-07-30 14:32:47 +0200216ifeq ($(BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT),)
Maxime Ripard69fc4972012-07-30 14:32:45 +0200217define LINUX_BUILD_DTB
Peter Korsgaard309c2f52012-12-21 08:39:14 +0100218 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(KERNEL_DTBS)
Maxime Ripard69fc4972012-07-30 14:32:45 +0200219endef
220define LINUX_INSTALL_DTB
Peter Korsgaard3cab8aa2013-04-14 19:31:30 +0200221 # dtbs moved from arch/<ARCH>/boot to arch/<ARCH>/boot/dts since 3.8-rc1
Peter Korsgaardef347052012-12-21 09:07:45 +0100222 cp $(addprefix \
223 $(KERNEL_ARCH_PATH)/boot/$(if $(wildcard \
224 $(addprefix $(KERNEL_ARCH_PATH)/boot/dts/,$(KERNEL_DTBS))),dts/),$(KERNEL_DTBS)) \
Maxime Riparddd1aa622012-12-19 22:48:09 +0000225 $(BINARIES_DIR)/
Maxime Ripard69fc4972012-07-30 14:32:45 +0200226endef
Maxime Ripard88d350c2013-02-14 04:27:54 +0000227define LINUX_INSTALL_DTB_TARGET
Peter Korsgaard3cab8aa2013-04-14 19:31:30 +0200228 # dtbs moved from arch/<ARCH>/boot to arch/<ARCH>/boot/dts since 3.8-rc1
Maxime Ripard88d350c2013-02-14 04:27:54 +0000229 cp $(addprefix \
230 $(KERNEL_ARCH_PATH)/boot/$(if $(wildcard \
231 $(addprefix $(KERNEL_ARCH_PATH)/boot/dts/,$(KERNEL_DTBS))),dts/),$(KERNEL_DTBS)) \
232 $(TARGET_DIR)/boot/
233endef
Maxime Ripard69fc4972012-07-30 14:32:45 +0200234endif
Maxime Ripard978928e2012-07-30 14:32:47 +0200235endif
236
Arnout Vandecappelle (Essensium/Mind)a1cfe202013-01-08 11:23:56 +0000237ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y)
238# dtbs moved from arch/$ARCH/boot to arch/$ARCH/boot/dts since 3.8-rc1
239define LINUX_APPEND_DTB
240 if [ -e $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb ]; then \
241 cat $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb; \
242 else \
243 cat $(KERNEL_ARCH_PATH)/boot/dts/$(KERNEL_DTS_NAME).dtb; \
244 fi >> $(KERNEL_ARCH_PATH)/boot/zImage
245endef
Maxime Ripard978928e2012-07-30 14:32:47 +0200246ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y)
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200247# We need to generate a new u-boot image that takes into
248# account the extra-size added by the device tree at the end
249# of the image. To do so, we first need to retrieve both load
250# address and entry point for the kernel from the already
251# generate uboot image before using mkimage -l.
Arnout Vandecappelle13ae0072013-11-07 00:12:35 +0100252LINUX_APPEND_DTB += $(sep) MKIMAGE_ARGS=`$(MKIMAGE) -l $(LINUX_IMAGE_PATH) |\
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200253 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 +0100254 $(MKIMAGE) -A $(MKIMAGE_ARCH) -O linux \
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200255 -T kernel -C none $${MKIMAGE_ARGS} \
256 -d $(KERNEL_ARCH_PATH)/boot/zImage $(LINUX_IMAGE_PATH);
Arnout Vandecappelle (Essensium/Mind)a1cfe202013-01-08 11:23:56 +0000257endif
Maxime Ripard978928e2012-07-30 14:32:47 +0200258endif
Maxime Ripard69fc4972012-07-30 14:32:45 +0200259
Thomas Petazzoni4944e8c2010-06-13 19:18:34 +0200260# Compilation. We make sure the kernel gets rebuilt when the
261# configuration has changed.
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200262define LINUX_BUILD_CMDS
Maxime Ripard69fc4972012-07-30 14:32:45 +0200263 $(if $(BR2_LINUX_KERNEL_USE_CUSTOM_DTS),
264 cp $(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH) $(KERNEL_ARCH_PATH)/boot/dts/)
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200265 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_NAME)
Peter Korsgaardce03b892011-07-07 23:40:09 +0200266 @if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200267 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) modules ; \
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200268 fi
Maxime Ripard69fc4972012-07-30 14:32:45 +0200269 $(LINUX_BUILD_DTB)
Maxime Ripard978928e2012-07-30 14:32:47 +0200270 $(LINUX_APPEND_DTB)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200271endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200272
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200273
Thomas Petazzonieff25f42011-07-05 21:53:54 +0200274ifeq ($(BR2_LINUX_KERNEL_INSTALL_TARGET),y)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200275define LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200276 install -m 0644 -D $(LINUX_IMAGE_PATH) $(TARGET_DIR)/boot/$(LINUX_IMAGE_NAME)
Maxime Ripard88d350c2013-02-14 04:27:54 +0000277 $(LINUX_INSTALL_DTB_TARGET)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200278endef
Thomas Petazzonieff25f42011-07-05 21:53:54 +0200279endif
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200280
Thomas De Schampheleire707d44d2012-05-15 08:18:25 +0000281
282define LINUX_INSTALL_HOST_TOOLS
283 # Installing dtc (device tree compiler) as host tool, if selected
284 if grep -q "CONFIG_DTC=y" $(@D)/.config; then \
285 $(INSTALL) -D -m 0755 $(@D)/scripts/dtc/dtc $(HOST_DIR)/usr/bin/dtc ; \
286 fi
287endef
288
289
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200290define LINUX_INSTALL_IMAGES_CMDS
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200291 cp $(LINUX_IMAGE_PATH) $(BINARIES_DIR)
Reuben Dowle23553542013-03-27 23:01:15 +0000292 $(LINUX_INSTALL_DTB)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200293endef
294
295define LINUX_INSTALL_TARGET_CMDS
296 $(LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET)
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200297 # Install modules and remove symbolic links pointing to build
298 # directories, not relevant on the target
Peter Korsgaardce03b892011-07-07 23:40:09 +0200299 @if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \
Peter Korsgaard3f817232013-09-11 13:21:53 +0200300 $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) modules_install; \
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200301 rm -f $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/build ; \
302 rm -f $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/source ; \
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200303 fi
Thomas De Schampheleire707d44d2012-05-15 08:18:25 +0000304 $(LINUX_INSTALL_HOST_TOOLS)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200305endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200306
Jérôme Pouiller741cbcc2013-09-03 10:45:41 +0200307include $(sort $(wildcard linux/linux-ext-*.mk))
Thomas De Schampheleire3011d232011-09-17 22:22:51 +0200308
Arnout Vandecappelle (Essensium/Mind)e1502eb2012-07-03 00:07:32 +0200309$(eval $(generic-package))
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200310
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000311ifeq ($(BR2_LINUX_KERNEL),y)
312linux-menuconfig linux-xconfig linux-gconfig linux-nconfig linux26-menuconfig linux26-xconfig linux26-gconfig linux26-nconfig: dirs linux-configure
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200313 $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) \
Peter Korsgaardc1ce30f2010-12-27 22:50:18 +0100314 $(subst linux-,,$(subst linux26-,,$@))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200315 rm -f $(LINUX_DIR)/.stamp_{built,target_installed,images_installed}
Thomas Petazzoni4944e8c2010-06-13 19:18:34 +0200316
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000317linux-savedefconfig linux26-savedefconfig: dirs linux-configure
Jean-Christophe PLAGNIOL-VILLARDf5777ce2011-08-22 21:28:47 +0200318 $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) \
319 $(subst linux-,,$(subst linux26-,,$@))
320
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200321ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000322linux-update-config linux26-update-config: linux-configure $(LINUX_DIR)/.config
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200323 cp -f $(LINUX_DIR)/.config $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
324
325linux-update-defconfig linux26-update-defconfig: linux-savedefconfig
326 cp -f $(LINUX_DIR)/defconfig $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
327else
328linux-update-config linux26-update-config: ;
329linux-update-defconfig linux26-update-defconfig: ;
330endif
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000331endif
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200332
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200333# Support for rebuilding the kernel after the cpio archive has
334# been generated in $(BINARIES_DIR)/rootfs.cpio.
335$(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 +0200336 @$(call MESSAGE,"Rebuilding kernel with initramfs")
Thomas Petazzonif5079212010-06-13 19:19:38 +0200337 # Build the kernel.
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200338 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_NAME)
Nathan Ford1ac04c32013-07-31 11:47:36 -0400339 $(LINUX_APPEND_DTB)
Thomas Petazzonif5079212010-06-13 19:19:38 +0200340 # Copy the kernel image to its final destination
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200341 cp $(LINUX_IMAGE_PATH) $(BINARIES_DIR)
Stephan Hoffmannaaed42d2012-03-17 10:46:55 +0100342 # If there is a .ub file copy it to the final destination
Markus Kaindlc9ccdf82012-03-21 02:19:04 +0100343 test ! -f $(LINUX_IMAGE_PATH).ub || cp $(LINUX_IMAGE_PATH).ub $(BINARIES_DIR)
Thomas Petazzonif5079212010-06-13 19:19:38 +0200344 $(Q)touch $@
345
346# The initramfs building code must make sure this target gets called
347# after it generated the initramfs list of files.
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200348linux-rebuild-with-initramfs linux26-rebuild-with-initramfs: $(LINUX_DIR)/.stamp_initramfs_rebuilt
Thomas Petazzonif5079212010-06-13 19:19:38 +0200349
Thomas Petazzoniaf5dc832010-07-29 15:40:28 +0200350# Checks to give errors that the user can understand
Peter Korsgaard3e5e39a2010-09-28 14:43:25 +0200351ifeq ($(filter source,$(MAKECMDGOALS)),)
Thomas Petazzoniaf5dc832010-07-29 15:40:28 +0200352ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
353ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG)),)
354$(error No kernel defconfig name specified, check your BR2_LINUX_KERNEL_DEFCONFIG setting)
355endif
356endif
357
358ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
359ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)),)
360$(error No kernel configuration file specified, check your BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE setting)
361endif
Peter Korsgaard3e5e39a2010-09-28 14:43:25 +0200362endif
363
364endif