|
14 | 14 |
|
15 | 15 | #------------------------------------------------------------------------------- |
16 | 16 |
|
17 | | -LINUX_CONFIG ?= conf/kernel/$(LINUX_RELEASE)/linux.$(ONIE_ARCH).config |
| 17 | +# Prefer a version-specific kernel config if a platform ships one (the legacy |
| 18 | +# per-version configs under conf/kernel/<release>/ are kept for the older |
| 19 | +# machine kernels), otherwise fall back to the shared, non-versioned base. |
| 20 | +# olddefconfig (see the .config recipe below) reconciles whichever base to the |
| 21 | +# kernel actually being built, so a kernel bump needs no new committed config. |
| 22 | +LINUX_CONFIG ?= $(firstword $(wildcard conf/kernel/$(LINUX_RELEASE)/linux.$(ONIE_ARCH).config) conf/kernel/linux.$(ONIE_ARCH).config) |
18 | 23 | KERNELDIR = $(MBUILDDIR)/kernel |
19 | 24 | LINUXDIR = $(KERNELDIR)/linux |
20 | 25 |
|
@@ -82,12 +87,25 @@ $(KERNEL_PATCH_STAMP): $(KERNEL_SRCPATCHDIR)/* $(MACHINE_KERNEL_PATCHDIR)/* $(KE |
82 | 87 | $(Q) $(SCRIPTDIR)/apply-patch-series $(KERNEL_PATCHDIR)/series $(LINUXDIR) |
83 | 88 | $(Q) touch $@ |
84 | 89 |
|
85 | | -$(LINUXDIR)/.config : $(LINUX_CONFIG) $(KERNEL_PATCH_STAMP) |
| 90 | +# olddefconfig (below) runs the kernel kconfig, which probes the cross |
| 91 | +# compiler via scripts/Kconfig.include, so the toolchain must already be |
| 92 | +# built. Order-only so a toolchain rebuild does not force a config regen. |
| 93 | +$(LINUXDIR)/.config : $(LINUX_CONFIG) $(KERNEL_PATCH_STAMP) | $(XTOOLS_BUILD_STAMP) |
86 | 94 | $(Q) echo "==== Copying $(LINUX_CONFIG) to $(LINUXDIR)/.config ====" |
87 | 95 | $(Q) cp -v $< $@ |
88 | 96 | # $(Q) cat $(MACHINE_KERNEL_PATCHDIR)/config >> $(LINUXDIR)/.config |
89 | 97 | $(Q) echo "==== Merging patches from $(MACHINE_KERNEL_PATCHDIR)/config to $(LINUXDIR)/.config ====" |
90 | 98 | $(Q) $(LINUXDIR)/scripts/kconfig/merge_config.sh -r -m -O $(LINUXDIR) $(LINUXDIR)/.config $(MACHINE_KERNEL_PATCHDIR)/config |
| 99 | + $(Q) echo "==== Reconciling kernel config to $(LINUX_RELEASE) (olddefconfig) ====" |
| 100 | + $(Q) PATH='$(CROSSBIN):$(PATH)' $(MAKE) -C $(LINUXDIR) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSSPREFIX) olddefconfig |
| 101 | + # Modern kernels resolve CONFIG_MODULE_SIG_KEY relative to the build tree |
| 102 | + # and dropped the MODULE_SIG_KEY_SRCPREFIX mechanism, so rewrite a |
| 103 | + # configured module-signing key to the absolute path of the generated key. |
| 104 | + $(Q) if grep -q '^CONFIG_MODULE_SIG_KEY=' $(LINUXDIR)/.config && [ -n "$(ONIE_MODULE_SIG_KEY_SRCPREFIX)" ]; then \ |
| 105 | + k=$$(sed -n 's/^CONFIG_MODULE_SIG_KEY="\(.*\)"/\1/p' $(LINUXDIR)/.config) ; \ |
| 106 | + sed -i "s|^CONFIG_MODULE_SIG_KEY=.*|CONFIG_MODULE_SIG_KEY=\"$(abspath $(ONIE_MODULE_SIG_KEY_SRCPREFIX))/$$(basename $$k)\"|" $(LINUXDIR)/.config ; \ |
| 107 | + echo "==== Set CONFIG_MODULE_SIG_KEY to $(abspath $(ONIE_MODULE_SIG_KEY_SRCPREFIX))/$$(basename $$k) ====" ; \ |
| 108 | + fi |
91 | 109 |
|
92 | 110 |
|
93 | 111 | # Interactive update. User selects options, or not |
@@ -129,7 +147,6 @@ $(KERNEL_BUILD_STAMP): $(KERNEL_SOURCE_STAMP) $(LINUX_NEW_FILES) $(LINUXDIR)/.co |
129 | 147 | $(MAKE) -C $(LINUXDIR) \ |
130 | 148 | ARCH=$(KERNEL_ARCH) \ |
131 | 149 | CROSS_COMPILE=$(CROSSPREFIX) \ |
132 | | - MODULE_SIG_KEY_SRCPREFIX=$(ONIE_MODULE_SIG_KEY_SRCPREFIX)/ \ |
133 | 150 | $(KERNEL_OLD_GCC_COMPAT) \ |
134 | 151 | V=$(V) \ |
135 | 152 | all |
|
0 commit comments