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//config:config INSMOD 10//config: bool "insmod" 11//config: default y 12//config: select PLATFORM_LINUX 13//config: help 14//config: insmod is used to load specified modules in the running kernel. 15 16//applet:IF_INSMOD(IF_NOT_MODPROBE_SMALL(APPLET(insmod, BB_DIR_SBIN, BB_SUID_DROP))) 17 18//kbuild:ifneq ($(CONFIG_MODPROBE_SMALL),y) 19//kbuild:lib-$(CONFIG_INSMOD) += insmod.o modutils.o 20//kbuild:endif 21 22#include "libbb.h" 23#include "modutils.h" 24 25/* 2.6 style insmod has no options and required filename 26 * (not module name - .ko can't be omitted) */ 27 28//usage:#if !ENABLE_MODPROBE_SMALL 29//usage:#define insmod_trivial_usage 30//usage: IF_FEATURE_2_4_MODULES("[OPTIONS] MODULE ") 31//usage: IF_NOT_FEATURE_2_4_MODULES("FILE ") 32//usage: "[SYMBOL=VALUE]..." 33//usage:#define insmod_full_usage "\n\n" 34//usage: "Load kernel module" 35//usage: IF_FEATURE_2_4_MODULES( "\n" 36//usage: "\n -f Force module to load into the wrong kernel version" 37//usage: "\n -k Make module autoclean-able" 38//usage: "\n -v Verbose" 39//usage: "\n -q Quiet" 40//usage: "\n -L Lock: prevent simultaneous loads" 41//usage: IF_FEATURE_INSMOD_LOAD_MAP( 42//usage: "\n -m Output load map to stdout" 43//usage: ) 44//usage: "\n -x Don't export externs" 45//usage: ) 46//usage:#endif 47 48int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 49int insmod_main(int argc UNUSED_PARAM, char **argv) 50{ 51 char *filename; 52 int rc; 53 54 /* Compat note: 55 * 2.6 style insmod has no options and required filename 56 * (not module name - .ko can't be omitted). 57 * 2.4 style insmod can take module name without .o 58 * and performs module search in default directories 59 * or in $MODPATH. 60 */ 61 62 IF_FEATURE_2_4_MODULES( 63 getopt32(argv, INSMOD_OPTS INSMOD_ARGS); 64 argv += optind - 1; 65 ); 66 67 filename = *++argv; 68 if (!filename) 69 bb_show_usage(); 70 71 rc = bb_init_module(filename, parse_cmdline_module_options(argv, /*quote_spaces:*/ 0)); 72 if (rc) 73 bb_error_msg("can't insert '%s': %s", filename, moderror(rc)); 74 75 return rc; 76} 77