Working example of extra yt6801 module

This commit is contained in:
Bart van der Braak 2024-10-25 22:28:42 +02:00
parent 1f1bdeff07
commit f8ef5a9505
2 changed files with 29 additions and 36 deletions

View file

@ -4,23 +4,20 @@
{ config, lib, pkgs, modulesPath, ... }:
let
yt6801Overlay = (final: prev: {
yt6801-driver = import ./yt6801-driver.nix {
inherit (pkgs) lib stdenv fetchFromGitHub nukeReferences bc;
kernel = pkgs.linuxPackages.kernel;
};
});
yt6801 = import ./yt6801-driver.nix {
inherit (pkgs) lib stdenv fetchzip nukeReferences bc;
kernel = pkgs.linuxPackages.kernel;
};
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 = [ pkgs.yt6801-driver ];
boot.extraModulePackages = [ yt6801 ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/c7cf28c3-5744-45cc-8a81-456d24e44b7a";

View file

@ -1,44 +1,40 @@
{ lib, stdenv, fetchFromGitHub, kernel, bc, nukeReferences }:
{ lib, stdenv, fetchzip, nukeReferences, bc, kernel }:
stdenv.mkDerivation rec {
pname = "yt6801";
version = "1.0.29";
name = "${pname}-${version}-${kernel.version}";
src = fetchFromGitHub {
owner = "bartvdbraak";
repo = pname;
rev = "ea9c2d01c0f2a4171a774527dce4daca43e11956";
hash = "sha256-oz6CeOUN6QWKXxe3WUZljhGDTFArsknjzBuQ4IchGeU=";
src = fetchzip {
url = "https://www.motor-comm.com/Public/Uploads/uploadfile/files/20240812/yt6801-linux-driver-1.0.29.zip";
sha256 = "sha256-oz6CeOUN6QWKXxe3WUZljhGDTFArsknjzBuQ4IchGeU=";
stripRoot = false;
};
nativeBuildInputs = [ bc nukeReferences ] ++ kernel.moduleBuildDependencies;
buildInputs = [ kernel.dev ];
hardeningDisable = [ "pic" "format" ];
KERNELDIR = "${kernel.dev}/lib/modules/${kernel.modDirVersion}";
nativeBuildInputs = [ bc ] ++ kernel.moduleBuildDependencies;
preBuild = ''
cd src
'';
buildFlags = [ "modules" ];
patchPhase = ''
substituteInPlace ./src/Makefile \
--replace-fail 'KSRC_BASE = /lib/modules/$(shell uname -r)' "KSRC_BASE = ${KERNELDIR}" \
--replace-fail 'sudo ls -l $(ko_dir)' "" \
--replace-fail 'depmod $(shell uname -r)' "" \
--replace-fail 'modprobe $(KFILE)' "" \
--replace-fail '@modinfo $(ko_full)' ""
'';
makeFlags = [
"ARCH=${stdenv.hostPlatform.linuxArch}"
"KERNELDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
"EXTRA_CFLAGS=-Wall -I${kernel.dev}/include"
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
];
postPatch = ''
substituteInPlace ./yt_nic_install.sh \
--replace-quiet "/lib/modules" "$out/lib/modules/${kernel.modDirVersion}" \
--replace-quiet "/sbin/depmod" "# depmod"
substituteInPlace ./src/Makefile \
--replace-quiet "/lib/modules" "$out/lib/modules/${kernel.modDirVersion}" \
--replace-quiet "KSRC_BASE = /lib/modules/$(shell uname -r)" \
"KSRC_BASE = ${kernel.dev}/lib/modules/${kernel.modDirVersion}"
'';
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
'';
INSTALL_MOD_PATH = placeholder "out";
enableParallelBuilding = true;
meta = with lib; {