Add AMD uProf package and driver
Reviewed-by: Aleix Boné <abonerib@bsc.es>
This commit is contained in:
		
							parent
							
								
									ff0fc18d0a
								
							
						
					
					
						commit
						084d556c56
					
				
							
								
								
									
										41
									
								
								pkgs/amd-uprof/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								pkgs/amd-uprof/default.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | { stdenv | ||||||
|  | , lib | ||||||
|  | , curl | ||||||
|  | , cacert | ||||||
|  | , runCommandLocal | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   version = "5.1.701"; | ||||||
|  |   tarball = "AMDuProf_Linux_x64_${version}.tar.bz2"; | ||||||
|  | 
 | ||||||
|  |   uprofSrc = runCommandLocal tarball { | ||||||
|  |     nativeBuildInputs = [ curl ]; | ||||||
|  |     outputHash = "sha256-j9gxcBcIg6Zhc5FglUXf/VV9bKSo+PAKeootbN7ggYk="; | ||||||
|  |     SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt"; | ||||||
|  |   } '' | ||||||
|  |     curl \ | ||||||
|  |     -o $out \ | ||||||
|  |     'https://download.amd.com/developer/eula/uprof/uprof-5-1/${tarball}' \ | ||||||
|  |     -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:139.0) Gecko/20100101 Firefox/139.0' \ | ||||||
|  |     -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \ | ||||||
|  |     -H 'Accept-Language: en-US,en;q=0.5' \ | ||||||
|  |     -H 'Accept-Encoding: gzip, deflate, br, zstd' \ | ||||||
|  |     -H 'Referer: https://www.amd.com/' 2>&1 | tr '\r' '\n' | ||||||
|  |   ''; | ||||||
|  | 
 | ||||||
