blob: 1a81f77c8f58942272eb0c60b93fdbf6364dd4a5 [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
Thomas Petazzonib4837452013-08-27 19:28:33 +020044LINUX_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)
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)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200166KERNEL_SOURCE_CONFIG = $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
167endif
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))
189 $(if $(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV),
190 $(call KCONFIG_SET_OPT,CONFIG_UEVENT_HELPER_PATH,\"/sbin/mdev\",$(@D)/.config))
Jeremy Rosenbd533982014-01-08 14:48:33 +0100191 $(if $(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV),
192 $(call KCONFIG_ENABLE_OPT,CONFIG_INOTIFY_USER,$(@D)/.config))
Anders Daranderaaef2ca2013-12-16 11:53:20 +0100193 $(if $(BR2_PACKAGE_KTAP),
194 $(call KCONFIG_ENABLE_OPT,CONFIG_DEBUG_FS,$(@D)/.config)
195 $(call KCONFIG_ENABLE_OPT,CONFIG_EVENT_TRACING,$(@D)/.config)
196 $(call KCONFIG_ENABLE_OPT,CONFIG_PERF_EVENTS,$(@D)/.config)
197 $(call KCONFIG_ENABLE_OPT,CONFIG_FUNCTION_TRACER,$(@D)/.config))
Maxime Ripard90759a62012-03-23 16:49:53 +0100198 $(if $(BR2_PACKAGE_SYSTEMD),
199 $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUPS,$(@D)/.config))
Maxime Ripard978928e2012-07-30 14:32:47 +0200200 $(if $(BR2_LINUX_KERNEL_APPENDED_DTB),
201 $(call KCONFIG_ENABLE_OPT,CONFIG_ARM_APPENDED_DTB,$(@D)/.config))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200202 yes '' | $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) oldconfig
203endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200204
Maxime Ripard69fc4972012-07-30 14:32:45 +0200205ifeq ($(BR2_LINUX_KERNEL_DTS_SUPPORT),y)
Maxime Ripard978928e2012-07-30 14:32:47 +0200206ifeq ($(BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT),)
Maxime Ripard69fc4972012-07-30 14:32:45 +0200207define LINUX_BUILD_DTB
Peter Korsgaard309c2f52012-12-21 08:39:14 +0100208 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(KERNEL_DTBS)
Maxime Ripard69fc4972012-07-30 14:32:45 +0200209endef
210define LINUX_INSTALL_DTB
Peter Korsgaard3cab8aa2013-04-14 19:31:30 +0200211 # dtbs moved from arch/<ARCH>/boot to arch/<ARCH>/boot/dts since 3.8-rc1
Peter Korsgaardef347052012-12-21 09:07:45 +0100212 cp $(addprefix \
213 $(KERNEL_ARCH_PATH)/boot/$(if $(wildcard \
214 $(addprefix $(KERNEL_ARCH_PATH)/boot/dts/,$(KERNEL_DTBS))),dts/),$(KERNEL_DTBS)) \
Maxime Riparddd1aa622012-12-19 22:48:09 +0000215 $(BINARIES_DIR)/
Maxime Ripard69fc4972012-07-30 14:32:45 +0200216endef
Maxime Ripard88d350c2013-02-14 04:27:54 +0000217define LINUX_INSTALL_DTB_TARGET
Peter Korsgaard3cab8aa2013-04-14 19:31:30 +0200218 # dtbs moved from arch/<ARCH>/boot to arch/<ARCH>/boot/dts since 3.8-rc1
Maxime Ripard88d350c2013-02-14 04:27:54 +0000219 cp $(addprefix \
220 $(KERNEL_ARCH_PATH)/boot/$(if $(wildcard \
221 $(addprefix $(KERNEL_ARCH_PATH)/boot/dts/,$(KERNEL_DTBS))),dts/),$(KERNEL_DTBS)) \
222 $(TARGET_DIR)/boot/
223endef
Maxime Ripard69fc4972012-07-30 14:32:45 +0200224endif
Maxime Ripard978928e2012-07-30 14:32:47 +0200225endif
226
Arnout Vandecappelle (Essensium/Mind)a1cfe202013-01-08 11:23:56 +0000227ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y)
228# dtbs moved from arch/$ARCH/boot to arch/$ARCH/boot/dts since 3.8-rc1
229define LINUX_APPEND_DTB
230 if [ -e $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb ]; then \
231 cat $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb; \
232 else \
233 cat $(KERNEL_ARCH_PATH)/boot/dts/$(KERNEL_DTS_NAME).dtb; \
234 fi >> $(KERNEL_ARCH_PATH)/boot/zImage
235endef
Maxime Ripard978928e2012-07-30 14:32:47 +0200236ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y)
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200237# We need to generate a new u-boot image that takes into
238# account the extra-size added by the device tree at the end
239# of the image. To do so, we first need to retrieve both load
240# address and entry point for the kernel from the already
241# generate uboot image before using mkimage -l.
Arnout Vandecappelle13ae0072013-11-07 00:12:35 +0100242LINUX_APPEND_DTB += $(sep) MKIMAGE_ARGS=`$(MKIMAGE) -l $(LINUX_IMAGE_PATH) |\
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200243 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 +0100244 $(MKIMAGE) -A $(MKIMAGE_ARCH) -O linux \
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200245 -T kernel -C none $${MKIMAGE_ARGS} \
246 -d $(KERNEL_ARCH_PATH)/boot/zImage $(LINUX_IMAGE_PATH);
Arnout Vandecappelle (Essensium/Mind)a1cfe202013-01-08 11:23:56 +0000247endif
Maxime Ripard978928e2012-07-30 14:32:47 +0200248endif
Maxime Ripard69fc4972012-07-30 14:32:45 +0200249
Thomas Petazzoni4944e8c2010-06-13 19:18:34 +0200250# Compilation. We make sure the kernel gets rebuilt when the
251# configuration has changed.
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200252define LINUX_BUILD_CMDS
Maxime Ripard69fc4972012-07-30 14:32:45 +0200253 $(if $(BR2_LINUX_KERNEL_USE_CUSTOM_DTS),
254 cp $(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH) $(KERNEL_ARCH_PATH)/boot/dts/)
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200255 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_NAME)
Peter Korsgaardce03b892011-07-07 23:40:09 +0200256 @if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200257 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) modules ; \
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200258 fi
Maxime Ripard69fc4972012-07-30 14:32:45 +0200259 $(LINUX_BUILD_DTB)
Maxime Ripard978928e2012-07-30 14:32:47 +0200260 $(LINUX_APPEND_DTB)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200261endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200262
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200263
Thomas Petazzonieff25f42011-07-05 21:53:54 +0200264ifeq ($(BR2_LINUX_KERNEL_INSTALL_TARGET),y)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200265define LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200266 install -m 0644 -D $(LINUX_IMAGE_PATH) $(TARGET_DIR)/boot/$(LINUX_IMAGE_NAME)
Maxime Ripard88d350c2013-02-14 04:27:54 +0000267 $(LINUX_INSTALL_DTB_TARGET)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200268endef
Thomas Petazzonieff25f42011-07-05 21:53:54 +0200269endif
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200270
Thomas De Schampheleire707d44d2012-05-15 08:18:25 +0000271
272define LINUX_INSTALL_HOST_TOOLS
273 # Installing dtc (device tree compiler) as host tool, if selected
274 if grep -q "CONFIG_DTC=y" $(@D)/.config; then \
275 $(INSTALL) -D -m 0755 $(@D)/scripts/dtc/dtc $(HOST_DIR)/usr/bin/dtc ; \
276 fi
277endef
278
279
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200280define LINUX_INSTALL_IMAGES_CMDS
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200281 cp $(LINUX_IMAGE_PATH) $(BINARIES_DIR)
Reuben Dowle23553542013-03-27 23:01:15 +0000282 $(LINUX_INSTALL_DTB)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200283endef
284
285define LINUX_INSTALL_TARGET_CMDS
286 $(LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET)
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200287 # Install modules and remove symbolic links pointing to build
288 # directories, not relevant on the target
Peter Korsgaardce03b892011-07-07 23:40:09 +0200289 @if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \
Peter Korsgaard3f817232013-09-11 13:21:53 +0200290 $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) modules_install; \
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200291 rm -f $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/build ; \
292 rm -f $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/source ; \
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200293 fi
Thomas De Schampheleire707d44d2012-05-15 08:18:25 +0000294 $(LINUX_INSTALL_HOST_TOOLS)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200295endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200296
Jérôme Pouiller741cbcc2013-09-03 10:45:41 +0200297include $(sort $(wildcard linux/linux-ext-*.mk))
Thomas De Schampheleire3011d232011-09-17 22:22:51 +0200298
Arnout Vandecappelle (Essensium/Mind)e1502eb2012-07-03 00:07:32 +0200299$(eval $(generic-package))
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200300
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000301ifeq ($(BR2_LINUX_KERNEL),y)
302linux-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 +0200303 $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) \
Peter Korsgaardc1ce30f2010-12-27 22:50:18 +0100304 $(subst linux-,,$(subst linux26-,,$@))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200305 rm -f $(LINUX_DIR)/.stamp_{built,target_installed,images_installed}
Thomas Petazzoni4944e8c2010-06-13 19:18:34 +0200306
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000307linux-savedefconfig linux26-savedefconfig: dirs linux-configure
Jean-Christophe PLAGNIOL-VILLARDf5777ce2011-08-22 21:28:47 +0200308 $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) \
309 $(subst linux-,,$(subst linux26-,,$@))
310
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200311ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000312linux-update-config linux26-update-config: linux-configure $(LINUX_DIR)/.config
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200313 cp -f $(LINUX_DIR)/.config $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
314
315linux-update-defconfig linux26-update-defconfig: linux-savedefconfig
316 cp -f $(LINUX_DIR)/defconfig $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
317else
318linux-update-config linux26-update-config: ;
319linux-update-defconfig linux26-update-defconfig: ;
320endif
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000321endif
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200322
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200323# Support for rebuilding the kernel after the cpio archive has
324# been generated in $(BINARIES_DIR)/rootfs.cpio.
325$(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 +0200326 @$(call MESSAGE,"Rebuilding kernel with initramfs")
Thomas Petazzonif5079212010-06-13 19:19:38 +0200327 # Build the kernel.
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200328 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_NAME)
Nathan Ford1ac04c32013-07-31 11:47:36 -0400329 $(LINUX_APPEND_DTB)
Thomas Petazzonif5079212010-06-13 19:19:38 +0200330 # Copy the kernel image to its final destination
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200331 cp $(LINUX_IMAGE_PATH) $(BINARIES_DIR)
Stephan Hoffmannaaed42d2012-03-17 10:46:55 +0100332 # If there is a .ub file copy it to the final destination
Markus Kaindlc9ccdf82012-03-21 02:19:04 +0100333 test ! -f $(LINUX_IMAGE_PATH).ub || cp $(LINUX_IMAGE_PATH).ub $(BINARIES_DIR)
Thomas Petazzonif5079212010-06-13 19:19:38 +0200334 $(Q)touch $@
335
336# The initramfs building code must make sure this target gets called
337# after it generated the initramfs list of files.
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200338linux-rebuild-with-initramfs linux26-rebuild-with-initramfs: $(LINUX_DIR)/.stamp_initramfs_rebuilt
Thomas Petazzonif5079212010-06-13 19:19:38 +0200339
Thomas Petazzoniaf5dc832010-07-29 15:40:28 +0200340# Checks to give errors that the user can understand
Peter Korsgaard3e5e39a2010-09-28 14:43:25 +0200341ifeq ($(filter source,$(MAKECMDGOALS)),)
Thomas Petazzoniaf5dc832010-07-29 15:40:28 +0200342ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
343ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG)),)
344$(error No kernel defconfig name specified, check your BR2_LINUX_KERNEL_DEFCONFIG setting)
345endif
346endif
347
348ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
349ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)),)
350$(error No kernel configuration file specified, check your BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE setting)
351endif
Peter Korsgaard3e5e39a2010-09-28 14:43:25 +0200352endif
353
354endif