1/* vi: set sw=4 ts=4: */ 2/* 3 * Mini insmod implementation for busybox 4 * 5 * Copyright (C) 2008 Timo Teras <timo.teras@iki.fi> 6 * 7 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 8 */ 9 10//applet:IF_INSMOD(APPLET(insmod, BB_DIR_SBIN, BB_SUID_DROP)) 11 12#include "libbb.h" 13#include "modutils.h" 14 15/* 2.6 style insmod has no options and required filename 16 * (not module name - .ko can't be omitted) */ 17 18//usage:#if !ENABLE_MODPROBE_SMALL 19//usage:#define insmod_trivial_usage 20//usage: IF_FEATURE_2_4_MODULES("[OPTIONS] MODULE ") 21//usage: IF_NOT_FEATURE_2_4_MODULES("FILE ") 22//usage: "[SYMBOL=VALUE]..." 23//usage:#define insmod_full_usage "\n\n" 24//usage: "Load kernel module" 25//usage: IF_FEATURE_2_4_MODULES( "\n" 26//usage: "\n -f Force module to load into the wrong kernel version" 27//usage: "\n -k Make module autoclean-able" 28//usage: "\n -v Verbose" 29//usage: "\n -q Quiet" 30//usage: "\n -L Lock: prevent simultaneous loads" 31//usage: IF_FEATURE_INSMOD_LOAD_MAP( 32//usage: "\n -m Output load map to stdout" 33//usage: ) 34//usage: "\n -x Don't export externs" 35//usage: ) 36//usage:#endif 37 38int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 39int insmod_main(int argc UNUSED_PARAM, char **argv) 40{ 41 char *filename; 42 int rc; 43 44 /* Compat note: 45 * 2.6 style insmod has no options and required filename 46 * (not module name - .ko can't be omitted). 47 * 2.4 style insmod can take module name without .o 48 * and performs module search in default directories 49 * or in $MODPATH. 50 */ 51 52 IF_FEATURE_2_4_MODULES( 53 getopt32(argv, INSMOD_OPTS INSMOD_ARGS); 54 argv += optind - 1; 55 ); 56 57 filename = *++argv; 58 if (!filename) 59 bb_show_usage(); 60 61 rc = bb_init_module(filename, parse_cmdline_module_options(argv, /*quote_spaces:*/ 0)); 62 if (rc) 63 bb_error_msg("can't insert '%s': %s", filename, moderror(rc)); 64 65 return rc; 66} 67