diff --git a/package/Config.in b/package/Config.in index 070ec6ae93..2697e5625c 100644 --- a/package/Config.in +++ b/package/Config.in @@ -372,6 +372,7 @@ endif source "package/kbd/Config.in" source "package/lcdproc/Config.in" source "package/libump/Config.in" + source "package/linux-backports/Config.in" source "package/lirc-tools/Config.in" source "package/lm-sensors/Config.in" source "package/lshw/Config.in" diff --git a/package/linux-backports/Config.in b/package/linux-backports/Config.in new file mode 100644 index 0000000000..e858a45abc --- /dev/null +++ b/package/linux-backports/Config.in @@ -0,0 +1,52 @@ +comment "linux-backports needs a Linux kernel to be built" + depends on !BR2_LINUX_KERNEL + +config BR2_PACKAGE_LINUX_BACKPORTS + bool "linux-backports" + depends on BR2_LINUX_KERNEL + help + The linux-backports package includes many Linux drivers from + recent kernels, backported to older ones. + + This version of linux-backports supports kernels starting from 3.0. + + https://backports.wiki.kernel.org + +if BR2_PACKAGE_LINUX_BACKPORTS + +choice + prompt "Linux kernel driver backports configuration" + default BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG + +config BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG + bool "Using an in-tree defconfig file" + +config BR2_PACKAGE_LINUX_BACKPORTS_USE_CUSTOM_CONFIG + bool "Using a custom (def)config file" + +endchoice + +config BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG + string "Defconfig name" + depends on BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG + help + Name of the backports defconfig file to use, without the + leading defconfig-. The defconfig is located in defconfigs/ + directory in the backports tree. + +config BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE + string "Configuration file path" + depends on BR2_PACKAGE_LINUX_BACKPORTS_USE_CUSTOM_CONFIG + help + Path to the backports configuration file + + Note: this can be a defconfig file or a complete .config file, + which can later be saved back with make linux-update-(def)config. + +config BR2_PACKAGE_LINUX_BACKPORTS_CONFIG_FRAGMENT_FILES + string "Additional configuration fragment files" + help + A space-separated list of configuration fragment files, that + will be merged to the main linux-backports configuration file. + +endif # BR2_PACKAGE_LINUX_BACKPORTS diff --git a/package/linux-backports/linux-backports.hash b/package/linux-backports/linux-backports.hash new file mode 100644 index 0000000000..0d4106781d --- /dev/null +++ b/package/linux-backports/linux-backports.hash @@ -0,0 +1,2 @@ +# From: https://www.kernel.org/pub/linux/kernel/projects/backports/stable/v4.1.1/sha256sums.asc +sha256 7fca160665b801796ce50def18f2fd6def1c4452290e93ec5332444fb2021bd6 backports-4.1.1-1.tar.xz diff --git a/package/linux-backports/linux-backports.mk b/package/linux-backports/linux-backports.mk new file mode 100644 index 0000000000..e4ac9f4cf7 --- /dev/null +++ b/package/linux-backports/linux-backports.mk @@ -0,0 +1,87 @@ +################################################################################ +# +# linux-backports +# +################################################################################ + +LINUX_BACKPORTS_VERSION_MAJOR = 4.1.1 +LINUX_BACKPORTS_VERSION = $(LINUX_BACKPORTS_VERSION_MAJOR)-1 +LINUX_BACKPORTS_SOURCE = backports-$(LINUX_BACKPORTS_VERSION).tar.xz +LINUX_BACKPORTS_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/projects/backports/stable/v$(LINUX_BACKPORTS_VERSION_MAJOR) +LINUX_BACKPORTS_LICENSE = GPLv2 +LINUX_BACKPORTS_LICENSE_FILES = COPYING + +LINUX_BACKPORTS_DEPENDENCIES = linux + +LINUX_BACKPORTS_MAKE_OPTS = \ + $(LINUX_MAKE_FLAGS) \ + KLIB_BUILD=$(LINUX_DIR) \ + KLIB=$(TARGET_DIR) + +ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG),y) +LINUX_BACKPORTS_KCONFIG_FILE = $(LINUX_BACKPORTS_DIR)/defconfigs/$(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG)) +else ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_CUSTOM_CONFIG),y) +LINUX_BACKPORTS_KCONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE)) +endif + +define LINUX_BACKPORTS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_BACKPORTS_MAKE_OPTS) -C $(@D) +endef + +define LINUX_BACKPORTS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(LINUX_BACKPORTS_MAKE_OPTS) \ + -C $(LINUX_DIR) M=$(@D) \ + INSTALL_MOD_DIR=backports \ + modules_install +endef + +LINUX_BACKPORTS_KCONFIG_FRAGMENT_FILES = $(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_CONFIG_FRAGMENT_FILES)) +LINUX_BACKPORTS_KCONFIG_OPTS = $(LINUX_BACKPORTS_MAKE_OPTS) + +# Checks to give errors that the user can understand +ifeq ($(BR_BUILDING),y) + +ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG),y) +ifeq ($(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG)),) +$(error No linux-backports defconfig name specified, check your BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG setting) +endif +endif + +ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_CUSTOM_CONFIG),y) +ifeq ($(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE)),) +$(error No linux-backports configuration file specified, check your BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE setting) +endif +endif + +endif # BR_BUILDING + +$(eval $(kconfig-package)) + +# linux-backports' own .config file needs options from the kernel's own +# .config file. The dependencies handling in the infrastructure does not +# allow to express this kind of dependencies. Besides, linux.mk might +# not have been parsed yet, so the Linux build dir LINUX_DIR is not yet +# known. Thus, we use a "secondary expansion" so the rule is re-evaluated +# after all Makefiles are parsed, and thus at that time we will have the +# LINUX_DIR variable set to the proper value. +# +# Furthermore, we want to check the kernel version, since linux-backports +# only supports kernels >= 3.0. To avoid overriding linux-backports' +# .config rule defined in the kconfig-package infra, we use an +# intermediate stamp-file. +# +# Finally, it must also come after the call to kconfig-package, so we get +# LINUX_BACKPORTS_DIR properly defined (because the target part of the +# rule is not re-evaluated). +# +$(LINUX_BACKPORTS_DIR)/.config: $(LINUX_BACKPORTS_DIR)/.stamp_check_kernel_version + +.SECONDEXPANSION: +$(LINUX_BACKPORTS_DIR)/.stamp_check_kernel_version: $$(LINUX_DIR)/.config + $(Q)LINUX_VERSION_PROBED=$(LINUX_VERSION_PROBED); \ + if [ $${LINUX_VERSION_PROBED%%.*} -lt 3 ]; then \ + printf "Linux version '%s' is too old for linux-backports (needs 3.0 or later)\n" \ + "$${LINUX_VERSION_PROBED}"; \ + exit 1; \ + fi + $(Q)touch $(@)