From 6d38dc0cb4ef05a521bbbfbe2637c015beeaa1d0 Mon Sep 17 00:00:00 2001 From: Bart van der Braak Date: Fri, 25 Oct 2024 11:21:19 +0200 Subject: [PATCH] Add initial test to run with the new driver install --- tongfang/nixos/hardware-configuration.nix | 11 ++++- tongfang/nixos/yt6801-driver.nix | 50 +++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 tongfang/nixos/yt6801-driver.nix diff --git a/tongfang/nixos/hardware-configuration.nix b/tongfang/nixos/hardware-configuration.nix index f10dad2..820a6f8 100644 --- a/tongfang/nixos/hardware-configuration.nix +++ b/tongfang/nixos/hardware-configuration.nix @@ -3,15 +3,24 @@ # to /etc/nixos/configuration.nix instead. { config, lib, pkgs, modulesPath, ... }: +let + yt6801Overlay = (final: prev: { + yt6801-driver = import ./yt6801-driver.nix { + inherit (pkgs) lib stdenv fetchurl kernel bc nukeReferences; + }; + }); +in { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + nixpkgs.overlays = [ yt6801Overlay ]; boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" "sdhci_pci" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; - boot.extraModulePackages = [ ]; + boot.extraModulePackages = [ pkgs.yt6801-driver ]; + environment.systemPackages = with pkgs; [ yt6801-driver ]; fileSystems."/" = { device = "/dev/disk/by-uuid/c7cf28c3-5744-45cc-8a81-456d24e44b7a"; diff --git a/tongfang/nixos/yt6801-driver.nix b/tongfang/nixos/yt6801-driver.nix new file mode 100644 index 0000000..1e94d0d --- /dev/null +++ b/tongfang/nixos/yt6801-driver.nix @@ -0,0 +1,50 @@ +{ lib, stdenv, fetchurl, kernel, bc, nukeReferences }: + +stdenv.mkDerivation rec { + pname = "yt6801-driver"; + version = "${kernel.version}-unstable-2024-10-25"; + + src = fetchurl { + url = "https://www.motor-comm.com/Public/Uploads/uploadfile/files/20240812/yt6801-linux-driver-1.0.29.zip"; + sha256 = "1r8r463y140vrkilkciba16864cfcm35kdqpby50bs8dwmw84gm3"; + }; + + nativeBuildInputs = [ stdenv.lib.makeWrapper bc nukeReferences ] ++ kernel.moduleBuildDependencies; + hardeningDisable = [ "pic" "format" ]; + + postPatch = '' + substituteInPlace ./yt_nic_install.sh \ + --replace "/lib/modules" "$out/lib/modules" \ + --replace "/sbin/depmod" "# depmod" + + substituteInPlace ./src/Makefile \ + --replace "/lib/modules" "$out/lib/modules/${kernel.modDirVersion}" \ + --replace "kernel/drivers/net/ethernet/motorcomm" "$out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/ethernet/motorcomm" + ''; + + makeFlags = [ + "ARCH=${stdenv.hostPlatform.linuxArch}" + ("KERNELDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build") + ("EXTRA_CFLAGS=-Wall -g -I${kernel.dev}/include") + ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + "CROSS_COMPILE=${stdenv.cc.targetPrefix}" + ]; + + preInstall = '' + mkdir -p "$out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/ethernet/motorcomm" + ''; + + postInstall = '' + nuke-refs $out/lib/modules/*/kernel/drivers/net/ethernet/motorcomm/*.ko + ''; + + enableParallelBuilding = true; + + meta = with lib; { + description = "Motorcomm yt6801 Network Interface Card (NIC) driver"; + homepage = "https://www.motor-comm.com/"; + license = licenses.gpl2Only; + platforms = platforms.linux; + maintainers = with maintainers; [ bartvdbraak ]; + }; +}