49 lines
930 B
Go
49 lines
930 B
Go
// Copyright 2022 Listware
|
|
|
|
package driver
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"path"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
const (
|
|
kmodSysPath = "/sys/module"
|
|
drvsPath = "/sys/bus/pci/drivers"
|
|
)
|
|
|
|
// Driver - disk driver: nvme, uio, etc..
|
|
type Driver string
|
|
|
|
func (drv Driver) String() string {
|
|
return string(drv)
|
|
}
|
|
|
|
// IsLoaded - check if driver is loaded
|
|
func (drv Driver) IsLoaded() bool {
|
|
_, err := os.Stat(path.Join(kmodSysPath, drv.String()))
|
|
return !os.IsNotExist(err)
|
|
}
|
|
|
|
// Load kernel module
|
|
func (drv Driver) Load() error {
|
|
if drv.IsLoaded() {
|
|
logrus.WithField("driver", drv.String()).Debug("is already loaded")
|
|
return nil
|
|
|
|
}
|
|
return exec.Command("modprobe", drv.String()).Run()
|
|
}
|
|
|
|
// Unload kernel module
|
|
func (drv Driver) Unload() error {
|
|
if !drv.IsLoaded() {
|
|
logrus.WithField("driver", drv.String()).Debug("is already unloaded")
|
|
return nil
|
|
}
|
|
return exec.Command("modprobe", "--remove", drv.String()).Run()
|
|
}
|