/* "was seen in modules.dep": */
#define MODULE_FLAG_FOUND_IN_MODDEP 0x0004
#define MODULE_FLAG_BLACKLISTED 0x0008
+#define MODULE_FLAG_BUILTIN 0x0010
struct globals {
llist_t *probes; /* MEs of module(s) requested on cmdline */
m = get_or_add_modentry(name);
if (!(option_mask32 & (OPT_REMOVE | OPT_SHOW_DEPS))
- && (m->flags & MODULE_FLAG_LOADED)
+ && (m->flags & (MODULE_FLAG_LOADED | MODULE_FLAG_BUILTIN))
) {
DBG("skipping %s, it is already loaded", name);
return;
if (!(m->flags & MODULE_FLAG_FOUND_IN_MODDEP)) {
if (!(option_mask32 & INSMOD_OPT_SILENT))
- bb_error_msg("module %s not found in modules.dep",
- humanly_readable_name(m));
+ bb_error_msg((m->flags & MODULE_FLAG_BUILTIN) ?
+ "module %s is builtin" :
+ "module %s not found in modules.dep",
+ humanly_readable_name(m));
return -ENOENT;
}
DBG("do_modprob'ing %s", m->modname);
while (config_read(parser, &s, 1, 1, "# \t", PARSE_NORMAL & ~PARSE_GREEDY))
get_or_add_modentry(s)->flags |= MODULE_FLAG_LOADED;
config_close(parser);
+
+ parser = config_open2("modules.builtin", fopen_for_read);
+ while (config_read(parser, &s, 1, 1, "# \t", PARSE_NORMAL))
+ get_or_add_modentry(s)->flags |= MODULE_FLAG_BUILTIN;
+ config_close(parser);
}
if (opt & (OPT_INSERT_ALL | OPT_REMOVE)) {