github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/cmds/exp/modprobe/modprobe_linux.go (about) 1 // Copyright 2013-2017 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // modprobe - Add and remove modules from the Linux Kernel 6 // 7 // Synopsis: 8 // modprobe [-n] modulename [parameters...] 9 // modprobe [-n] -a modulename... 10 // 11 // Author: 12 // Roland Kammerer <dev.rck@gmail.com> 13 package main 14 15 import ( 16 "flag" 17 "log" 18 "os" 19 "strings" 20 21 "github.com/u-root/u-root/pkg/kmodule" 22 ) 23 24 const cmd = "modprobe [-an] modulename[s] [parameters...]" 25 26 var ( 27 dryRun = flag.Bool("n", false, "Dry run") 28 all = flag.Bool("a", false, "Insert all module names on the command line.") 29 verboseAll = flag.Bool("va", false, "Insert all module names on the command line.") 30 rootDir = flag.String("d", "/", "Root directory for modules") 31 kernelVer = flag.String("S", "", "Set kernel version instead of using uname") 32 ) 33 34 func init() { 35 defUsage := flag.Usage 36 flag.Usage = func() { 37 os.Args[0] = cmd 38 defUsage() 39 } 40 } 41 42 func main() { 43 flag.Parse() 44 45 if flag.NArg() == 0 { 46 log.Println("Usage: ERROR: one module and optional module options.") 47 flag.Usage() 48 os.Exit(1) 49 } 50 51 opts := kmodule.ProbeOpts{ 52 RootDir: *rootDir, 53 KVer: *kernelVer, 54 } 55 if *dryRun { 56 log.Println("Unique dependencies in load order, already loaded ones get skipped:") 57 opts.DryRunCB = func(modPath string) { 58 log.Println(modPath) 59 } 60 } 61 62 // -va is just an alias for -a 63 *all = *all || *verboseAll 64 if *all { 65 modNames := flag.Args() 66 for _, modName := range modNames { 67 if err := kmodule.ProbeOptions(modName, "", opts); err != nil { 68 log.Printf("modprobe: Could not load module %q: %v", modName, err) 69 } 70 } 71 os.Exit(0) 72 } 73 74 modName := flag.Args()[0] 75 modOptions := strings.Join(flag.Args()[1:], " ") 76 77 if err := kmodule.ProbeOptions(modName, modOptions, opts); err != nil { 78 log.Fatalf("modprobe: Could not load module %q: %v", modName, err) 79 } 80 }