buildrootschalter/linux/linux.mk
Thomas Petazzoni ee3f319249 linux: don't force no initramfs
When initramfs was not selected as a root filesystem, we forcefully
disabled the initramfs in the kernel configuration.

However, it prevents an user from manually managing its initramfs, as
we override the option he has set in his kernel configuration
file. There's no real reason to do so: when initramfs is not selected
as the root filesystem, just don't touch initramfs related options in
the kernel configuration.

Problem reported by Sergey Naumov <sknaumov@gmail.com>.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
2010-09-15 21:17:35 +02:00

172 lines
6.6 KiB
Makefile

###############################################################################
#
# Linux kernel 2.6 target
#
###############################################################################
LINUX26_VERSION=$(call qstrip,$(BR2_LINUX_KERNEL_VERSION))
# Compute LINUX26_SOURCE and LINUX26_SITE from the configuration
ifeq ($(LINUX26_VERSION),custom)
LINUX26_TARBALL:=$(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION))
LINUX26_SITE:=$(dir $(LINUX26_TARBALL))
LINUX26_SOURCE:=$(notdir $(LINUX26_TARBALL))
else
LINUX26_SOURCE:=linux-$(LINUX26_VERSION).tar.bz2
LINUX26_SITE:=$(BR2_KERNEL_MIRROR)/linux/kernel/v2.6/
endif
LINUX26_DIR:=$(BUILD_DIR)/linux-$(LINUX26_VERSION)
LINUX26_PATCH=$(call qstrip,$(BR2_LINUX_KERNEL_PATCH))
LINUX26_MAKE_FLAGS = \
HOSTCC="$(HOSTCC)" \
HOSTCFLAGS="$(HOSTCFLAGS)" \
ARCH=$(KERNEL_ARCH) \
INSTALL_MOD_PATH=$(TARGET_DIR) \
CROSS_COMPILE=$(TARGET_CROSS) \
LDFLAGS="$(TARGET_LDFLAGS)" \
LZMA="$(LZMA)"
# Get the real Linux version, which tells us where kernel modules are
# going to be installed in the target filesystem.
LINUX26_VERSION_PROBED = $(shell $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) --no-print-directory -s kernelrelease)
ifeq ($(BR2_LINUX_KERNEL_UIMAGE),y)
LINUX26_IMAGE_NAME=uImage
LINUX26_DEPENDENCIES+=$(MKIMAGE)
else ifeq ($(BR2_LINUX_KERNEL_BZIMAGE),y)
LINUX26_IMAGE_NAME=bzImage
else ifeq ($(BR2_LINUX_KERNEL_ZIMAGE),y)
LINUX26_IMAGE_NAME=zImage
else ifeq ($(BR2_LINUX_KERNEL_VMLINUX),y)
LINUX26_IMAGE_NAME=vmlinux.bin
endif
LINUX26_IMAGE_PATH=$(LINUX26_DIR)/arch/$(KERNEL_ARCH)/boot/$(LINUX26_IMAGE_NAME)
# Download
$(LINUX26_DIR)/.stamp_downloaded:
@$(call MESSAGE,"Downloading kernel")
$(call DOWNLOAD,$(LINUX26_SITE),$(LINUX26_SOURCE))
ifneq ($(filter ftp://% http://%,$(LINUX26_PATCH)),)
$(call DOWNLOAD,$(dir $(LINUX26_PATCH)),$(notdir $(LINUX26_PATCH)))
endif
mkdir -p $(@D)
touch $@
# Extraction
$(LINUX26_DIR)/.stamp_extracted: $(LINUX26_DIR)/.stamp_downloaded
@$(call MESSAGE,"Extracting kernel")
mkdir -p $(@D)
$(Q)$(INFLATE$(suffix $(LINUX26_SOURCE))) $(DL_DIR)/$(LINUX26_SOURCE) | \
tar -C $(@D) $(TAR_STRIP_COMPONENTS)=1 $(TAR_OPTIONS) -
$(Q)touch $@
# Patch
$(LINUX26_DIR)/.stamp_patched: $(LINUX26_DIR)/.stamp_extracted
@$(call MESSAGE,"Patching kernel")
ifneq ($(LINUX26_PATCH),)
ifneq ($(filter ftp://% http://%,$(LINUX26_PATCH)),)
toolchain/patch-kernel.sh $(@D) $(DL_DIR) $(notdir $(LINUX26_PATCH))
else ifeq ($(shell test -d $(LINUX26_PATCH) && echo "dir"),dir)
toolchain/patch-kernel.sh $(@D) $(LINUX26_PATCH) linux-\*.patch
else
toolchain/patch-kernel.sh $(@D) $(dir $(LINUX26_PATCH)) $(notdir $(LINUX26_PATCH))
endif
endif
$(Q)touch $@
# Configuration
$(LINUX26_DIR)/.stamp_configured: $(LINUX26_DIR)/.stamp_patched
@$(call MESSAGE,"Configuring kernel")
ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
$(TARGET_MAKE_ENV) $(MAKE1) $(LINUX26_MAKE_FLAGS) -C $(@D) $(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG))_defconfig
else ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
cp $(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE) $(@D)/.config
endif
ifeq ($(BR2_ARM_EABI),y)
$(call KCONFIG_ENABLE_OPT,CONFIG_AEABI,$(@D)/.config)
else
$(call KCONFIG_DISABLE_OPT,CONFIG_AEABI,$(@D)/.config)
endif
ifeq ($(BR2_INET_IPV6),y)
$(call KCONFIG_ENABLE_OPT,CONFIG_IPV6,$(@D)/.config)
else
$(call KCONFIG_DISABLE_OPT,CONFIG_IPV6,$(@D)/.config)
endif
ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
# As the kernel gets compiled before root filesystems are
# built, we create a fake initramfs file list. It'll be
# replaced later by the real list, and the kernel will be
# rebuilt using the linux26-rebuild-with-initramfs target.
touch $(BINARIES_DIR)/rootfs.initramfs
$(call KCONFIG_ENABLE_OPT,CONFIG_BLK_DEV_INITRD,$(@D)/.config)
$(call KCONFIG_SET_OPT,CONFIG_INITRAMFS_SOURCE,\"$(BINARIES_DIR)/rootfs.initramfs\",$(@D)/.config)
$(call KCONFIG_ENABLE_OPT,CONFIG_INITRAMFS_COMPRESSION_GZIP,$(@D)/.config)
endif
$(TARGET_MAKE_ENV) $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(@D) oldconfig
$(Q)touch $@
# Compilation. We make sure the kernel gets rebuilt when the
# configuration has changed.
$(LINUX26_DIR)/.stamp_compiled: $(LINUX26_DIR)/.stamp_configured $(LINUX26_DIR)/.config
@$(call MESSAGE,"Compiling kernel")
$(TARGET_MAKE_ENV) $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(@D) $(LINUX26_IMAGE_NAME)
@if [ $(shell grep -c "CONFIG_MODULES=y" $(LINUX26_DIR)/.config) != 0 ] ; then \
$(TARGET_MAKE_ENV) $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(@D) modules ; \
fi
$(Q)touch $@
# Installation
$(LINUX26_DIR)/.stamp_installed: $(LINUX26_DIR)/.stamp_compiled
@$(call MESSAGE,"Installing kernel")
cp $(LINUX26_IMAGE_PATH) $(BINARIES_DIR)
# Install modules and remove symbolic links pointing to build
# directories, not relevant on the target
@if [ $(shell grep -c "CONFIG_MODULES=y" $(LINUX26_DIR)/.config) != 0 ] ; then \
$(TARGET_MAKE_ENV) $(MAKE1) $(LINUX26_MAKE_FLAGS) -C $(@D) \
INSTALL_MOD_PATH=$(TARGET_DIR) modules_install ; \
rm -f $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION_PROBED)/build ; \
rm -f $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION_PROBED)/source ; \
fi
$(Q)touch $@
linux26: host-module-init-tools $(LINUX26_DEPENDENCIES) $(LINUX26_DIR)/.stamp_installed
linux26-menuconfig linux26-xconfig linux26-gconfig: host-sed dirs $(LINUX26_DIR)/.stamp_configured
$(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) $(subst linux26-,,$@)
# Support for rebuilding the kernel after the initramfs file list has
# been generated in $(BINARIES_DIR)/rootfs.initramfs.
$(LINUX26_DIR)/.stamp_initramfs_rebuilt: $(LINUX26_DIR)/.stamp_installed $(BINARIES_DIR)/rootfs.initramfs
@$(call MESSAGE,"Rebuilding kernel with initramfs")
# Remove the previously generated initramfs which was empty,
# to make sure the kernel will actually regenerate it.
$(RM) -f $(@D)/usr/initramfs_data.cpio.*
# Build the kernel.
$(TARGET_MAKE_ENV) $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(@D) $(LINUX26_IMAGE_NAME)
# Copy the kernel image to its final destination
cp $(LINUX26_IMAGE_PATH) $(BINARIES_DIR)
$(Q)touch $@
# The initramfs building code must make sure this target gets called
# after it generated the initramfs list of files.
linux26-rebuild-with-initramfs: $(LINUX26_DIR)/.stamp_initramfs_rebuilt
ifeq ($(BR2_LINUX_KERNEL),y)
TARGETS+=linux26
endif
# Checks to give errors that the user can understand
ifeq ($(BR2_LINUX_KERNEL_USE_DEFCONFIG),y)
ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_DEFCONFIG)),)
$(error No kernel defconfig name specified, check your BR2_LINUX_KERNEL_DEFCONFIG setting)
endif
endif
ifeq ($(BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG),y)
ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE)),)
$(error No kernel configuration file specified, check your BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE setting)
endif
endif