From: Romain Naour <romain.naour@openwide.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 1/2 v9] package/linux-backports: new package
Date: Sat, 25 Jul 2015 12:03:20 +0200 [thread overview]
Message-ID: <55B35EE8.4000801@openwide.fr> (raw)
In-Reply-To: <287b3a18ad2387f79e001939f1f3afdb184a4cf9.1437688336.git.yann.morin.1998@free.fr>
Hi Yann, all
Le 23/07/2015 23:55, Yann E. MORIN a ?crit :
> From: Petr Vorel <petr.vorel@gmail.com>
>
> Backports provide drivers released on newer kernels backported for usage
> on older kernels.
>
> There are two versions of linux-backports: one that supports Linux
> kernels >= 3.0 and one supports even older kernels. We're only packaging
> the version that supports >= 3.0.
>
> linux-backports needs to have access to the kernel's .config to extract
> information it reintroduces as blind options in generated Kconfig
> snippets for its own menuconfig. However, Buildroot offers no way to
> express this kind of dependency.
>
> So we need to hand-write a dependency from linux-backports' own .config
> to linux' .config .
>
> Since linux.mk has not already been sourced by the time we source
> linux-backports.mk, we are missing the definition for LINUX_DIR, so we
> can not use it our rule.
>
> Fortunately, make provides so-called "secondary expansion", by which
> rules which dependencies include a $$-dereferenced variable wil lbe
will be
> re-evaluated after all the rest of the Makefiles have been parsed.
>
> So, we use that secondary expansion to post-pone evaluation of that
> dependency so we can use LINUX_DIR.
>
> Note: reconstructing LINUX_DIR by hand does not work, because of the
> custom archives, git tree, or override-srcdir.
>
> Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
> Cc: Arnout Vandecappelle <arnout@mind.be>
> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
>
I've only tested linux-backports package with patch 2/2.
Reviewed-by: Romain Naour <romain.naour@openwide.fr>
Best regards,
Romain
> ---
> Changes v8 -> v9:
> - better depend on the Linux .config (Thomas)
>
> Changes v7 -> v8: (Yann)
> - fix option ordering and prompts in Config.in
> - drop editors, only menuconfig is available
> - add licensing information
> - bump to 4.1.1-1, drop 4.0.1-1 patch
> - move custom error message before call to kconfig-package
> - use $(BR_BUILDING) instead of custom, wrong test on 'make source'
> - drop intermediate variable to set LINUX_BACKPORTS_KCONFIG_FILE
> - qstrip all variables from Config.in
> - fix dependencies (tricky, needs kernel to be configured)
> - check kernel is >= 3.0
>
> Changes v6->v7:
> * Bump version to lastest stable 4.0.1-1.
> * Update to current version of kconfig-package.
> * Add option to specify config fragments.
> * Include upstream patch to fix build error.
>
> Changes v5->v6:
> Added changes by Arnout Vandecappelle in Mon Apr 20 21:46:34 UTC 2015:
> * linux-backports.mk: $(LINUX_BACKPORTS_KCONFIG_FILE): linux
> this doesn't help: we'd need to use:
> LINUX_BACKPORTS_KCONFIG_FILE := $(LINUX_BACKPORTS_DIR)/defconfigs/$(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG))
> but then we don't get value for $(LINUX_BACKPORTS_DIR) nor $(@D).
> * linux-backports.mk: LINUX_BACKPORTS_PATCH_DEPENDENCIES = linux
> This also does not help, it does linux extracting, patching, but we
> need also configuring. We'd need something like
> LINUX_BACKPORTS_CONFIGURE_DEPENDENCIES to be implemented.
> * Config.in: info about support from kernel 3.0.
> * Config.in: help text wrapped to 72 columns.
>
> Changes v4->v5:
> * Added changes made by Thomas Petazzoni in Sun, 19 Apr 2015 11:03:26 +0200.
>
> Changes v3->v4:
> * Define LINUX_BACKPORTS_MAKE_ENV instead of LINUX_BACKPORTS_MAKE_OPTS, remove TARGET_MAKE_ENV from it.
> * Add nconfig to LINUX_BACKPORTS_KCONFIG_EDITORS.
> * Clean formating of build commands.
> ---
> package/Config.in | 1 +
> package/linux-backports/Config.in | 52 +++++++++++++++++
> package/linux-backports/linux-backports.hash | 2 +
> package/linux-backports/linux-backports.mk | 87 ++++++++++++++++++++++++++++
> 4 files changed, 142 insertions(+)
> create mode 100644 package/linux-backports/Config.in
> create mode 100644 package/linux-backports/linux-backports.hash
> create mode 100644 package/linux-backports/linux-backports.mk
>
> diff --git a/package/Config.in b/package/Config.in
> index cfa7512..fb4df5e 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 0000000..e858a45
> --- /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 0000000..0d41067
> --- /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 0000000..e4ac9f4
> --- /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 $(@)
>
next prev parent reply other threads:[~2015-07-25 10:03 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-23 21:55 [Buildroot] [PATCH 0/2 v9] linux-backports: new package (branch yem/linux-backports) Yann E. MORIN
2015-07-23 21:55 ` [Buildroot] [PATCH 1/2 v9] package/linux-backports: new package Yann E. MORIN
2015-07-25 10:03 ` Romain Naour [this message]
2015-07-23 21:55 ` [Buildroot] [PATCH 2/2 v9] package/linux-backports: switch to using the kernel-module infra Yann E. MORIN
2015-07-25 10:13 ` Romain Naour
2015-07-26 13:43 ` [Buildroot] [PATCH 0/2 v9] linux-backports: new package (branch yem/linux-backports) Thomas Petazzoni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55B35EE8.4000801@openwide.fr \
--to=romain.naour@openwide.fr \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox