40 lines
1.4 KiB
Nix
40 lines
1.4 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
{
|
|
options = {
|
|
services.amd-uprof = {
|
|
enable = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = false;
|
|
description = "Whether to enable AMD uProf.";
|
|
};
|
|
};
|
|
};
|
|
|
|
# Only setup amd-uprof if enabled
|
|
config = lib.mkIf config.services.amd-uprof.enable {
|
|
|
|
# First make sure that we add the module to the list of available modules
|
|
# in the kernel matching the same kernel version of this configuration.
|
|
boot.extraModulePackages = with config.boot.kernelPackages; [ amd-uprof-driver ];
|
|
|
|
# Make the userspace tools available in $PATH.
|
|
environment.systemPackages = with pkgs; [ amd-uprof ];
|
|
|
|
# Add extra udev rules to setup the /dev/AMDPowerProfiler device. They
|
|
# forgot to add these.
|
|
services.udev.extraRules = let
|
|
# To create the device node we need to read the device number from the
|
|
# /proc directory, so the module must have been loaded first.
|
|
addDevice = pkgs.writeScript "add-amd-uprof-dev.sh"
|
|
"mknod /dev/AMDPowerProfiler -m 666 c $(< /proc/AMDPowerProfiler/device) 0";
|
|
removeDevice = pkgs.writeScript "remove-amd-uprof-dev.sh"
|
|
"rm /dev/AMDPowerProfiler";
|
|
in
|
|
''
|
|
SUBSYSTEM=="module", DEVPATH=="/module/AMDPowerProfiler/device", ACTION=="add", RUN+="${addDevice}"
|
|
SUBSYSTEM=="module", DEVPATH=="/module/AMDPowerProfiler/device", ACTION=="remove", RUN+="${removeDevice}"
|
|
'';
|
|
};
|
|
}
|