* provide 1:1 compatibility with module-init-tools's modprobe
- dump configuration
- deal with dependency loop
- - break dependency loop when all it needs is to check if the module is
- already loaded
+ - fix dependency listing in --show-depends
+ $ modprobe -S 3.2.0-2-ARCH --show-depends ahci
+ insmod /lib/modules/3.2.0-2-ARCH/kernel/drivers/scsi/scsi_mod.ko.gz
+ insmod /lib/modules/3.2.0-2-ARCH/kernel/drivers/scsi/scsi_mod.ko.gz
+ insmod /lib/modules/3.2.0-2-ARCH/kernel/drivers/ata/libata.ko.gz
+ insmod /lib/modules/3.2.0-2-ARCH/kernel/drivers/scsi/scsi_mod.ko.gz
+ insmod /lib/modules/3.2.0-2-ARCH/kernel/drivers/scsi/scsi_mod.ko.gz
+ insmod /lib/modules/3.2.0-2-ARCH/kernel/drivers/ata/libata.ko.gz
+ insmod /lib/modules/3.2.0-2-ARCH/kernel/drivers/ata/libahci.ko.gz
+ insmod /lib/modules/3.2.0-2-ARCH/kernel/drivers/ata/ahci.ko.gz
* Add manpages: copy them from module-init-tools and make the necessary changes
* kmod-modprobe doesn't parse 'config' and 'include' commands in configuration
files.
+* we don't use <module-dir>/modules.builtin{,.bin} indexes. Instead we rely on
+ module appearing on /sys/modules/* without a initstate file to determine if
+ it is builtin.
+
depmod
------
return err;
}
+static int handle_failed_lookup(struct kmod_ctx *ctx, const char *alias)
+{
+ struct kmod_module *mod;
+ int state, err;
+
+ DBG("lookup failed - trying to check if it's builtin\n");
+
+ err = kmod_module_new_from_name(ctx, alias, &mod);
+ if (err < 0)
+ return err;
+
+ state = kmod_module_get_initstate(mod);
+ kmod_module_unref(mod);
+
+ if (state != KMOD_MODULE_BUILTIN) {
+ LOG("Module %s not found.\n", alias);
+ return -ENOENT;
+ }
+
+ if (first_time) {
+ LOG("Module %s already in kernel (builtin).\n", alias);
+ return -ENOENT;
+ }
+
+ SHOW("builtin %s\n", alias);
+ return 0;
+}
+
static int insmod_alias(struct kmod_ctx *ctx, const char *alias,
const char *extra_options)
{
if (err < 0)
return err;
- if (list == NULL) {
- LOG("Module %s not found.\n", alias);
- return -ENOENT;
- }
+ if (list == NULL)
+ return handle_failed_lookup(ctx, alias);
if (use_blacklist) {
struct kmod_list *filtered = NULL;