blob: 62033d280b87a2164efb57b9f6c4e2bc3a8293e8 [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
12ifeq ($(LINUX_VERSION),custom)
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))
Thomas Petazzoni205fb192011-07-11 22:46:11 +020016else ifeq ($(BR2_LINUX_KERNEL_CUSTOM_GIT),y)
Thomas De Schampheleire63ecded2013-09-02 22:07:54 +020017LINUX_SITE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_REPO_URL))
Thomas Petazzoni205fb192011-07-11 22:46:11 +020018LINUX_SITE_METHOD = git
Thomas De Schampheleire63ecded2013-09-02 22:07:54 +020019else ifeq ($(BR2_LINUX_KERNEL_CUSTOM_HG),y)
20LINUX_SITE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_REPO_URL))
21LINUX_SITE_METHOD = hg
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020022else
Raúl Sánchez Siles98b5cc32013-05-11 01:40:36 +000023LINUX_SOURCE = linux-$(LINUX_VERSION).tar.xz
Thomas Petazzonif45f7752011-07-11 22:46:16 +020024# In X.Y.Z, get X and Y. We replace dots and dashes by spaces in order
25# to use the $(word) function. We support versions such as 3.1,
26# 2.6.32, 2.6.32-rc1, 3.0-rc6, etc.
Gustavo Zacarias80d7b682011-10-24 11:54:03 -030027ifeq ($(findstring x2.6.,x$(LINUX_VERSION)),x2.6.)
28LINUX_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/v2.6/
29else
30LINUX_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/v3.x/
31endif
Thomas Petazzonif45f7752011-07-11 22:46:16 +020032# release candidates are in testing/ subdir
33ifneq ($(findstring -rc,$(LINUX_VERSION)),)
Peter Korsgaardea7f5ff2011-07-14 16:38:07 +020034LINUX_SITE := $(LINUX_SITE)testing/
Thomas Petazzonif45f7752011-07-11 22:46:16 +020035endif # -rc
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020036endif
37
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +020038LINUX_PATCHES = $(call qstrip,$(BR2_LINUX_KERNEL_PATCH))
39
40LINUX_INSTALL_IMAGES = YES
Thomas Petazzonib4837452013-08-27 19:28:33 +020041LINUX_DEPENDENCIES += host-kmod host-lzop
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020042
Maxime Ripard902609f2012-07-30 14:32:46 +020043ifeq ($(BR2_LINUX_KERNEL_UBOOT_IMAGE),y)
44 LINUX_DEPENDENCIES += host-uboot-tools
45endif
46
Thomas Petazzoniaf526612011-07-11 22:46:07 +020047LINUX_MAKE_FLAGS = \
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020048 HOSTCC="$(HOSTCC)" \
49 HOSTCFLAGS="$(HOSTCFLAGS)" \
50 ARCH=$(KERNEL_ARCH) \
51 INSTALL_MOD_PATH=$(TARGET_DIR) \
Martin Hicksd10e46f2011-02-01 12:13:00 -050052 CROSS_COMPILE="$(CCACHE) $(TARGET_CROSS)" \
Peter Korsgaardcc345192013-09-10 21:54:59 +020053 DEPMOD=$(HOST_DIR)/sbin/depmod
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020054
55# Get the real Linux version, which tells us where kernel modules are
56# going to be installed in the target filesystem.
Thomas Petazzoniaf526612011-07-11 22:46:07 +020057LINUX_VERSION_PROBED = $(shell $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) --no-print-directory -s kernelrelease)
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020058
Maxime Ripard69fc4972012-07-30 14:32:45 +020059ifeq ($(BR2_LINUX_KERNEL_USE_INTREE_DTS),y)
Peter Korsgaard309c2f52012-12-21 08:39:14 +010060KERNEL_DTS_NAME = $(call qstrip,$(BR2_LINUX_KERNEL_INTREE_DTS_NAME))
Maxime Ripard69fc4972012-07-30 14:32:45 +020061else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_DTS),y)
Thomas Petazzoni82d2a472013-06-05 06:21:09 +000062KERNEL_DTS_NAME = $(basename $(notdir $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH))))
Maxime Ripard69fc4972012-07-30 14:32:45 +020063endif
64
Peter Korsgaard0ffdc162013-04-15 08:55:53 +020065ifeq ($(BR2_LINUX_KERNEL_DTS_SUPPORT)$(KERNEL_DTS_NAME),y)
66$(error No kernel device tree source specified, check your \
67BR2_LINUX_KERNEL_USE_INTREE_DTS / BR2_LINUX_KERNEL_USE_CUSTOM_DTS settings)
68endif
69
Maxime Ripard978928e2012-07-30 14:32:47 +020070ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y)
71ifneq ($(words $(KERNEL_DTS_NAME)),1)
72$(error Kernel with appended device tree needs exactly one DTS source.\
73 Check BR2_LINUX_KERNEL_INTREE_DTS_NAME or BR2_LINUX_KERNEL_CUSTOM_DTS_PATH.)
74endif
75endif
76
Peter Korsgaard309c2f52012-12-21 08:39:14 +010077KERNEL_DTBS = $(addsuffix .dtb,$(KERNEL_DTS_NAME))
78
Martin Hickse2ed6c82011-03-21 13:39:43 -040079ifeq ($(BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +020080LINUX_IMAGE_NAME=$(call qstrip,$(BR2_LINUX_KERNEL_IMAGE_TARGET_NAME))
Martin Hickse2ed6c82011-03-21 13:39:43 -040081else
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020082ifeq ($(BR2_LINUX_KERNEL_UIMAGE),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +020083LINUX_IMAGE_NAME=uImage
Maxime Ripard978928e2012-07-30 14:32:47 +020084else ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y)
85LINUX_IMAGE_NAME=uImage
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020086else ifeq ($(BR2_LINUX_KERNEL_BZIMAGE),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +020087LINUX_IMAGE_NAME=bzImage
Thomas Petazzoni487e21c2010-04-03 18:46:46 +020088else ifeq ($(BR2_LINUX_KERNEL_ZIMAGE),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +020089LINUX_IMAGE_NAME=zImage
Maxime Ripard978928e2012-07-30 14:32:47 +020090else ifeq ($(BR2_LINUX_KERNEL_APPENDED_ZIMAGE),y)
91LINUX_IMAGE_NAME=zImage
Maxime Ripard18e752d2012-07-30 14:32:48 +020092else ifeq ($(BR2_LINUX_KERNEL_CUIMAGE),y)
93LINUX_IMAGE_NAME=cuImage.$(KERNEL_DTS_NAME)
94else ifeq ($(BR2_LINUX_KERNEL_SIMPLEIMAGE),y)
95LINUX_IMAGE_NAME=simpleImage.$(KERNEL_DTS_NAME)
96else ifeq ($(BR2_LINUX_KERNEL_LINUX_BIN),y)
97LINUX_IMAGE_NAME=linux.bin
Thomas Petazzonib626dc02010-09-01 15:26:24 +020098else ifeq ($(BR2_LINUX_KERNEL_VMLINUX_BIN),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +020099LINUX_IMAGE_NAME=vmlinux.bin
Thomas Petazzoni71c05022010-12-05 21:53:23 +0100100else ifeq ($(BR2_LINUX_KERNEL_VMLINUX),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200101LINUX_IMAGE_NAME=vmlinux
Kelvin Cheungc1485d52011-09-20 17:01:26 +0800102else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ),y)
103LINUX_IMAGE_NAME=vmlinuz
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200104endif
Martin Hickse2ed6c82011-03-21 13:39:43 -0400105endif
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200106
Julien Boibessot8215e192013-03-13 11:13:24 +0000107LINUX_KERNEL_UIMAGE_LOADADDR=$(call qstrip,$(BR2_LINUX_KERNEL_UIMAGE_LOADADDR))
108ifneq ($(LINUX_KERNEL_UIMAGE_LOADADDR),)
109LINUX_MAKE_FLAGS+=LOADADDR="$(LINUX_KERNEL_UIMAGE_LOADADDR)"
110endif
111
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100112# Compute the arch path, since i386 and x86_64 are in arch/x86 and not
113# in arch/$(KERNEL_ARCH). Even if the kernel creates symbolic links
114# for bzImage, arch/i386 and arch/x86_64 do not exist when copying the
115# defconfig file.
116ifeq ($(KERNEL_ARCH),i386)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200117KERNEL_ARCH_PATH=$(LINUX_DIR)/arch/x86
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100118else ifeq ($(KERNEL_ARCH),x86_64)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200119KERNEL_ARCH_PATH=$(LINUX_DIR)/arch/x86
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100120else
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200121KERNEL_ARCH_PATH=$(LINUX_DIR)/arch/$(KERNEL_ARCH)
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100122endif
123
Thomas Petazzoni71c05022010-12-05 21:53:23 +0100124ifeq ($(BR2_LINUX_KERNEL_VMLINUX),y)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200125LINUX_IMAGE_PATH=$(LINUX_DIR)/$(LINUX_IMAGE_NAME)
Kelvin Cheungc1485d52011-09-20 17:01:26 +0800126else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ),y)
127LINUX_IMAGE_PATH=$(LINUX_DIR)/$(LINUX_IMAGE_NAME)
Thomas Petazzoni71c05022010-12-05 21:53:23 +0100128else
Thomas Petazzoni96652632010-09-07 15:08:07 +0200129ifeq ($(KERNEL_ARCH),avr32)
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200130LINUX_IMAGE_PATH=$(KERNEL_ARCH_PATH)/boot/images/$(LINUX_IMAGE_NAME)
Thomas Petazzoni96652632010-09-07 15:08:07 +0200131else
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200132LINUX_IMAGE_PATH=$(KERNEL_ARCH_PATH)/boot/$(LINUX_IMAGE_NAME)
Thomas Petazzoni96652632010-09-07 15:08:07 +0200133endif
Thomas Petazzoni71c05022010-12-05 21:53:23 +0100134endif # BR2_LINUX_KERNEL_VMLINUX
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200135
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200136define LINUX_DOWNLOAD_PATCHES
137 $(if $(LINUX_PATCHES),
138 @$(call MESSAGE,"Download additional patches"))
139 $(foreach patch,$(filter ftp://% http://%,$(LINUX_PATCHES)),\
Alvaro G. M0a4856c2012-03-16 14:42:53 +0100140 $(call DOWNLOAD,$(patch))$(sep))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200141endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200142
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200143LINUX_POST_DOWNLOAD_HOOKS += LINUX_DOWNLOAD_PATCHES
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200144
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200145define LINUX_APPLY_PATCHES
146 for p in $(LINUX_PATCHES) ; do \
Thomas Petazzoni55b0a372010-12-05 21:53:18 +0100147 if echo $$p | grep -q -E "^ftp://|^http://" ; then \
Thomas Petazzoni59a326b2011-08-31 23:35:04 +0200148 support/scripts/apply-patches.sh $(@D) $(DL_DIR) `basename $$p` ; \
Thomas Petazzoni55b0a372010-12-05 21:53:18 +0100149 elif test -d $$p ; then \
Thomas Petazzoni59a326b2011-08-31 23:35:04 +0200150 support/scripts/apply-patches.sh $(@D) $$p linux-\*.patch ; \
Thomas Petazzoni55b0a372010-12-05 21:53:18 +0100151 else \
Thomas Petazzoni59a326b2011-08-31 23:35:04 +0200152 support/scripts/apply-patches.sh $(@D) `dirname $$p` `basename $$p` ; \
Thomas Petazzoni55b0a372010-12-05 21:53:18 +0100153 fi \
154 done
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200155endef
156
157LINUX_POST_PATCH_HOOKS += LINUX_APPLY_PATCHES
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200158
159
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200160ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200161KERNEL_SOURCE_CONFIG = $(KERNEL_ARCH_PATH)/configs/$(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG))_defconfig
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200162else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200163KERNEL_SOURCE_CONFIG = $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
164endif
165
166define LINUX_CONFIGURE_CMDS
Yann E. MORIN0a541c82014-01-28 21:11:23 +0100167 $(INSTALL) -m 0644 $(KERNEL_SOURCE_CONFIG) $(KERNEL_ARCH_PATH)/configs/buildroot_defconfig
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200168 $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) buildroot_defconfig
Thomas Petazzoni84c4a102010-12-05 21:53:26 +0100169 rm $(KERNEL_ARCH_PATH)/configs/buildroot_defconfig
Yann E. MORIN72189e52013-07-14 00:27:30 +0200170 $(if $(BR2_arm)$(BR2_armeb),
171 $(call KCONFIG_ENABLE_OPT,CONFIG_AEABI,$(@D)/.config))
Thomas Petazzonied23c922013-12-29 18:33:45 +0100172 $(if $(BR2_TARGET_ROOTFS_CPIO),
173 $(call KCONFIG_ENABLE_OPT,CONFIG_BLK_DEV_INITRD,$(@D)/.config))
Thomas Petazzonif5079212010-06-13 19:19:38 +0200174 # As the kernel gets compiled before root filesystems are
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200175 # built, we create a fake cpio file. It'll be
176 # replaced later by the real cpio archive, and the kernel will be
Thomas Petazzonif5079212010-06-13 19:19:38 +0200177 # rebuilt using the linux26-rebuild-with-initramfs target.
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200178 $(if $(BR2_TARGET_ROOTFS_INITRAMFS),
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200179 touch $(BINARIES_DIR)/rootfs.cpio
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200180 $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_SOURCE,\"$(BINARIES_DIR)/rootfs.cpio\",$(@D)/.config)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200181 $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_UID,0,$(@D)/.config)
Valentine Barshak391c82e2012-10-10 03:34:56 +0400182 $(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_ROOT_GID,0,$(@D)/.config))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200183 $(if $(BR2_ROOTFS_DEVICE_CREATION_STATIC),,
184 $(call KCONFIG_ENABLE_OPT,CONFIG_DEVTMPFS,$(@D)/.config)
185 $(call KCONFIG_ENABLE_OPT,CONFIG_DEVTMPFS_MOUNT,$(@D)/.config))
186 $(if $(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV),
187 $(call KCONFIG_SET_OPT,CONFIG_UEVENT_HELPER_PATH,\"/sbin/mdev\",$(@D)/.config))
Jeremy Rosenbd533982014-01-08 14:48:33 +0100188 $(if $(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV),
189 $(call KCONFIG_ENABLE_OPT,CONFIG_INOTIFY_USER,$(@D)/.config))
Anders Daranderaaef2ca2013-12-16 11:53:20 +0100190 $(if $(BR2_PACKAGE_KTAP),
191 $(call KCONFIG_ENABLE_OPT,CONFIG_DEBUG_FS,$(@D)/.config)
192 $(call KCONFIG_ENABLE_OPT,CONFIG_EVENT_TRACING,$(@D)/.config)
193 $(call KCONFIG_ENABLE_OPT,CONFIG_PERF_EVENTS,$(@D)/.config)
194 $(call KCONFIG_ENABLE_OPT,CONFIG_FUNCTION_TRACER,$(@D)/.config))
Maxime Ripard90759a62012-03-23 16:49:53 +0100195 $(if $(BR2_PACKAGE_SYSTEMD),
196 $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUPS,$(@D)/.config))
Maxime Ripard978928e2012-07-30 14:32:47 +0200197 $(if $(BR2_LINUX_KERNEL_APPENDED_DTB),
198 $(call KCONFIG_ENABLE_OPT,CONFIG_ARM_APPENDED_DTB,$(@D)/.config))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200199 yes '' | $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) oldconfig
200endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200201
Maxime Ripard69fc4972012-07-30 14:32:45 +0200202ifeq ($(BR2_LINUX_KERNEL_DTS_SUPPORT),y)
Maxime Ripard978928e2012-07-30 14:32:47 +0200203ifeq ($(BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT),)
Maxime Ripard69fc4972012-07-30 14:32:45 +0200204define LINUX_BUILD_DTB
Peter Korsgaard309c2f52012-12-21 08:39:14 +0100205 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(KERNEL_DTBS)
Maxime Ripard69fc4972012-07-30 14:32:45 +0200206endef
207define LINUX_INSTALL_DTB
Peter Korsgaard3cab8aa2013-04-14 19:31:30 +0200208 # dtbs moved from arch/<ARCH>/boot to arch/<ARCH>/boot/dts since 3.8-rc1
Peter Korsgaardef347052012-12-21 09:07:45 +0100209 cp $(addprefix \
210 $(KERNEL_ARCH_PATH)/boot/$(if $(wildcard \
211 $(addprefix $(KERNEL_ARCH_PATH)/boot/dts/,$(KERNEL_DTBS))),dts/),$(KERNEL_DTBS)) \
Maxime Riparddd1aa622012-12-19 22:48:09 +0000212 $(BINARIES_DIR)/
Maxime Ripard69fc4972012-07-30 14:32:45 +0200213endef
Maxime Ripard88d350c2013-02-14 04:27:54 +0000214define LINUX_INSTALL_DTB_TARGET
Peter Korsgaard3cab8aa2013-04-14 19:31:30 +0200215 # dtbs moved from arch/<ARCH>/boot to arch/<ARCH>/boot/dts since 3.8-rc1
Maxime Ripard88d350c2013-02-14 04:27:54 +0000216 cp $(addprefix \
217 $(KERNEL_ARCH_PATH)/boot/$(if $(wildcard \
218 $(addprefix $(KERNEL_ARCH_PATH)/boot/dts/,$(KERNEL_DTBS))),dts/),$(KERNEL_DTBS)) \
219 $(TARGET_DIR)/boot/
220endef
Maxime Ripard69fc4972012-07-30 14:32:45 +0200221endif
Maxime Ripard978928e2012-07-30 14:32:47 +0200222endif
223
Arnout Vandecappelle (Essensium/Mind)a1cfe202013-01-08 11:23:56 +0000224ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y)
225# dtbs moved from arch/$ARCH/boot to arch/$ARCH/boot/dts since 3.8-rc1
226define LINUX_APPEND_DTB
227 if [ -e $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb ]; then \
228 cat $(KERNEL_ARCH_PATH)/boot/$(KERNEL_DTS_NAME).dtb; \
229 else \
230 cat $(KERNEL_ARCH_PATH)/boot/dts/$(KERNEL_DTS_NAME).dtb; \
231 fi >> $(KERNEL_ARCH_PATH)/boot/zImage
232endef
Maxime Ripard978928e2012-07-30 14:32:47 +0200233ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y)
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200234# We need to generate a new u-boot image that takes into
235# account the extra-size added by the device tree at the end
236# of the image. To do so, we first need to retrieve both load
237# address and entry point for the kernel from the already
238# generate uboot image before using mkimage -l.
Arnout Vandecappelle13ae0072013-11-07 00:12:35 +0100239LINUX_APPEND_DTB += $(sep) MKIMAGE_ARGS=`$(MKIMAGE) -l $(LINUX_IMAGE_PATH) |\
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200240 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 +0100241 $(MKIMAGE) -A $(MKIMAGE_ARCH) -O linux \
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200242 -T kernel -C none $${MKIMAGE_ARGS} \
243 -d $(KERNEL_ARCH_PATH)/boot/zImage $(LINUX_IMAGE_PATH);
Arnout Vandecappelle (Essensium/Mind)a1cfe202013-01-08 11:23:56 +0000244endif
Maxime Ripard978928e2012-07-30 14:32:47 +0200245endif
Maxime Ripard69fc4972012-07-30 14:32:45 +0200246
Thomas Petazzoni4944e8c2010-06-13 19:18:34 +0200247# Compilation. We make sure the kernel gets rebuilt when the
248# configuration has changed.
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200249define LINUX_BUILD_CMDS
Maxime Ripard69fc4972012-07-30 14:32:45 +0200250 $(if $(BR2_LINUX_KERNEL_USE_CUSTOM_DTS),
251 cp $(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH) $(KERNEL_ARCH_PATH)/boot/dts/)
Maxime Ripardae86a3c2013-06-07 15:21:43 +0200252 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_NAME)
Peter Korsgaardce03b892011-07-07 23:40:09 +0200253 @if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200254 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) modules ; \
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200255 fi
Maxime Ripard69fc4972012-07-30 14:32:45 +0200256 $(LINUX_BUILD_DTB)
Maxime Ripard978928e2012-07-30 14:32:47 +0200257 $(LINUX_APPEND_DTB)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200258endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200259
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200260
Thomas Petazzonieff25f42011-07-05 21:53:54 +0200261ifeq ($(BR2_LINUX_KERNEL_INSTALL_TARGET),y)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200262define LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200263 install -m 0644 -D $(LINUX_IMAGE_PATH) $(TARGET_DIR)/boot/$(LINUX_IMAGE_NAME)
Maxime Ripard88d350c2013-02-14 04:27:54 +0000264 $(LINUX_INSTALL_DTB_TARGET)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200265endef
Thomas Petazzonieff25f42011-07-05 21:53:54 +0200266endif
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200267
Thomas De Schampheleire707d44d2012-05-15 08:18:25 +0000268
269define LINUX_INSTALL_HOST_TOOLS
270 # Installing dtc (device tree compiler) as host tool, if selected
271 if grep -q "CONFIG_DTC=y" $(@D)/.config; then \
272 $(INSTALL) -D -m 0755 $(@D)/scripts/dtc/dtc $(HOST_DIR)/usr/bin/dtc ; \
273 fi
274endef
275
276
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200277define LINUX_INSTALL_IMAGES_CMDS
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200278 cp $(LINUX_IMAGE_PATH) $(BINARIES_DIR)
Reuben Dowle23553542013-03-27 23:01:15 +0000279 $(LINUX_INSTALL_DTB)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200280endef
281
282define LINUX_INSTALL_TARGET_CMDS
283 $(LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET)
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200284 # Install modules and remove symbolic links pointing to build
285 # directories, not relevant on the target
Peter Korsgaardce03b892011-07-07 23:40:09 +0200286 @if grep -q "CONFIG_MODULES=y" $(@D)/.config; then \
Peter Korsgaard3f817232013-09-11 13:21:53 +0200287 $(TARGET_MAKE_ENV) $(MAKE1) $(LINUX_MAKE_FLAGS) -C $(@D) modules_install; \
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200288 rm -f $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/build ; \
289 rm -f $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/source ; \
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200290 fi
Thomas De Schampheleire707d44d2012-05-15 08:18:25 +0000291 $(LINUX_INSTALL_HOST_TOOLS)
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200292endef
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200293
Jérôme Pouiller741cbcc2013-09-03 10:45:41 +0200294include $(sort $(wildcard linux/linux-ext-*.mk))
Thomas De Schampheleire3011d232011-09-17 22:22:51 +0200295
Arnout Vandecappelle (Essensium/Mind)e1502eb2012-07-03 00:07:32 +0200296$(eval $(generic-package))
Thomas Petazzoni487e21c2010-04-03 18:46:46 +0200297
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000298ifeq ($(BR2_LINUX_KERNEL),y)
299linux-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 +0200300 $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) \
Peter Korsgaardc1ce30f2010-12-27 22:50:18 +0100301 $(subst linux-,,$(subst linux26-,,$@))
Thomas Petazzoni9af0ee82011-07-11 22:46:08 +0200302 rm -f $(LINUX_DIR)/.stamp_{built,target_installed,images_installed}
Thomas Petazzoni4944e8c2010-06-13 19:18:34 +0200303
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000304linux-savedefconfig linux26-savedefconfig: dirs linux-configure
Jean-Christophe PLAGNIOL-VILLARDf5777ce2011-08-22 21:28:47 +0200305 $(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) \
306 $(subst linux-,,$(subst linux26-,,$@))
307
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200308ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000309linux-update-config linux26-update-config: linux-configure $(LINUX_DIR)/.config
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200310 cp -f $(LINUX_DIR)/.config $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
311
312linux-update-defconfig linux26-update-defconfig: linux-savedefconfig
313 cp -f $(LINUX_DIR)/defconfig $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)
314else
315linux-update-config linux26-update-config: ;
316linux-update-defconfig linux26-update-defconfig: ;
317endif
Thomas Petazzonif18c5162012-05-04 05:40:53 +0000318endif
Thomas De Schampheleire0900c122011-10-14 16:56:56 +0200319
Arnout Vandecappelle (Essensium/Mind)13a3afc2011-09-06 23:16:09 +0200320# Support for rebuilding the kernel after the cpio archive has
321# been generated in $(BINARIES_DIR)/rootfs.cpio.
322$(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 +0200323 @$(call MESSAGE,"Rebuilding kernel with initramfs")
Thomas Petazzonif5079212010-06-13 19:19:38 +0200324 # Build the kernel.
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200325 $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_NAME)
Nathan Ford1ac04c32013-07-31 11:47:36 -0400326 $(LINUX_APPEND_DTB)
Thomas Petazzonif5079212010-06-13 19:19:38 +0200327 # Copy the kernel image to its final destination
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200328 cp $(LINUX_IMAGE_PATH) $(BINARIES_DIR)
Stephan Hoffmannaaed42d2012-03-17 10:46:55 +0100329 # If there is a .ub file copy it to the final destination
Markus Kaindlc9ccdf82012-03-21 02:19:04 +0100330 test ! -f $(LINUX_IMAGE_PATH).ub || cp $(LINUX_IMAGE_PATH).ub $(BINARIES_DIR)
Thomas Petazzonif5079212010-06-13 19:19:38 +0200331 $(Q)touch $@
332
333# The initramfs building code must make sure this target gets called
334# after it generated the initramfs list of files.
Thomas Petazzoniaf526612011-07-11 22:46:07 +0200335linux-rebuild-with-initramfs linux26-rebuild-with-initramfs: $(LINUX_DIR)/.stamp_initramfs_rebuilt
Thomas Petazzonif5079212010-06-13 19:19:38 +0200336
Thomas Petazzoniaf5dc832010-07-29 15:40:28 +0200337# Checks to give errors that the user can understand
Peter Korsgaard3e5e39a2010-09-28 14:43:25 +0200338ifeq ($(filter source,$(MAKECMDGOALS)),)
Thomas Petazzoniaf5dc832010-07-29 15:40:28 +0200339ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
340ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG)),)
341$(error No kernel defconfig name specified, check your BR2_LINUX_KERNEL_DEFCONFIG setting)
342endif
343endif
344
345ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
346ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)),)
347$(error No kernel configuration file specified, check your BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE setting)
348endif
Peter Korsgaard3e5e39a2010-09-28 14:43:25 +0200349endif
350
351endif