{ pkgs, lib, stdenv, # interface name (eg. "eth0") or MAC address (eg. "e9:22:a4:62:74:23"). ff:ff:ff:ff:ff:ff means first available NIC master_device0 ? "ff:ff:ff:ff:ff:ff", enable-debug-if ? "no", # create debug interface for each master enable-eoe ? "yes", # eoe enable kernel }: # Based on: https://aur.archlinux.org/packages/etherlab-ethercat with pkgs; let version="master-ba278192"; device_modules="generic"; in stdenv.mkDerivation { name = "ethercat-master-module-${kernel.modDirVersion}"; inherit version; inherit master_device0; src = fetchGit { url = "https://gitlab.com/etherlab.org/ethercat.git"; ref = "master"; rev = "ba2781922162eca6c10c7cc72a7b4e52e3359f26"; #ref = "refs/tags/1.9"; #sha256 = lib.fakeSha256; }; enableParallelBuilding = true; buildInputs = [ git pkg-config bash autoreconfHook kernel.moduleBuildDependencies kmod iproute2 ]; patches = [ ]; hardeningDisable = [ "pic" "format" ]; setSourceRoot = '' export sourceRoot=$(pwd)/source ''; postUnpack = '' cd $sourceRoot echo 'KERNEL=="EtherCAT[0-9]*", GROUP="ethercat", MODE="0660"' > 99-EtherCAT.rules ''; preConfigure = '' bash bootstrap ''; configureFlags = [ "--prefix=${placeholder "out"}/" "--sysconfdir=${placeholder "out"}/etc" "--sbindir=${placeholder "out"}/bin" "--libdir=${placeholder "out"}/lib" "--enable-kernel" "--enable-generic" "--disable-8139too" "--enable-tool" "--enable-userlib" "--enable-tty" "--enable-debug-if=${enable-debug-if}" "--enable-eoe=${enable-eoe}" "--enable-tty" "--with-linux-dir=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" ]; #++ lib.optionals (!guiSupport) [ "--disable-gui" "--enable-systemd" ] # TODO add flags for nongeneric NICs like this makeFlags = [ "all" "modules" ]; # Make systemd service unit postBuild = '' cd script make all ethercat.service cd .. ''; checkPhase = '' make check ''; installFlags = [ "INSTALL_MOD_PATH=${placeholder "out"}" ]; installTargets = [ "install" "modules_install" ]; postInstall = '' mkdir -p $out/lib/udev/rules.d/ cp 99-EtherCAT.rules $out/lib/udev/rules.d/ mkdir -p $out/lib/systemd/system mkdir -p $out/etc/systemd/system cp script/ethercat.service $out/etc/systemd/system/ substituteInPlace $out/etc/systemd/system/ethercat.service --replace '#Requires' 'Requires' substituteInPlace $out/etc/systemd/system/ethercat.service --replace '#After' 'After' cp $out/etc/systemd/system/ethercat.service $out/lib/systemd/system/ethercat.service substituteInPlace $out/etc/ethercat.conf --replace 'MASTER0_DEVICE=""' 'MASTER0_DEVICE="${master_device0}"' substituteInPlace $out/etc/ethercat.conf --replace 'DEVICE_MODULES=""' 'DEVICE_MODULES="${device_modules}"' substituteInPlace $out/bin/ethercatctl --replace 'LSMOD=/sbin/lsmod' 'LSMOD=lsmod' substituteInPlace $out/bin/ethercatctl --replace 'MODPROBE=/sbin/modprobe' 'MODPROBE=modprobe' substituteInPlace $out/bin/ethercatctl --replace 'RMMOD=/sbin/rmmod' 'RMMOD=rmmod' substituteInPlace $out/bin/ethercatctl --replace 'MODINFO=/sbin/modinfo' 'MODINFO=modinfo' substituteInPlace $out/bin/ethercatctl --replace 'IP=/sbin/ip' 'IP=ip' ''; meta = with lib; { description = "Kernel modules and tools for IgH EtherCAT(R) Master component"; platforms = platforms.linux; }; }