toybox/toys/other/rmmod.c
<<
>>
Prefs
   1/* rmmod.c - Remove a module from the Linux kernel.
   2 *
   3 * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
   4
   5USE_RMMOD(NEWTOY(rmmod, "<1wf", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
   6
   7config RMMOD
   8  bool "rmmod"
   9  default y
  10  help
  11    usage: rmmod [-wf] MODULE...
  12
  13    Unload the given kernel modules.
  14
  15    -f  Force unload of a module
  16    -w  Wait until the module is no longer used
  17*/
  18
  19#define FOR_rmmod
  20#include "toys.h"
  21
  22#define delete_module(mod, flags) syscall(__NR_delete_module, mod, flags)
  23
  24void rmmod_main(void)
  25{
  26  char **args, *module, *s;
  27  unsigned flags;
  28
  29  for (args = toys.optargs; *args; args++) {
  30    module = basename(*args);
  31    // Remove .ko if present
  32    if ((s = strend(module, ".ko"))) *s = 0;
  33
  34    flags = O_NONBLOCK;
  35    if (FLAG(f)) flags |= O_TRUNC;
  36    if (FLAG(w)) flags &= ~O_NONBLOCK;
  37    if (delete_module(module, flags)) perror_msg("failed to unload %s", module);
  38  }
  39}
  40