Add support for kernel config fragments
Extend functionality of -C command-line switch to support kernel
fragments. Kernel fragments are sets of config variables that
override main kernel config values. They can be used if only
a relatively minor variation of the main config is required.
Multiple fragments can be specified after main config name
in a -C switch value separated by a coma.
Change-Id: Ia91de0680cba35f258340504d1b71292a33be18f
Reviewed-on: https://cos-review.googlesource.com/c/cos/tools/+/32380
Cloud-Build: GCB Service account <228075978874@cloudbuild.gserviceaccount.com>
Reviewed-by: Meena Shanmugam <meenashanmugam@google.com>
Tested-by: Oleksandr Tymoshenko <ovt@google.com>
diff --git a/src/cmd/cos_kernel_devenv/README.md b/src/cmd/cos_kernel_devenv/README.md
index 01df10b..b6d156d 100644
--- a/src/cmd/cos_kernel_devenv/README.md
+++ b/src/cmd/cos_kernel_devenv/README.md
@@ -88,7 +88,7 @@
```
Usage: /devenv.sh [-k | -m | -i] [-Hcd] [-A <x86_64|arm64>]
- [-C <kernelconfig>] [-O <objdir>]
+ [-C <kernelconfig>[,fragment1.config,...]] [-O <objdir>]
[-B <build> -b <board> | -R <release> | -G <bucket>]
[-t <toolchain_version>] [VAR=value ...] [target ...]
@@ -99,7 +99,9 @@
build number developer can specify the branch name
to use the latest build off that branch.
Example: main-R93, release-R89. Requires -b option.
- -C <config> kernel config target. Example: lakitu_defconfig
+ -C <configs> kernel configs target. Example: lakitu_defconfig.
+ It's also possible to specify main config and fragments
+ separated by coma, i.e.: lakitu_defconfig,google/xfstest.config
-G <bucket> seed the toolchain and kernel headers from the custom
GCS bucket <bucket>. Directory structure needs to conform
to the COS standard.
diff --git a/src/cmd/cos_kernel_devenv/devenv.sh b/src/cmd/cos_kernel_devenv/devenv.sh
index 75bbcd8..ba62b40 100755
--- a/src/cmd/cos_kernel_devenv/devenv.sh
+++ b/src/cmd/cos_kernel_devenv/devenv.sh
@@ -18,7 +18,7 @@
readonly RETCODE_ERROR=1
RELEASE_ID="" # Loaded from host during execution
BUILD_DIR="" # based on RELEASE_ID
-KERNEL_CONFIG="defconfig"
+KERNEL_CONFIGS="defconfig"
BUILD_DEBUG_PACKAGE="false"
BUILD_HEADERS_PACKAGE="false"
CLEAN_BEFORE_BUILD="false"
@@ -380,7 +380,7 @@
if [[ "${CLEAN_BEFORE_BUILD}" = "true" ]]; then
kmake "$@" mrproper
fi
- kmake "$@" "${KERNEL_CONFIG}"
+ kmake "$@" "${KERNEL_CONFIGS[@]}"
local -r version=$(kmake "$@" -s kernelrelease)
kmake "$@" "${image_target}" modules
INSTALL_MOD_PATH="${tmproot_dir}" kmake "$@" modules_install
@@ -427,7 +427,7 @@
usage() {
cat 1>&2 <<__EOUSAGE__
Usage: $0 [-k | -m | -i] [-cdH] [-A <x86_64|arm64>]
- [-C <kernelconfig>] [-O <objdir>]
+ [-C <kernelconfig>[,fragment1.config,...]] [-O <objdir>]
[-B <build> -b <board> | -R <release> | -G <bucket>]
[-t <toolchain_version>] [VAR=value ...] [target ...]
@@ -438,7 +438,9 @@
build number developer can specify the branch name
to use the latest build off that branch.
Example: main-R93, release-R89. Requires -b option.
- -C <config> kernel config target. Example: lakitu_defconfig
+ -C <configs> kernel configs target. Example: lakitu_defconfig.
+ It's also possible to specify main config and fragments
+ separated by coma, i.e.: lakitu_defconfig,google/xfstest.config
-G <bucket> seed the toolchain and kernel headers from the custom
GCS bucket <bucket>. Directory structure needs to conform
to the COS standard.
@@ -477,7 +479,7 @@
case "${o}" in
A) KERNEL_ARCH=${OPTARG} ;;
B) BUILD_ID=${OPTARG} ;;
- C) KERNEL_CONFIG=${OPTARG} ;;
+ C) KERNEL_CONFIGS=(${OPTARG//,/ }) ;;
G) custom_bucket=${OPTARG} ;;
H) BUILD_HEADERS_PACKAGE="true" ;;
O) KBUILD_OUTPUT=${OPTARG} ;;