Import code
This commit is contained in:
105
ethercat.nix
Normal file
105
ethercat.nix
Normal file
@@ -0,0 +1,105 @@
|
||||
{
|
||||
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",
|
||||
kernel
|
||||
}:
|
||||
|
||||
# Based on: https://aur.archlinux.org/packages/etherlab-ethercat
|
||||
|
||||
with pkgs;
|
||||
let
|
||||
version="1.5";
|
||||
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 = "stable-${version}";
|
||||
rev = "c8a512ac077f2ab51bb072bfbef1a687f9f1c090";
|
||||
#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"
|
||||
"--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=/bin/ip' 'IP=ip'
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Kernel modules and tools for IgH EtherCAT(R) Master component";
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user