BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE=$(BR2_EXTERNAL_BAR_42_PATH)/board/<boardname>/kernel.config
----
+===== Additional Linux kernel extensions
+
+Additional Linux kernel extensions (see xref:linux-kernel-ext[]) can
+be added by storing them in the `linux/` directory at the root of a
+br2-external tree.
+
===== Example layout
Here is an example layout using all features of br2-external (the sample
| |$(eval $(toolchain-external-package))
| `----
|
+ |- linux/Config.ext.in
+ | |config BR2_LINUX_KERNEL_EXT_EXAMPLE_DRIVER
+ | | bool "example-external-driver"
+ | | help
+ | | Example external driver
+ | |---
+ |- linux/linux-ext-example-driver.mk
+ |
|- configs/my-board_defconfig
| |BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_BAR_42_PATH)/patches/"
| |BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_BAR_42_PATH)/board/my-board/overlay/"
#
# Note: our package infrastructure uses the full-path of the last-scanned
# Makefile to determine what package we're currently defining, using the
-# last directory component in the path. As such, including other Makefile,
-# like below, before we call one of the *-package macro is usally not
-# working.
+# last directory component in the path. As such, including other Makefiles,
+# like below, before we call one of the *-package macros usually doesn't
+# work.
# However, since the files we include here are in the same directory as
# the current Makefile, we are OK. But this is a hard requirement: files
-# included here *must* be in the same directory!
+# included here *must* either be in this same directory OR within a
+# another directory with the name "linux" (in the BR2_EXTERNAL case).
include $(sort $(wildcard linux/linux-ext-*.mk))
+# Import linux-kernel-extensions from br2-externals
+include $(sort $(wildcard $(foreach ext,$(BR2_EXTERNAL_DIRS), \
+ $(ext)/linux/linux-ext-*.mk)))
+
LINUX_PATCH_DEPENDENCIES += $(foreach ext,$(LINUX_EXTENSIONS),\
$(if $(BR2_LINUX_KERNEL_EXT_$(call UPPERCASE,$(ext))),$(ext)))