toolbox/modprobe: Fallback to /lib/modules/<uname>

Make the module directory optional by reading the kernel release
version. This path is where the kernel installs modules by default.
Similar behaviour can be found in several modprobe implementations.

Bug: 254835242
Change-Id: I61707636705e5b4d9bd8ccf6351e7057eae6bcf5
This commit is contained in:
Vincent Donnefort 2023-01-24 17:39:16 +00:00
parent 545141f405
commit 8320778425

View file

@ -23,8 +23,11 @@
#include <android-base/file.h>
#include <android-base/logging.h>
#include <android-base/strings.h>
#include <android-base/stringprintf.h>
#include <modprobe/modprobe.h>
#include <sys/utsname.h>
namespace {
enum modprobe_mode {
@ -37,9 +40,8 @@ enum modprobe_mode {
void print_usage(void) {
LOG(INFO) << "Usage:";
LOG(INFO);
// -d option is required on Android
LOG(INFO) << " modprobe [options] -d DIR [--all=FILE|MODULE]...";
LOG(INFO) << " modprobe [options] -d DIR MODULE [symbol=value]...";
LOG(INFO) << " modprobe [options] [-d DIR] [--all=FILE|MODULE]...";
LOG(INFO) << " modprobe [options] [-d DIR] MODULE [symbol=value]...";
LOG(INFO);
LOG(INFO) << "Options:";
LOG(INFO) << " --all=FILE: FILE to acquire module names from";
@ -189,6 +191,12 @@ extern "C" int modprobe_main(int argc, char** argv) {
}
}
if (mod_dirs.empty()) {
utsname uts;
uname(&uts);
mod_dirs.emplace_back(android::base::StringPrintf("/lib/modules/%s", uts.release));
}
LOG(DEBUG) << "mode is " << mode;
LOG(DEBUG) << "mod_dirs is: " << android::base::Join(mod_dirs, " ");
LOG(DEBUG) << "modules is: " << android::base::Join(modules, " ");