blob: 17fc18c09a241f66eedb1d80a269c1da43fc67c4 [file] [log] [blame]
Erik Andersene49d5ec2000-02-08 19:58:47 +00001/* vi: set sw=4 ts=4: */
Erik Andersen02104321999-12-17 18:57:34 +00002/*
3 * Mini insmod implementation for busybox
Eric Andersen2835efe2001-07-25 16:58:58 +00004 *
Denis Vlasenkoba1315d2008-09-13 14:59:38 +00005 * Copyright (C) 2008 Timo Teras <timo.teras@iki.fi>
Erik Andersen02104321999-12-17 18:57:34 +00006 *
Denys Vlasenko0ef64bd2010-08-16 20:14:46 +02007 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
Erik Andersen02104321999-12-17 18:57:34 +00008 */
9
Denis Vlasenkob6adbf12007-05-26 19:00:18 +000010#include "libbb.h"
Denis Vlasenkoba1315d2008-09-13 14:59:38 +000011#include "modutils.h"
Eric Andersene7047882003-12-11 01:42:13 +000012
Pascal Bellardb82b34e2010-06-07 01:16:45 +020013/* 2.6 style insmod has no options and required filename
14 * (not module name - .ko can't be omitted) */
15
16//usage:#define insmod_trivial_usage
17//usage: IF_FEATURE_2_4_MODULES("[OPTIONS] MODULE ")
18//usage: IF_NOT_FEATURE_2_4_MODULES("FILE ")
19//usage: "[symbol=value]..."
20//usage:#define insmod_full_usage "\n\n"
21//usage: "Load the specified kernel modules into the kernel"
22//usage: IF_FEATURE_2_4_MODULES( "\n"
23//usage: "\nOptions:"
24//usage: "\n -f Force module to load into the wrong kernel version"
25//usage: "\n -k Make module autoclean-able"
26//usage: "\n -v Verbose"
27//usage: "\n -q Quiet"
28//usage: "\n -L Lock: prevent simultaneous loads"
29//usage: IF_FEATURE_INSMOD_LOAD_MAP(
30//usage: "\n -m Output load map to stdout"
31//usage: )
32//usage: "\n -x Don't export externs"
33//usage: )
34
Denis Vlasenkob68979a2007-11-02 23:31:10 +000035int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
Denis Vlasenkoa60f84e2008-07-05 09:18:54 +000036int insmod_main(int argc UNUSED_PARAM, char **argv)
Eric Andersene7047882003-12-11 01:42:13 +000037{
Denis Vlasenkoba1315d2008-09-13 14:59:38 +000038 char *filename;
39 int rc;
40
Denis Vlasenko36309cf2008-11-22 18:29:01 +000041 /* Compat note:
42 * 2.6 style insmod has no options and required filename
43 * (not module name - .ko can't be omitted).
Bernhard Reutner-Fischer9a280fa2008-11-22 20:30:53 +000044 * 2.4 style insmod can take module name without .o
Denis Vlasenko36309cf2008-11-22 18:29:01 +000045 * and performs module search in default directories
46 * or in $MODPATH.
47 */
48
Denis Vlasenko5e34ff22009-04-21 11:09:40 +000049 IF_FEATURE_2_4_MODULES(
Denis Vlasenkoba1315d2008-09-13 14:59:38 +000050 getopt32(argv, INSMOD_OPTS INSMOD_ARGS);
Denis Vlasenko36309cf2008-11-22 18:29:01 +000051 argv += optind - 1;
Denis Vlasenkoba1315d2008-09-13 14:59:38 +000052 );
Eric Andersen3b1a7442003-12-24 20:30:45 +000053
Denis Vlasenko92297942006-11-21 11:58:14 +000054 filename = *++argv;
55 if (!filename)
Eric Andersene7047882003-12-11 01:42:13 +000056 bb_show_usage();
Eric Andersene7047882003-12-11 01:42:13 +000057
Denis Vlasenkoba1315d2008-09-13 14:59:38 +000058 rc = bb_init_module(filename, parse_cmdline_module_options(argv));
59 if (rc)
Denis Vlasenko1f632292009-04-13 02:25:40 +000060 bb_error_msg("can't insert '%s': %s", filename, moderror(rc));
Eric Andersene7047882003-12-11 01:42:13 +000061
Denis Vlasenkoba1315d2008-09-13 14:59:38 +000062 return rc;
Eric Andersene7047882003-12-11 01:42:13 +000063}