From af49b2a0b0134dce99c92d28b9b76bbe04ec0c86 Mon Sep 17 00:00:00 2001 From: Ingo Reitz <9l@9lo.re> Date: Wed, 20 May 2026 04:20:34 +0200 Subject: [PATCH] ethercat: add kernel module --- pkgs/by-name/et/ethercat/kernel-module.nix | 70 ++++++++++++++++++++++ pkgs/by-name/et/ethercat/package.nix | 5 +- pkgs/top-level/linux-kernels.nix | 2 + 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 pkgs/by-name/et/ethercat/kernel-module.nix diff --git a/pkgs/by-name/et/ethercat/kernel-module.nix b/pkgs/by-name/et/ethercat/kernel-module.nix new file mode 100644 index 000000000000..8586e273ae02 --- /dev/null +++ b/pkgs/by-name/et/ethercat/kernel-module.nix @@ -0,0 +1,70 @@ +ethercat: +{ + lib, + stdenv, + kernelModuleMakeFlags, + kernel, +}: +let + # Aside from a generic drivers there are special drivers for specific NICs + # (for example r8139, r8169, e100, e1000, e1000e) which are only available + # for these kernel versions + extraSupportedKernel = lib.elem (lib.versions.majorMinor kernel.version) [ + "5.10" + "5.14" + "5.15" + "6.1" + "6.4" + "6.12" + ]; +in +stdenv.mkDerivation { + pname = "ethercat"; + version = "${kernel.version}-${ethercat.version}"; + + __structuredAttrs = true; + + enableParallelBuilding = true; + + inherit (ethercat) src; + + nativeBuildInputs = kernel.moduleBuildDependencies ++ ethercat.nativeBuildInputs; + + configureFlags = [ + "--with-linux-dir=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + "--enable-userlib=no" + "--enable-tool=no" + "--enable-kernel=yes" + "--enable-ccat=yes" + ] + ++ lib.optionals extraSupportedKernel [ + "--enable-e100=yes" + "--enable-e1000=yes" + "--enable-e1000e=yes" + "--enable-r8169=yes" + "--enable-igb=yes" + ] + ++ lib.optionals (extraSupportedKernel && lib.versionAtLeast kernel.version "5.14") [ + "--enable-igc=yes" + ]; + + makeFlags = kernelModuleMakeFlags ++ [ + "INSTALL_MOD_PATH=${placeholder "out"}" + ]; + + buildFlags = [ "modules" ]; + + installTargets = [ "modules_install" ]; + + meta = { + description = ethercat.meta.description + " - kernel modules"; + + inherit (ethercat.meta) + homepage + changelog + license + maintainers + platforms + ; + }; +} diff --git a/pkgs/by-name/et/ethercat/package.nix b/pkgs/by-name/et/ethercat/package.nix index cb7a1167e6ba..b87dc7c2224e 100644 --- a/pkgs/by-name/et/ethercat/package.nix +++ b/pkgs/by-name/et/ethercat/package.nix @@ -29,7 +29,10 @@ stdenv.mkDerivation (finalAttrs: { "--enable-kernel=no" ]; - passthru.updateScript = gitUpdater { }; + passthru = { + kernelModule = import ./kernel-module.nix finalAttrs.finalPackage; + updateScript = gitUpdater { }; + }; meta = { description = "IgH EtherCAT Master for Linux"; diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix index fe8ebd43504f..20c211fad60a 100644 --- a/pkgs/top-level/linux-kernels.nix +++ b/pkgs/top-level/linux-kernels.nix @@ -332,6 +332,8 @@ in inherit kernel; }; + ethercat = callPackage pkgs.ethercat.kernelModule { }; + evdi = callPackage ../os-specific/linux/evdi { }; fanout = callPackage ../os-specific/linux/fanout { };