|  | in | ||||||
|  |   stdenv.mkDerivation { | ||||||
|  |     pname = "AMD-uProf"; | ||||||
|  |     inherit version; | ||||||
|  |     src = uprofSrc; | ||||||
|  |     dontStrip = true; | ||||||
|  |     phases = [ "installPhase" "fixupPhase" ]; | ||||||
|  |     installPhase = '' | ||||||
|  |       set -x | ||||||
|  |       mkdir -p $out | ||||||
|  |       tar -x -v -C $out --strip-components=1 -f $src | ||||||
|  |       rm $out/bin/AMDPowerProfilerDriverSource.tar.gz | ||||||
|  |       set +x | ||||||
|  |     ''; | ||||||
|  |   } | ||||||
							
								
								
									
										33
									
								
								pkgs/amd-uprof/driver.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								pkgs/amd-uprof/driver.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | { stdenv | ||||||
|  | , lib | ||||||
|  | , amd-uprof | ||||||
|  | , kernel | ||||||
|  | , runCommandLocal | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   version = amd-uprof.version; | ||||||
|  |   tarball = amd-uprof.src; | ||||||
|  | in stdenv.mkDerivation { | ||||||
|  |   pname = "AMDPowerProfilerDriver"; | ||||||
|  |   inherit version; | ||||||
|  |   src = runCommandLocal "AMDPowerProfilerDriverSource.tar.gz" { } '' | ||||||
|  |     set -x | ||||||
|  |     tar -x -f ${tarball} AMDuProf_Linux_x64_${version}/bin/AMDPowerProfilerDriverSource.tar.gz | ||||||
|  |     mv AMDuProf_Linux_x64_${version}/bin/AMDPowerProfilerDriverSource.tar.gz $out | ||||||
|  |     set +x | ||||||
|  |   ''; | ||||||
|  |   hardeningDisable = [ "pic" "format" ]; | ||||||
|  |   nativeBuildInputs = kernel.moduleBuildDependencies; | ||||||
|  |   patches = [ ./makefile.patch ]; | ||||||
|  |   makeFlags = [ | ||||||
|  |     "KERNEL_VERSION=${kernel.modDirVersion}" | ||||||
|  |     "KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" | ||||||
|  |     "INSTALL_MOD_PATH=$(out)" | ||||||
|  |   ]; | ||||||
|  |   meta = { | ||||||
|  |     description = "AMD Power Profiler Driver"; | ||||||
|  |     homepage = "https://www.amd.com/es/developer/uprof.html"; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										66
									
								
								pkgs/amd-uprof/makefile.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								pkgs/amd-uprof/makefile.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,66 @@ | |||||||
|  | --- a/Makefile	2025-06-19 20:36:49.346693267 +0200
 | ||||||
|  | +++ b/Makefile	2025-06-19 20:42:29.778088660 +0200
 | ||||||
|  | @@ -27,7 +27,7 @@ MODULE_VERSION=$(shell cat AMDPowerProfi
 | ||||||
|  |  MODULE_NAME_KO=$(MODULE_NAME).ko | ||||||
|  |   | ||||||
|  |  # check is module inserted | ||||||
|  | -MODPROBE_OUTPUT=$(shell lsmod | grep $(MODULE_NAME))
 | ||||||
|  | +#MODPROBE_OUTPUT=$(shell lsmod | grep $(MODULE_NAME))
 | ||||||
|  |   | ||||||
|  |  # check pcore dkms status | ||||||
|  |  PCORE_DKMS_STATUS=$(shell dkms status | grep $(MODULE_NAME) | grep $(MODULE_VERSION)) | ||||||
|  | @@ -50,7 +50,7 @@ endif
 | ||||||
|  |  # “-Wno-missing-attributes” is added for GCC version >= 9.0 and kernel version <= 5.00 | ||||||
|  |  G_VERSION=9 | ||||||
|  |  K_VERSION=5 | ||||||
|  | -KERNEL_MAJOR_VERSION=$(shell uname -r | cut -f1 -d.)
 | ||||||
|  | +KERNEL_MAJOR_VERSION=$(shell echo "$(KERNEL_VERSION)" | cut -f1 -d.)
 | ||||||
|  |  GCCVERSION = $(shell gcc -dumpversion | cut -f1 -d.) | ||||||
|  |  ifeq ($(G_VERSION),$(firstword $(sort $(GCCVERSION) $(G_VERSION)))) | ||||||
|  |  	ifeq ($(K_VERSION),$(lastword $(sort $(KERNEL_MAJOR_VERSION) $(K_VERSION)))) | ||||||
|  | @@ -66,17 +66,7 @@ ${MODULE_NAME}-objs :=  src/PmcDataBuffe
 | ||||||
|  |   | ||||||
|  |  # make | ||||||
|  |  all: | ||||||
|  | -	@chmod a+x ./AMDPPcert.sh
 | ||||||
|  | -	@./AMDPPcert.sh 0 1; echo $$? > $(PWD)/sign_status;
 | ||||||
|  | -	@SIGSTATUS1=`cat $(PWD)/sign_status | tr -d '\n'`; \
 | ||||||
|  | -                if [ $$SIGSTATUS1 -eq 1 ]; then \
 | ||||||
|  | -			exit 1; \
 | ||||||
|  | -		fi
 | ||||||
|  | -	@make -C /lib/modules/$(KERNEL_VERSION)/build M=$(PWD) $(MAKE_OPTS) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" modules
 | ||||||
|  | -	@SIGSTATUS3=`cat $(PWD)/sign_status | tr -d '\n'`; \
 | ||||||
|  | -                if [ $$SIGSTATUS3 -eq 0 ]; then \
 | ||||||
|  | -			./AMDPPcert.sh 1 $(MODULE_NAME_KO); \
 | ||||||
|  | -		fi
 | ||||||
|  | +	make -C $(KERNEL_DIR) M=$(PWD) $(MAKE_OPTS) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" modules
 | ||||||
|  |   | ||||||
|  |  # make clean | ||||||
|  |  clean: | ||||||
|  | @@ -84,23 +74,9 @@ clean:
 | ||||||
|  |   | ||||||
|  |  # make install | ||||||
|  |  install: | ||||||
|  | -	@mkdir -p /lib/modules/`uname -r`/kernel/drivers/extra
 | ||||||
|  | -	@rm  -f /lib/modules/`uname -r`/kernel/drivers/extra/$(MODULE_NAME_KO)
 | ||||||
|  | -	@cp $(MODULE_NAME_KO) /lib/modules/`uname -r`/kernel/drivers/extra/
 | ||||||
|  | -	@depmod -a
 | ||||||
|  | -	@if [ ! -z "$(MODPROBE_OUTPUT)" ]; then \
 | ||||||
|  | -		echo "Uninstalling AMDPowerProfiler Linux kernel module.";\
 | ||||||
|  | -		rmmod $(MODULE_NAME);\
 | ||||||
|  | -	fi
 | ||||||
|  | -	@modprobe $(MODULE_NAME) 2> $(PWD)/sign_status1; \
 | ||||||
|  | -		cat $(PWD)/sign_status1 | grep "Key was rejected by service"; \
 | ||||||
|  | -		echo $$? > $(PWD)/sign_status; SIGSTATUS1=`cat $(PWD)/sign_status | tr -d '\n'`; \
 | ||||||
|  | -                if [ $$SIGSTATUS1 -eq 0 ]; then \
 | ||||||
|  | -			echo "ERROR: Secure Boot enabled, correct key is not yet enrolled in BIOS key table"; \
 | ||||||
|  | -			exit 1; \
 | ||||||
|  | -		else \
 | ||||||
|  | -			cat $(PWD)/sign_status1; \
 | ||||||
|  | -		fi
 | ||||||
|  | +	mkdir -p $(INSTALL_MOD_PATH)/lib/modules/$(KERNEL_VERSION)/kernel/drivers/extra/
 | ||||||
|  | +	cp -a $(MODULE_NAME_KO) $(INSTALL_MOD_PATH)/lib/modules/$(KERNEL_VERSION)/kernel/drivers/extra/
 | ||||||
|  | +
 | ||||||
|  |  # make dkms | ||||||
|  |  dkms: | ||||||
|  |  	@chmod a+x ./AMDPPcert.sh | ||||||
| @ -53,4 +53,15 @@ final: prev: | |||||||
|   meteocat-exporter = prev.callPackage ./meteocat-exporter/default.nix { }; |   meteocat-exporter = prev.callPackage ./meteocat-exporter/default.nix { }; | ||||||
|   upc-qaire-exporter = prev.callPackage ./upc-qaire-exporter/default.nix { }; |   upc-qaire-exporter = prev.callPackage ./upc-qaire-exporter/default.nix { }; | ||||||
|   cudainfo = prev.callPackage ./cudainfo/default.nix { }; |   cudainfo = prev.callPackage ./cudainfo/default.nix { }; | ||||||
|  | 
 | ||||||
|  |   amd-uprof = prev.callPackage ./amd-uprof/default.nix { }; | ||||||
|  | 
 | ||||||
|  |   # FIXME: Extend this to all linuxPackages variants. Open problem, see: | ||||||
|  |   # https://discourse.nixos.org/t/whats-the-right-way-to-make-a-custom-kernel-module-available/4636 | ||||||
|  |   linuxPackages = prev.linuxPackages.extend (_final: _prev: { | ||||||
|  |     amd-uprof-driver = _prev.callPackage ./amd-uprof/driver.nix { }; | ||||||
|  |   }); | ||||||
|  |   linuxPackages_latest = prev.linuxPackages_latest.extend(_final: _prev: { | ||||||
|  |     amd-uprof-driver = _prev.callPackage ./amd-uprof/driver.nix { }; | ||||||
|  |   }); | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user