(These two patches are somewhat related but do not depend on each other and can be applied separately.)
Support -S to use another kernel version (66 bytes) Normally modprobe will use version information from the currently running kernel (similar to `uname -r`). This patch adds a compile-time configuration option to enable the -S switch, which allows specifying a different kernel version. This can be useful when used with the -D option to determine module dependencies when building a new initramfs after a kernel upgrade. function old new delta packed_usage 34776 34812 +36 modprobe_main 946 974 +28 .rodata 103911 103913 +2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 66/0) Total: 66 bytes text data bss dec hex filename 1180482 7435 4984 1192901 1233c5 busybox_old 1180548 7435 4984 1192967 123407 busybox_unstripped
From c724000013e2b185d63b9adf969fe771033d5908 Mon Sep 17 00:00:00 2001 From: Jeff Pohlmeyer <yetanotherg...@gmail.com> Date: Fri, 2 Feb 2024 06:18:52 -0600 Subject: [PATCH] modprobe: Add -S option to use a different kernel version --- modutils/modprobe.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/modutils/modprobe.c b/modutils/modprobe.c index 543f53e99..8bec5ffb0 100644 --- a/modutils/modprobe.c +++ b/modutils/modprobe.c @@ -24,6 +24,17 @@ //config: blacklisted modules. This is useful if you want to prevent your //config: hardware autodetection scripts to load modules like evdev, frame //config: buffer drivers etc. +//config:config FEATURE_MODPROBE_SET_VER +//config: bool "Support -S to use another kernel version (66 bytes)" +//config: default n +//config: depends on MODPROBE && !MODPROBE_SMALL +//config: help +//config: Normally modprobe will use version information from the currently +//config: running kernel (a la `uname -r`). Say 'y' here to enable the -S +//config: option, which will allow specifying a different kernel version. +//config: This can be useful in conjunction with the -D option to determine +//config: module dependencies when building a new initramfs after a kernel +//config: upgrade. //applet:IF_MODPROBE(IF_NOT_MODPROBE_SMALL(APPLET_NOEXEC(modprobe, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))) @@ -110,7 +121,7 @@ //usage: " from the command line\n" //usage: //usage:#define modprobe_trivial_usage -//usage: "[-alrqvsD" IF_FEATURE_MODPROBE_BLACKLIST("b") "]" +//usage: "[-alrqvsD" IF_FEATURE_MODPROBE_BLACKLIST("b") IF_FEATURE_MODPROBE_SET_VER("S:") "]" //usage: " MODULE" IF_FEATURE_CMDLINE_MODULE_OPTIONS(" [SYMBOL=VALUE]...") //usage:#define modprobe_full_usage "\n\n" //usage: " -a Load multiple MODULEs" @@ -123,6 +134,9 @@ //usage: IF_FEATURE_MODPROBE_BLACKLIST( //usage: "\n -b Apply blacklist to module names too" //usage: ) +//usage: IF_FEATURE_MODPROBE_SET_VER( +//usage: "\n -S VERSION Use kernel VERSION" +//usage: ) //usage:#endif /* !ENABLE_MODPROBE_SMALL */ /* Note: usage text doesn't document various 2.4 options @@ -130,7 +144,7 @@ * Note2: -b is always accepted, but if !FEATURE_MODPROBE_BLACKLIST, * it is a no-op. */ -#define MODPROBE_OPTS "alrDb" +#define MODPROBE_OPTS "alrDb" IF_FEATURE_MODPROBE_SET_VER("S:") /* -a and -D _are_ in fact compatible */ #define MODPROBE_COMPLEMENTARY "q-v:v-q:l--arD:r--alD:a--lr:D--rl" //#define MODPROBE_OPTS "acd:lnrt:C:b" @@ -147,6 +161,7 @@ enum { //OPT_CONFIGFILE = (INSMOD_OPT_UNUSED << x), /* C */ OPT_SHOW_DEPS = (INSMOD_OPT_UNUSED << 3), /* D */ OPT_BLACKLIST = (INSMOD_OPT_UNUSED << 4) * ENABLE_FEATURE_MODPROBE_BLACKLIST, + OPT_SET_VER = (INSMOD_OPT_UNUSED << 5) * ENABLE_FEATURE_MODPROBE_SET_VER, }; #if ENABLE_LONG_OPTS static const char modprobe_longopts[] ALIGN1 = @@ -559,18 +574,24 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv) int rc; unsigned opt; struct module_entry *me; + IF_FEATURE_MODPROBE_SET_VER(const char *version;) INIT_G(); opt = getopt32long(argv, "^" INSMOD_OPTS MODPROBE_OPTS "\0" MODPROBE_COMPLEMENTARY, modprobe_longopts INSMOD_ARGS + IF_FEATURE_MODPROBE_SET_VER(, &version) ); argv += optind; /* Goto modules location */ xchdir(CONFIG_DEFAULT_MODULES_DIR); uname(&G.uts); + IF_FEATURE_MODPROBE_SET_VER( + if (opt & OPT_SET_VER) + safe_strncpy(G.uts.release, version, sizeof(G.uts.release)); + ) xchdir(G.uts.release); if (opt & OPT_LIST_ONLY) { -- 2.43.0
_______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox