From d28cd9900a58a902b1bf53404a250dfb345b2e96 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 23 Dec 2016 15:12:27 +0100 Subject: [PATCH] modprobe-small: make applets individually selectable Signed-off-by: Denys Vlasenko --- include/applets.h.sh | 3 +-- make_single_applets.sh | 7 ++++++- modutils/depmod.c | 7 ++++--- modutils/insmod.c | 5 +++-- modutils/lsmod.c | 11 ++++++----- modutils/modprobe-small.c | 24 ++++++++++++------------ modutils/modprobe.c | 11 ++++++----- modutils/rmmod.c | 5 +++-- 8 files changed, 41 insertions(+), 32 deletions(-) diff --git a/include/applets.h.sh b/include/applets.h.sh index be8b92404..be117cf84 100755 --- a/include/applets.h.sh +++ b/include/applets.h.sh @@ -4,8 +4,7 @@ # enabling it. Run it after applets.h is generated. # CONFIG_applet names -grep ^IF_ applets.h | grep -v IF_FEATURE_ | sed 's/IF_\([A-Z0-9._-]*\)(.*/\1/' \ -| grep -v MODPROBE_SMALL \ +grep ^IF_ applets.h | grep -v ^IF_FEATURE_ | sed 's/IF_\([A-Z0-9._-]*\)(.*/\1/' \ | sort | uniq \ >applets_APP1 diff --git a/make_single_applets.sh b/make_single_applets.sh index 5b9393e33..6473e4ddd 100755 --- a/make_single_applets.sh +++ b/make_single_applets.sh @@ -14,7 +14,6 @@ apps="` grep ^IF_ include/applets.h \ | grep -v ^IF_FEATURE_ \ | sed 's/IF_\([A-Z0-9._-]*\)(.*/\1/' \ -| grep -v ^MODPROBE_SMALL \ | sort | uniq `" @@ -46,6 +45,11 @@ for app in $apps; do : $((fail++)) echo "Build error for ${app}" mv .config busybox_config_${app} + elif ! grep -q '^#define NUM_APPLETS 1$' include/NUM_APPLETS.h; then + mv busybox busybox_${app} + : $((fail++)) + echo "NUM_APPLETS != 1 for ${app}: `cat include/NUM_APPLETS.h`" + mv .config busybox_config_${app} else mv busybox busybox_${app} rm busybox_make_${app}.log @@ -53,5 +57,6 @@ for app in $apps; do mv .config.SV .config #exit done +touch .config # or else next "make" can be confused echo "Failures: $fail" test $fail = 0 # set exitcode diff --git a/modutils/depmod.c b/modutils/depmod.c index b9347027e..cfa9abb1a 100644 --- a/modutils/depmod.c +++ b/modutils/depmod.c @@ -9,15 +9,16 @@ */ //config:config DEPMOD //config: bool "depmod" -//config: default n -//config: depends on !MODPROBE_SMALL +//config: default y //config: select PLATFORM_LINUX //config: help //config: depmod generates modules.dep (and potentially modules.alias //config: and modules.symbols) that contain dependency information //config: for modprobe. -//applet:IF_DEPMOD(APPLET(depmod, BB_DIR_SBIN, BB_SUID_DROP)) +//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y) +//applet:IF_DEPMOD(IF_NOT_MODPROBE_SMALL(APPLET(depmod, BB_DIR_SBIN, BB_SUID_DROP))) +//kbuild:endif //kbuild:lib-$(CONFIG_DEPMOD) += depmod.o modutils.o diff --git a/modutils/insmod.c b/modutils/insmod.c index 2ebf4beb9..5949fe551 100644 --- a/modutils/insmod.c +++ b/modutils/insmod.c @@ -9,14 +9,15 @@ //config:config INSMOD //config: bool "insmod" //config: default n -//config: depends on !MODPROBE_SMALL //config: select PLATFORM_LINUX //config: help //config: insmod is used to load specified modules in the running kernel. -//applet:IF_INSMOD(APPLET(insmod, BB_DIR_SBIN, BB_SUID_DROP)) +//applet:IF_INSMOD(IF_NOT_MODPROBE_SMALL(APPLET(insmod, BB_DIR_SBIN, BB_SUID_DROP))) +//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y) //kbuild:lib-$(CONFIG_INSMOD) += insmod.o modutils.o +//kbuild:endif #include "libbb.h" #include "modutils.h" diff --git a/modutils/lsmod.c b/modutils/lsmod.c index ee85fb0fb..24589420a 100644 --- a/modutils/lsmod.c +++ b/modutils/lsmod.c @@ -9,25 +9,26 @@ */ //config:config LSMOD //config: bool "lsmod" -//config: default n -//config: depends on !MODPROBE_SMALL +//config: default y //config: select PLATFORM_LINUX //config: help //config: lsmod is used to display a list of loaded modules. //config: //config:config FEATURE_LSMOD_PRETTY_2_6_OUTPUT //config: bool "Pretty output" -//config: default n -//config: depends on LSMOD +//config: default y +//config: depends on LSMOD && !MODPROBE_SMALL //config: select PLATFORM_LINUX //config: help //config: This option makes output format of lsmod adjusted to //config: the format of module-init-tools for Linux kernel 2.6. //config: Increases size somewhat. -//applet:IF_LSMOD(APPLET(lsmod, BB_DIR_SBIN, BB_SUID_DROP)) +//applet:IF_LSMOD(IF_NOT_MODPROBE_SMALL(APPLET(lsmod, BB_DIR_SBIN, BB_SUID_DROP))) +//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y) //kbuild:lib-$(CONFIG_LSMOD) += lsmod.o modutils.o +//kbuild:endif //usage:#if !ENABLE_MODPROBE_SMALL //usage:#define lsmod_trivial_usage diff --git a/modutils/modprobe-small.c b/modutils/modprobe-small.c index e3a349b4e..652ff4dfa 100644 --- a/modutils/modprobe-small.c +++ b/modutils/modprobe-small.c @@ -25,11 +25,11 @@ //config: help //config: Check if the module is already loaded. -//applet:IF_MODPROBE_SMALL(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP)) -//applet:IF_MODPROBE_SMALL(APPLET_ODDNAME(depmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, depmod)) -//applet:IF_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, insmod)) -//applet:IF_MODPROBE_SMALL(APPLET_ODDNAME(lsmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, lsmod)) -//applet:IF_MODPROBE_SMALL(APPLET_ODDNAME(rmmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, rmmod)) +//applet:IF_MODPROBE(IF_MODPROBE_SMALL(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP))) +//applet:IF_DEPMOD(IF_MODPROBE_SMALL(APPLET_ODDNAME(depmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, depmod))) +//applet:IF_INSMOD(IF_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, insmod))) +//applet:IF_LSMOD(IF_MODPROBE_SMALL(APPLET_ODDNAME(lsmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, lsmod))) +//applet:IF_RMMOD(IF_MODPROBE_SMALL(APPLET_ODDNAME(rmmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, rmmod))) //kbuild:lib-$(CONFIG_MODPROBE_SMALL) += modprobe-small.o @@ -930,7 +930,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv) IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(char *options;) /* are we lsmod? -> just dump /proc/modules */ - if ('l' == applet0) { + if (ENABLE_LSMOD && 'l' == applet0) { xprint_and_close_file(xfopen_for_read("/proc/modules")); return EXIT_SUCCESS; } @@ -940,14 +940,14 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv) /* Prevent ugly corner cases with no modules at all */ modinfo = xzalloc(sizeof(modinfo[0])); - if ('i' != applet0) { /* not insmod */ + if (!ENABLE_INSMOD || 'i' != applet0) { /* not insmod */ /* Goto modules directory */ xchdir(CONFIG_DEFAULT_MODULES_DIR); } uname(&uts); /* never fails */ /* depmod? */ - if ('d' == applet0) { + if (ENABLE_DEPMOD && 'd' == applet0) { /* Supported: * -n: print result to stdout * -a: process all modules (default) @@ -986,11 +986,11 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv) argv += optind; /* are we rmmod? -> simulate modprobe -r */ - if ('r' == applet0) { + if (ENABLE_RMMOD && 'r' == applet0) { option_mask32 |= OPT_r; } - if ('i' != applet0) { /* not insmod */ + if (!ENABLE_INSMOD || 'i' != applet0) { /* not insmod */ /* Goto $VERSION directory */ xchdir(uts.release); } @@ -1014,7 +1014,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv) argv[1] = NULL; #endif - if ('i' == applet0) { /* insmod */ + if (ENABLE_INSMOD && 'i' == applet0) { /* insmod */ size_t len; void *map; @@ -1034,7 +1034,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv) } /* Try to load modprobe.dep.bb */ - if ('r' != applet0) { /* not rmmod */ + if (!ENABLE_RMMOD || 'r' != applet0) { /* not rmmod */ load_dep_bb(); } diff --git a/modutils/modprobe.c b/modutils/modprobe.c index d404ef92f..09e3de6c3 100644 --- a/modutils/modprobe.c +++ b/modutils/modprobe.c @@ -9,8 +9,7 @@ */ //config:config MODPROBE //config: bool "modprobe" -//config: default n -//config: depends on !MODPROBE_SMALL +//config: default y //config: select PLATFORM_LINUX //config: help //config: Handle the loading of modules, and their dependencies on a high @@ -18,8 +17,8 @@ //config: //config:config FEATURE_MODPROBE_BLACKLIST //config: bool "Blacklist support" -//config: default n -//config: depends on MODPROBE +//config: default y +//config: depends on MODPROBE && !MODPROBE_SMALL //config: select PLATFORM_LINUX //config: help //config: Say 'y' here to enable support for the 'blacklist' command in @@ -28,9 +27,11 @@ //config: hardware autodetection scripts to load modules like evdev, frame //config: buffer drivers etc. -//applet:IF_MODPROBE(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP)) +//applet:IF_MODPROBE(IF_NOT_MODPROBE_SMALL(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP))) +//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y) //kbuild:lib-$(CONFIG_MODPROBE) += modprobe.o modutils.o +//kbuild:endif #include "libbb.h" #include "modutils.h" diff --git a/modutils/rmmod.c b/modutils/rmmod.c index e0358838a..4c4d50885 100644 --- a/modutils/rmmod.c +++ b/modutils/rmmod.c @@ -10,14 +10,15 @@ //config:config RMMOD //config: bool "rmmod" //config: default n -//config: depends on !MODPROBE_SMALL //config: select PLATFORM_LINUX //config: help //config: rmmod is used to unload specified modules from the kernel. -//applet:IF_RMMOD(APPLET(rmmod, BB_DIR_SBIN, BB_SUID_DROP)) +//applet:IF_RMMOD(IF_NOT_MODPROBE_SMALL(APPLET(rmmod, BB_DIR_SBIN, BB_SUID_DROP))) +//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y) //kbuild:lib-$(CONFIG_RMMOD) += rmmod.o modutils.o +//kbuild:endif //usage:#if !ENABLE_MODPROBE_SMALL //usage:#define rmmod_trivial_usage -- 2.25.1