initial working version
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
1.6.2/
|
||||
1.6.3/
|
||||
@@ -0,0 +1,13 @@
|
||||
# EtherCAT master
|
||||
|
||||
## Source
|
||||
|
||||
Sources will be cloned from git@gitlab.com:etherlab.org/ethercat.git
|
||||
|
||||
|
||||
## build
|
||||
|
||||
For debian12 see build-ethercat-4-debian12/*.txt
|
||||
|
||||
For yocto40-aarch64 see build-ethercat-4-yocto40-aarch64/*.txt
|
||||
|
||||
|
||||
+146
@@ -0,0 +1,146 @@
|
||||
|
||||
# EthercCAT kernel driver + libs&headers
|
||||
# (this is to replace old style ECmasterECMC EPICS module)
|
||||
# - building 1.6.3 for debian12
|
||||
|
||||
|
||||
# goto SKIPIT
|
||||
|
||||
# prepare somwhere (in anicic@gfa-ad82:workarea/EtherCAT/1.6.3):
|
||||
# cd /home/anicic/workarea/EtherCAT
|
||||
# mkdir 1.6.3
|
||||
# cd 1.6.3
|
||||
# git clone git@gitlab.com:etherlab.org/ethercat.git
|
||||
# cd ethercat
|
||||
# git checkout 1.6.3 -b gfa-1.6.3
|
||||
# cd ..
|
||||
# # you can delete ethercat folder (cloned repo) after building
|
||||
|
||||
|
||||
|
||||
# SKIPIT:
|
||||
|
||||
|
||||
On one target debian12 system:
|
||||
|
||||
|
||||
#####################################################################################################################################################################################
|
||||
# get it (usualy we have no git* on target)
|
||||
|
||||
cd /tmp
|
||||
# copy sources from somwhere
|
||||
scp -r anicic@gfa-ad82:workarea/EtherCAT/1.6.3/ethercat . # need password here
|
||||
|
||||
|
||||
# build
|
||||
|
||||
cd ethercat
|
||||
sudo apt update && sudo apt install -y pkg-config
|
||||
export LANG=en_US.UTF-8 ; export LANGUAGE=en_US:en ; export LC_ALL=C
|
||||
autoupdate
|
||||
echo 'pkgconfigdir = $(libdir)/pkgconfig' >> lib/Makefile.am
|
||||
./bootstrap
|
||||
./configure --prefix="/opt/etherlab" --sysconfdir=/etc \
|
||||
--enable-generic=yes --enable-e1000=no --enable-e1000e=no --enable-igb=yes --enable-igc=yes --enable-8139too=no --enable-r8169=no \
|
||||
--enable-hrtimer=yes --disable-debug-if --disable-debug-ring --enable-sii-assign=yes --enable-eoe=no
|
||||
#make -j all modules ### if building on 8GB (or less) RAMdisk based system, maybe will not work with -j
|
||||
make all modules
|
||||
cd ..
|
||||
|
||||
|
||||
#####################################################################################################################################################################################
|
||||
# build package for target debian12
|
||||
|
||||
EPICSHOSTARCH=deb12-x86_64
|
||||
ETHERCATGITVERSION=1.6.3
|
||||
ETHERCATVERSIONM=1
|
||||
ETHERCATVERSIONMM=${ETHERCATVERSIONM}.2
|
||||
ETHERCATVERSIONMMR=${ETHERCATVERSIONMM}.0
|
||||
ETHERCATDIR=ethercat
|
||||
KERNELVERS=`uname -r`
|
||||
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab/bin
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab/sbin
|
||||
cp -a ${ETHERCATDIR}/tool/ethercat ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab/bin
|
||||
cp -a ${ETHERCATDIR}/script/ethercatctl ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab/sbin
|
||||
chmod a+x ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab/sbin/ethercatctl
|
||||
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/master
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices/igb
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices/igc
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/examples
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/examples/mini
|
||||
cp -a ${ETHERCATDIR}/master/ec_master.ko ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/master
|
||||
cp -a ${ETHERCATDIR}/devices/ec_generic.ko ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices
|
||||
cp -a ${ETHERCATDIR}/devices/igb/ec_igb.ko ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices/igb
|
||||
cp -a ${ETHERCATDIR}/devices/igc/ec_igc.ko ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices/igc
|
||||
cp -a ${ETHERCATDIR}/examples/mini/ec_mini.ko ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/examples/mini
|
||||
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system
|
||||
cp -a ${ETHERCATDIR}/script/ethercat.service ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system/ethercat.service
|
||||
sed -i 's|#Requires=network.target|Requires=network.target|' ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system/ethercat.service
|
||||
sed -i 's|#After=network.target|After=network.target|' ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system/ethercat.service
|
||||
sed -i 's/^\(\(Requires=network\.target\) #.*\)$/\2/' ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system/ethercat.service
|
||||
sed -i 's/^\(\(After=network\.target\) #.*\)$/\2/' ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system/ethercat.service
|
||||
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/udev/rules.d
|
||||
echo 'KERNEL=="EtherCAT[0-9]*", SUBSYSTEM=="EtherCAT", MODE="0666"' > ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/udev/rules.d/99-ethercat.rules
|
||||
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/DEBIAN
|
||||
cat <<EOF >${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/DEBIAN/control
|
||||
Package: ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv
|
||||
Version: 1.6.3
|
||||
Section: custom
|
||||
Priority: optional
|
||||
Architecture: amd64
|
||||
Essential: no
|
||||
Maintainer: damir.anicic@psi.ch
|
||||
Description: EtherCAT driver
|
||||
This is longer description for
|
||||
EtherCAT linux driver
|
||||
EOF
|
||||
cat <<EOF >${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/DEBIAN/postinst
|
||||
#!/bin/bash
|
||||
echo "Setting up the ethercat driver for kernel ${KERNELVERS}"
|
||||
/sbin/depmod ${KERNELVERS}
|
||||
EOF
|
||||
chmod -R 755 ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/DEBIAN
|
||||
|
||||
sudo chown -R root:root ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv
|
||||
|
||||
dpkg-deb --build --root-owner-group ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv
|
||||
|
||||
|
||||
#####################################################################################################################################################################################
|
||||
# build tar for EPICS
|
||||
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/include
|
||||
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/lib
|
||||
cp -a ${ETHERCATDIR}/include/ecrt.h ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/include/ecrt.h
|
||||
cp -a ${ETHERCATDIR}/include/ectty.h ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/include/ectty.h
|
||||
cp -a ${ETHERCATDIR}/lib/.libs/libethercat.a ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/lib/libethercat.a
|
||||
cp -a ${ETHERCATDIR}/lib/.libs/libethercat.so ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/lib/libethercat.so
|
||||
cp -a ${ETHERCATDIR}/lib/.libs/libethercat.so.${ETHERCATVERSIONM} ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/lib/libethercat.so.${ETHERCATVERSIONM}
|
||||
cp -a ${ETHERCATDIR}/lib/.libs/libethercat.so.${ETHERCATVERSIONMMR} ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/lib/libethercat.so.${ETHERCATVERSIONMMR}
|
||||
echo "" > ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/Readme.txt
|
||||
echo "Created at : $(date)" >> ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/Readme.txt
|
||||
echo "On : $(uname -a)" >> ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/Readme.txt
|
||||
grep 'gitlab.' ${ETHERCATDIR}/.git/config | head -1 | awk '{print "ORIGIN : " $3}' >> ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/Readme.txt
|
||||
echo "" >> ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/Readme.txt
|
||||
chmod -R a+rw ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}
|
||||
(HERE=`pwd`; cd ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics; tar cvf ${HERE}/${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics.tar ${EPICSHOSTARCH})
|
||||
|
||||
|
||||
#####################################################################################################################################################################################
|
||||
# copy for installation
|
||||
|
||||
# for each sls-lc sf-lc hipa-lc proscan-lc
|
||||
# scp ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv.deb ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics.tar someuser@*-lc:/ioc/NeedfulThings/EtherCAT/install-packages/
|
||||
# and unpack tar file also
|
||||
# @ *-lc: cd /ioc/NeedfulThings/EtherCAT; mkdir -p 4epics/${ETHERCATGITVERSION; cd 4epics/${ETHERCATGITVERSION; tar xvf ../install-packages/${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics.tar )
|
||||
|
||||
# ALSO: chmod -R a+rw /ioc/NeedfulThings/EtherCAT/4epics/${ETHERCATGITVERSION
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
# get sources from somwhere:
|
||||
# copy from : scp -r anicic@gfa-ad82:~/workarea/EtherCAT/1.6.3 .
|
||||
# or (mkdir 1.6.3; cd 1.6.3; git clone git@gitlab.com:etherlab.org/ethercat.git; cd ethercat; git checkout 1.6.3 -b gfa-1.6.3)
|
||||
|
||||
|
||||
# do this on machine with access to kernel sources and cross cc for yocto40-aarch64
|
||||
# see build-yoctu40-aarch64.sh
|
||||
(
|
||||
cd 1.6.3/ethercat
|
||||
(./bootstrap; ../../build-ethercat-4-yocto40-aarch64/build-yocto40-aarch64.sh -a yocto40-aarch64 -m 1.6.3 -k 5.15.19-rt29-gfa -c)
|
||||
cd ../..
|
||||
)
|
||||
+322
@@ -0,0 +1,322 @@
|
||||
#!/bin/bash
|
||||
|
||||
# this is now only for building ZynqMP version:
|
||||
# (./bootstrap; ../../tmp-build.sh -a yocto40-aarch64 -s none-lc -m 1.6.3 -k 5.15.19-rt29-gfa )
|
||||
# (./bootstrap; ../../tmp-build.sh -a yocto40-aarch64 -s none-lc -m 1.6.3 -k 5.15.19-rt29-gfa -c)
|
||||
|
||||
|
||||
|
||||
BOLD='\033[1m'
|
||||
RED='\033[31m'
|
||||
GREEN='\033[32m'
|
||||
BLUE='\033[34m'
|
||||
CYAN='\033[36m'
|
||||
NC='\033[0m'
|
||||
|
||||
|
||||
# NOTE: this script is not perfect, if change EPICS_HOST_ARCH pass also option -c to regenerate config, ...
|
||||
|
||||
|
||||
SUPPORTED_EPICS_ARCH=" yocto40-aarch64 "
|
||||
EPICS_HOST_ARCH="-not-defined-"
|
||||
|
||||
|
||||
set -e
|
||||
|
||||
|
||||
ETHVERSION=1.2.0
|
||||
#ARG_MODVER=1.6.3
|
||||
ARG_MODVER='test'
|
||||
|
||||
EXEC_CFG=0
|
||||
TEST=0
|
||||
|
||||
# defaults for arguments (these defaults are actually meaningless)
|
||||
ARG_KERNVER=''
|
||||
|
||||
DO_INSTALL="yes"
|
||||
DO_INSTALL_BIN="yes"
|
||||
|
||||
|
||||
|
||||
while getopts "a:m:k:cbl" opt; do
|
||||
case $opt in
|
||||
a)
|
||||
EPICS_HOST_ARCH=$OPTARG
|
||||
if [[ ${SUPPORTED_EPICS_ARCH} != *${EPICS_HOST_ARCH}* ]]
|
||||
then
|
||||
echo "$EPICS_HOST_ARCH is not one of supported <${SUPPORTED_EPICS_ARCH}>"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
m)
|
||||
# module version
|
||||
ARG_MODVER=$OPTARG
|
||||
if [ "$ARG_MODVER" == "test" ] || [ "$ARG_MODVER" == "TEST" ]; then
|
||||
TEST=1
|
||||
fi
|
||||
echo "Module version $ARG_MODVER"
|
||||
;;
|
||||
k)
|
||||
# kernel version
|
||||
ARG_KERNVER=$OPTARG
|
||||
echo "Kernel version $ARG_KERNVER"
|
||||
;;
|
||||
b)
|
||||
# execute configure
|
||||
DO_INSTALL="no"
|
||||
echo "Just building - will not install"
|
||||
;;
|
||||
l)
|
||||
# execute configure
|
||||
DO_INSTALL_BIN="no"
|
||||
echo "Will not install to .../bin"
|
||||
;;
|
||||
c)
|
||||
# execute configure
|
||||
EXEC_CFG=1
|
||||
echo "Configure will be executed"
|
||||
;;
|
||||
\?)
|
||||
HOST_KERNELS=$(find /usr/src/kernels/ -mindepth 1 -maxdepth 1 -type d)
|
||||
IFC_KERNELS=$(find /opt/eldk-5.2/kernel/ -mindepth 1 -maxdepth 1 -name *-linux-*)
|
||||
RPI_KERNELS=$(find /net/crosst-hafs/export/cross_tools/raspberrypi/ -mindepth 1 -maxdepth 1 -type d -name linux-headers-*)
|
||||
ZYNQMP_KERNELS=$(find /psi.ch/group/8210/8211/anicic/ZynqMP/RootFsAddons-v4/my-kernel/ -mindepth 1 -maxdepth 1 -type d -name linux-xlnx-*)
|
||||
|
||||
HOSTSYSTEM=$(< /etc/system-release)
|
||||
|
||||
echo "Invalid option: -$OPTARG" >&2
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
echo "Usage: `basename $0` [-a epics-host-arch] [-m module_version] [-k kernel_version] [-c] "
|
||||
echo " "
|
||||
echo " module_version (-m): [n.m|test] (n.m = 2.1, 2.2, etc)"
|
||||
echo " configure (-c): execute configure (automatically done when needed)"
|
||||
echo " kernel_version (-k):"
|
||||
for i in $HOST_KERNELS; do
|
||||
printf "%40s ($HOSTSYSTEM, %s)\n" ${i##*/} ${i##*.}
|
||||
done
|
||||
for i in $IFC_KERNELS; do
|
||||
printf "%40s (ifc, PPC)\n" ${i#*-linux-}
|
||||
done
|
||||
for i in $RPI_KERNELS; do
|
||||
printf "%40s (raspberry pi, arm)\n" ${i#*linux-headers-}
|
||||
done
|
||||
for i in $ZYNQMP_KERNELS; do
|
||||
printf "%40s (zynqmp, arm64)\n" ${i#*linux-xlnx-}
|
||||
done
|
||||
echo
|
||||
echo "Note: Only one architecture (ifc, x86_64, i686, ...) can be active (\"configured\") at any given time"
|
||||
echo " Also, configure has to be executed at least once for the given architecture"
|
||||
echo "-------------------------------------------------------------------------------"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ ${SUPPORTED_EPICS_ARCH} != *${EPICS_HOST_ARCH}* ]]
|
||||
then
|
||||
echo "$EPICS_HOST_ARCH is not one of supported <${SUPPORTED_EPICS_ARCH}>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "EPICS_HOST_ARCH = $EPICS_HOST_ARCH"
|
||||
|
||||
#
|
||||
# =========================================================================================================
|
||||
#
|
||||
unset LD_LIBRARY_PATH
|
||||
|
||||
EXTRAS=""
|
||||
ENADIS="--enable-generic=yes --enable-e1000=no --enable-e1000e=no --enable-igb=no --enable-8139too=no --enable-r8169=no \
|
||||
--enable-hrtimer=yes --disable-debug-if --disable-debug-ring --enable-sii-assign=yes --enable-eoe=no"
|
||||
|
||||
|
||||
case "${EPICS_HOST_ARCH}" in
|
||||
yocto40-aarch64)
|
||||
if [ -d "$(ls -d /psi.ch/group/8210/8211/anicic/ZynqMP/RootFsAddons-v4/my-kernel/linux-xlnx-$ARG_KERNVER 2>/dev/null)" ] || [ -z $ARG_KERNVER ]
|
||||
then
|
||||
KERNEL_SRC=$(ls -d /psi.ch/group/8210/8211/anicic/ZynqMP/RootFsAddons-v4/my-kernel/linux-xlnx-$ARG_KERNVER/) || KERNEL_SRC=''
|
||||
GCCBIN=/opt/yocto40-aarch64/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux
|
||||
HOST="--host=aarch64-poky-linux"
|
||||
ARCH="arm64"
|
||||
|
||||
CCC=${HOST:+${HOST#--host=}-}
|
||||
SYSROOT=/opt/yocto40-aarch64/sysroots/cortexa53-poky-linux
|
||||
EXTRAS="CC=\"${CCC}gcc --sysroot=$SYSROOT\" CXX=\"${CCC}g++ --sysroot=$SYSROOT\" LD=\"${CCC}ld --sysroot=$SYSROOT\" --with-sysroot=$SYSROOT"
|
||||
|
||||
ENADIS="--enable-generic=yes --enable-e1000=no --enable-e1000e=no --enable-igb=no --enable-8139too=no --enable-r8169=no \
|
||||
--enable-hrtimer=yes --disable-debug-if --disable-debug-ring --enable-sii-assign=yes --enable-eoe=no"
|
||||
|
||||
else
|
||||
echo -e "Compiling for kernel version ${RED}${BOLD}$ARG_KERNVER${NC} - kernel sources not found"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported build for EPICS_HOST_ARCH=$EPICS_HOST_ARCH"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# if -k option is not given, there can also be no kernel source
|
||||
[ -z $ARG_KERNVER ] && KERNEL_SRC=''
|
||||
|
||||
|
||||
if [ -n "$GCCBIN" ]; then
|
||||
PATH=$GCCBIN:$PATH
|
||||
fi
|
||||
|
||||
if [ -f .last_kernelversion ]
|
||||
then
|
||||
if [ "$ARG_KERNVER" != "$(< .last_kernelversion)" ] ; then
|
||||
echo "Kernel differs from last build: running \"configure\""
|
||||
EXEC_CFG=1
|
||||
fi 2>/dev/null
|
||||
else
|
||||
EXEC_CFG=1
|
||||
fi
|
||||
|
||||
if [ -f .last_epicshostarch ]
|
||||
then
|
||||
if [ "$EPICS_HOST_ARCH" != "$(< .last_epicshostarch)" ] ; then
|
||||
echo "EPICS_HOST_ARCH differs from last build: running \"configure\""
|
||||
EXEC_CFG=1
|
||||
fi 2>/dev/null
|
||||
else
|
||||
EXEC_CFG=1
|
||||
fi
|
||||
|
||||
BUILD_KERNEL_MODULES="--enable-kernel=no"
|
||||
[ ! -z $KERNEL_SRC ] && BUILD_KERNEL_MODULES="--enable-kernel=yes --with-linux-dir=$KERNEL_SRC"
|
||||
|
||||
if [ ! -f Makefile ]
|
||||
then
|
||||
EXEC_CFG=1
|
||||
fi
|
||||
|
||||
if [ $EXEC_CFG == 1 ]; then
|
||||
dye make clean || echo "********** clean failed, but go on **********"
|
||||
eval dye ./configure $HOST $BUILD_KERNEL_MODULES \
|
||||
--prefix=/usr/local --sysconfdir=/etc \
|
||||
$ENADIS \
|
||||
$EXTRAS
|
||||
fi
|
||||
echo $ARG_KERNVER > .last_kernelversion
|
||||
echo $EPICS_HOST_ARCH > .last_epicshostarch
|
||||
|
||||
dye make all
|
||||
|
||||
[ -z $KERNEL_SRC ] && echo "Not building kernel modules (no -k option given)"
|
||||
[ ! -z $KERNEL_SRC ] && dye make modules ARCH=$ARCH CROSS_COMPILE=${HOST:+${HOST#--host=}-} V=0
|
||||
|
||||
|
||||
#
|
||||
# =========================================================================================================
|
||||
#
|
||||
ARG_KERNVER_SHOW="$ARG_KERNVER"
|
||||
[ -z $ARG_KERNVER_SHOW ] && ARG_KERNVER_SHOW="none"
|
||||
echo -e "---------------------------------------------------------------------------------------------------------"
|
||||
echo -e
|
||||
echo -e " ARCH ${RED}$ARCH${NC}, EPICS_HOST_ARCH ${RED}$EPICS_HOST_ARCH${NC}, EtherCAT Master ${RED}${BOLD}$ARG_MODVER${NC}, Kernel ${RED}${BOLD}$ARG_KERNVER_SHOW${NC}"
|
||||
echo -e
|
||||
echo -e "---------------------------------------------------------------------------------------------------------"
|
||||
|
||||
ROOT_TARGET_DIR=/ioc/NeedfulThings/EtherCAT/4epics
|
||||
HOSTNAME=`hostname`
|
||||
HOSTNAME=${HOSTNAME%%.*}
|
||||
|
||||
if [ ! -d "$ROOT_TARGET_DIR" ] && [ ! -d "/import$ROOT_TARGET_DIR" ]; then
|
||||
echo -e "Directory ${BOLD}$ROOT_TARGET_DIR${NC} does not exist here ($HOSTNAME)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf .deploy
|
||||
mkdir -p .deploy/include
|
||||
mkdir -p .deploy/lib
|
||||
[ "$DO_INSTALL_BIN" != "no" ] && mkdir -p .deploy/bin
|
||||
[ ! -z $KERNEL_SRC ] && mkdir -p .deploy/kernel/${ARG_KERNVER}
|
||||
LIBNAME=libethercat.so.${ETHVERSION}
|
||||
|
||||
cp include/*.h .deploy/include
|
||||
cp lib/.libs/$LIBNAME .deploy/lib
|
||||
cp lib/.libs/libethercat.a .deploy/lib
|
||||
[ ! -z $KERNEL_SRC ] && cp master/ec_master.ko .deploy/kernel/${ARG_KERNVER}
|
||||
[ ! -z $KERNEL_SRC ] && cp devices/ec_generic.ko .deploy/kernel/${ARG_KERNVER}
|
||||
|
||||
|
||||
if [ ${TEST} = 0 ]; then
|
||||
ln -s $LIBNAME .deploy/lib/${LIBNAME%.*.*}
|
||||
ln -s $LIBNAME .deploy/lib/${LIBNAME%.*.*.*}
|
||||
fi
|
||||
|
||||
|
||||
TARGET_DIR=${ROOT_TARGET_DIR}/$ARG_MODVER/$EPICS_HOST_ARCH
|
||||
ARCHIVENAME=ethercat-$ARG_MODVER-$ARG_KERNVER-drv-4epics.tar
|
||||
|
||||
|
||||
echo "" > .deploy/Readme.txt
|
||||
echo "Created at : $(date)" >> .deploy/Readme.txt
|
||||
echo "On : $(uname -a)" >> .deploy/Readme.txt
|
||||
grep 'gitlab.' .git/config | head -1 | awk '{print "ORIGIN : " $3}' >> .deploy/Readme.txt
|
||||
echo "" >> .deploy/Readme.txt
|
||||
|
||||
|
||||
[ "$DO_INSTALL_BIN" != "no" ] && cp tool/ethercat .deploy/bin/ethercat
|
||||
[ "$DO_INSTALL_BIN" != "no" ] && cp script/ethercatctl .deploy/bin/ethercatctl
|
||||
[ "$DO_INSTALL_BIN" != "no" ] && chmod a+x .deploy/bin/ethercat*
|
||||
|
||||
echo "# paths for this EtherCAT version" > .deploy/this-paths
|
||||
echo "export PATH=\$PATH:$TARGET_DIR/bin" >> .deploy/this-paths
|
||||
echo "export MODULE_PATH=$TARGET_DIR/kernel/$ARG_KERNVER" >> .deploy/this-paths
|
||||
echo "#export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$TARGET_DIR/lib" >> .deploy/this-paths
|
||||
|
||||
|
||||
# original ethercatctl needs modules to be installed in /lib/modules/...
|
||||
sed -i "/^LSMOD=/i\
|
||||
. /ioc/NeedfulThings/EtherCAT/4epics/$ARG_MODVER/$EPICS_HOST_ARCH/this-paths\n\
|
||||
MODINS=/sbin/insmod
|
||||
" .deploy/bin/ethercatctl
|
||||
sed -i 's|${MODPROBE} ${MODPROBE_FLAGS} ec_master|${MODINS} ${MODPROBE_FLAGS} $MODULE_PATH/ec_master.ko|' .deploy/bin/ethercatctl
|
||||
sed -i 's|${MODINFO} "${ECMODULE}"|${MODINFO} "$MODULE_PATH/${ECMODULE}.ko"|' .deploy/bin/ethercatctl
|
||||
sed -i 's|${MODPROBE} ${MODPROBE_FLAGS} "${ECMODULE}"|${MODINS} ${MODPROBE_FLAGS} "$MODULE_PATH/${ECMODULE}.ko"|' .deploy/bin/ethercatctl
|
||||
sed -i "s|/usr/local/bin/ethercat|/ioc/NeedfulThings/EtherCAT/4epics/$ARG_MODVER/$EPICS_HOST_ARCH/bin/ethercat|" .deploy/bin/ethercatctl
|
||||
|
||||
echo -e "${BOLD}${CYAN}Creating .deploy/$ARCHIVENAME for copy/unpack at $TARGET_DIR on *-lc servers${NC}"
|
||||
|
||||
echo "# load EtherCAT modules and start configured intercfaces" > .deploy/prepare-load-drvr-and-start-ethercat.sh
|
||||
echo ". /ioc/NeedfulThings/EtherCAT/4epics/$ARG_MODVER/$EPICS_HOST_ARCH/this-paths" >> .deploy/prepare-load-drvr-and-start-ethercat.sh
|
||||
echo "cp /ioc/NeedfulThings/EtherCAT/4epics/$ARG_MODVER/$EPICS_HOST_ARCH/gfa-ethercat.conf /etc/ethercat.conf" >> .deploy/prepare-load-drvr-and-start-ethercat.sh
|
||||
echo "ethercatctl start" >> .deploy/prepare-load-drvr-and-start-ethercat.sh
|
||||
chmod a+x .deploy/prepare-load-drvr-and-start-ethercat.sh
|
||||
|
||||
# our version of /etc/ethercat.conf
|
||||
cp ../../build-ethercat-4-yocto40-aarch64/gfa-ethercat.conf .deploy/gfa-ethercat.conf
|
||||
|
||||
(cd .deploy; tar cvf ${ARCHIVENAME} --exclude ${ARCHIVENAME} .)
|
||||
|
||||
#echo "======================= TAR FILE ========================="; tar tf .deploy/${ARCHIVENAME}; exit 0
|
||||
|
||||
|
||||
|
||||
[ "$DO_INSTALL" = "no" ] && echo "Will not install (-b option given)"
|
||||
[ "$DO_INSTALL" = "no" ] && exit 0
|
||||
|
||||
|
||||
echo
|
||||
echo -e "${BOLD}${GREEN}Build completed${NC}"
|
||||
echo
|
||||
|
||||
|
||||
echo -e "${CYAN}#${NC}"
|
||||
echo -e "${CYAN}# Now copy and unpack on NFS servers${NC}"
|
||||
echo -e "${CYAN}#${NC}"
|
||||
echo -e "${CYAN}# for each sls-lc sf-lc hipa-lc proscan-lc ${NC}"
|
||||
echo -e "${CYAN}# scp .deploy/${ARCHIVENAME} someuser@*-lc:/ioc/NeedfulThings/EtherCAT/install-packages/ ${NC}"
|
||||
echo -e "${CYAN}# and unpack tar file also ${NC}"
|
||||
echo -e "${CYAN}# at *-lc: ${NC}"
|
||||
echo -e "${CYAN}# cd /ioc/NeedfulThings/EtherCAT "
|
||||
echo -e "${CYAN}# mkdir -p 4epics/${ARG_MODVER}/${EPICS_HOST_ARCH} ${NC}"
|
||||
echo -e "${CYAN}# cd 4epics/${ARG_MODVER}/${EPICS_HOST_ARCH} ${NC}"
|
||||
echo -e "${CYAN}# tar xvf ../../../install-packages/${ARCHIVENAME} ${NC}"
|
||||
echo -e "${CYAN}#${NC}"
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
# -------------------------------------------------------------------------
|
||||
# Network devices to bind EtherCAT master
|
||||
#
|
||||
# master devices
|
||||
# device kernel module
|
||||
DEVICE_MODULES="generic"
|
||||
#DEVICE_MODULES="igb"
|
||||
#
|
||||
# devices to enable
|
||||
#
|
||||
LINK_DEVICES=""
|
||||
# end of link devices
|
||||
#
|
||||
# AD82 added on 27.09.2023
|
||||
# you can redefine:
|
||||
# DEVICE_MODULES="generic" # this is default
|
||||
# DEVICE_MODULES="igb"
|
||||
# DEVICE_MODULES="igb generic"
|
||||
# DEVICE_MODULES="or whichever drivers you want"
|
||||
#
|
||||
# AD82 added on 06.11.2024 - can also (re)define LINK_DEVICES and MAC addresses (MASTER*_DEVICE)
|
||||
#
|
||||
USEDTHERCATDRVRFN=""
|
||||
MYCFGDIR="/ioc/hosts/`hostname`/cfg"
|
||||
MYETHERCATDRVRFN="${MYCFGDIR}/ETHERCATDRVR"
|
||||
if [ -f ${MYETHERCATDRVRFN} ]
|
||||
then
|
||||
USEDTHERCATDRVRFN=${MYETHERCATDRVRFN}
|
||||
else
|
||||
MYCFGDIR="/ioc/`hostname`/cfg"
|
||||
MYETHERCATDRVRFN="${MYCFGDIR}/ETHERCATDRVR"
|
||||
if [ -f ${MYETHERCATDRVRFN} ]
|
||||
then
|
||||
USEDTHERCATDRVRFN=${MYETHERCATDRVRFN}
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${USEDTHERCATDRVRFN}" ]
|
||||
then
|
||||
. ${USEDTHERCATDRVRFN}
|
||||
|
||||
# echo "My DEVICE_MODULES=\"${DEVICE_MODULES}\" # see ${MYETHERCATDRVRFN}"
|
||||
if [[ -n "$LINK_DEVICES" && -n "$LINK_DEVICE_MACS" ]]
|
||||
then
|
||||
# echo "Both LINK_DEVICES and LINK_DEVICE_MACS are not empty - will (re)define MASTER*_DEVICE vars"
|
||||
|
||||
# unset any MASTER*_DEICE if already defined (should be none)
|
||||
for var in $(compgen -v | grep -E '^MASTER[0-9]+_DEVICE$')
|
||||
do
|
||||
unset "$var"
|
||||
done
|
||||
|
||||
counter=0
|
||||
for mac in $LINK_DEVICE_MACS
|
||||
do
|
||||
eval "MASTER${counter}_DEVICE='$mac'"
|
||||
((counter++))
|
||||
done
|
||||
|
||||
#echo "New ethercat vars:"
|
||||
#echo "DEVICE_MODULES: $DEVICE_MODULES"
|
||||
#echo "LINK_DEVICES: $LINK_DEVICES"
|
||||
#echo "MASTER*_DEICE: $(compgen -v | grep -E '^MASTER[0-9]+_DEVICE$')"
|
||||
|
||||
fi
|
||||
fi
|
||||
Reference in New Issue
Block a user