38 lines
813 B
Go
38 lines
813 B
Go
package mod
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// Probe loads the given kernel module and its dependencies.
|
|
func Probe(moduleName string) error {
|
|
modulesInfo, err := getModulesInfo()
|
|
if err != nil {
|
|
return fmt.Errorf("getting modules information: %w", err)
|
|
}
|
|
|
|
modulePath, err := findModulePath(moduleName, modulesInfo)
|
|
if err != nil {
|
|
return fmt.Errorf("finding module path: %w", err)
|
|
}
|
|
|
|
info := modulesInfo[modulePath]
|
|
if info.state == builtin || info.state == loaded {
|
|
return nil
|
|
}
|
|
|
|
info.state = loading
|
|
for _, dependencyModulePath := range info.dependencyPaths {
|
|
err = initDependencies(dependencyModulePath, modulesInfo)
|
|
if err != nil {
|
|
return fmt.Errorf("init dependencies: %w", err)
|
|
}
|
|
}
|
|
|
|
err = initModule(modulePath)
|
|
if err != nil {
|
|
return fmt.Errorf("init module: %w", err)
|
|
}
|
|
return nil
|
|
}
|