112 lines
3.4 KiB
Nix
112 lines
3.4 KiB
Nix
{
|
|
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;
|
|
};
|
|
}
|