From 0932f3c220fdffbac273a6dc59c2a0683151bf15 Mon Sep 17 00:00:00 2001
From: Florian Pose <fp@igh-essen.com>
Date: Fri, 7 Apr 2006 10:38:47 +0000
Subject: [PATCH] Better installer and startup scripts.

---
 Makefile           | 16 +++++-----
 ethercat.conf.tmpl |  6 ++--
 ethercat.sh        | 77 ++++++++++++++++++++++++++++++++++++++++++++++
 install.sh         | 48 +++++++++++++++++++++--------
 4 files changed, 124 insertions(+), 23 deletions(-)
 create mode 100755 ethercat.sh

diff --git a/Makefile b/Makefile
index 64d06385..d1ac3e07 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,6 @@
 #------------------------------------------------------------------------------
 #
-#  Globales Makefile
-#
-#  IgH EtherCAT-Treiber
+#  EtherCAT Makefile
 #
 #  $Id$
 #
@@ -11,7 +9,7 @@
 ifneq ($(KERNELRELEASE),)
 
 #------------------------------------------------------------------------------
-# Kbuild-Abschnitt
+# kbuild section
 
 obj-m := master/ devices/
 
@@ -20,15 +18,17 @@ obj-m := master/ devices/
 else
 
 #------------------------------------------------------------------------------
-# Default-Abschnitt
+# default section
 
 ifneq ($(wildcard ethercat.conf),)
 include ethercat.conf
 else
-KERNELDIR := /usr/src/linux
-INSTALLDIR := /opt/ethercat
+KERNEL := `uname -r`
+DEVICEINDEX := 99
 endif
 
+KERNELDIR := /lib/modules/$(KERNEL)/build
+
 modules:
 	$(MAKE) -C $(KERNELDIR) M=`pwd`
 
@@ -36,7 +36,7 @@ clean:
 	$(MAKE) -C $(KERNELDIR) M=`pwd` clean
 
 install:
-	@./install.sh $(INSTALLDIR)
+	@./install.sh $(KERNEL) $(DEVICEINDEX)
 
 #------------------------------------------------------------------------------
 
diff --git a/ethercat.conf.tmpl b/ethercat.conf.tmpl
index 8ffedbca..4cc01214 100644
--- a/ethercat.conf.tmpl
+++ b/ethercat.conf.tmpl
@@ -10,9 +10,9 @@
 #------------------------------------------------------------------------------
 
 # The kernel to compile the EtherCAT sources against
-KERNELDIR = /usr/src/linux
+KERNEL := `uname -r`
 
-# Install directory used by "make install"
-INSTALLDIR := /opt/ethercat
+# PCI index of the EtherCAT device
+DEVICEINDEX := 99
 
 #------------------------------------------------------------------------------
diff --git a/ethercat.sh b/ethercat.sh
new file mode 100755
index 00000000..d9d12ca9
--- /dev/null
+++ b/ethercat.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+#------------------------------------------------------------------------------
+#
+#  EtherCAT rc script
+#
+#  $Id$
+#
+#------------------------------------------------------------------------------
+
+CONFIGFILE=/etc/sysconfig/ethercat
+
+#------------------------------------------------------------------------------
+
+print_usage()
+{
+    echo "Usage $0 { start | stop }"
+}
+
+unload_module()
+{
+    if lsmod | grep ^$1 > /dev/null; then
+	echo "  unloading module \"$1\"..."
+	rmmod $1 || exit 1
+    fi
+}
+
+#------------------------------------------------------------------------------
+
+# Get parameters
+if [ $# -eq 0 ]; then
+    print_usage
+    exit 1
+fi
+
+ACTION=$1
+
+# Load configuration from sysconfig
+
+if [ -f $CONFIGFILE ]; then
+    . $CONFIGFILE
+else
+    echo "ERROR: Configuration file \"$CONFIGFILE\" not found!"
+    exit 1
+fi
+
+case $ACTION in
+    start)
+	echo "Starting EtherCAT master..."
+	# remove modules
+	unload_module 8139too
+	unload_module 8139cp
+	unload_module ec_8139too
+	unload_module ec_master
+	echo "  loading master modules..."
+	if ! modprobe ec_8139too ec_device_index=$DEVICEINDEX; then
+	    echo "ERROR: Failed to load module!"
+	    exit 1
+	fi
+	;;
+    stop)
+	echo "Stopping EtherCAT master..."
+	unload_module ec_8139too
+	unload_module ec_master
+	if ! modprobe 8139too; then
+	    echo "Warning: Failed to restore 8139too module."
+	fi
+	;;
+    *)
+	print_usage
+	exit 1
+esac
+
+echo "done."
+exit 0
+
+#------------------------------------------------------------------------------
diff --git a/install.sh b/install.sh
index fa142926..915d00cb 100755
--- a/install.sh
+++ b/install.sh
@@ -8,11 +8,15 @@
 #
 #------------------------------------------------------------------------------
 
+CONFIGFILE=/etc/sysconfig/ethercat
+
+#------------------------------------------------------------------------------
+
 # install function
 
 install()
 {
-    echo "  installing $1"
+    echo "    $1"
     if ! cp $1 $INSTALLDIR; then exit 1; fi
 }
 
@@ -20,28 +24,48 @@ install()
 
 # Fetch parameter
 
-if [ $# -eq 0 ]; then
-    echo "Usage: $0 <INSTALLDIR>"
+if [ $# -ne 2 ]; then
+    echo "Usage: $0 <KERNEL> <DEVICEINDEX>"
     exit 1
 fi
 
-INSTALLDIR=$1
-echo "EtherCAT installer. Target: $INSTALLDIR"
+KERNEL=$1
+DEVICEINDEX=$2
 
-# Create installation directory
-
-if [ ! -d $INSTALLDIR ]; then
-    echo "  creating target directory."
-    if ! mkdir $INSTALLDIR; then exit 1; fi
-fi
+INSTALLDIR=/lib/modules/$KERNEL/kernel/drivers/net
+echo "EtherCAT installer - Kernel: $KERNEL"
 
 # Copy files
 
+echo "  installing modules..."
 install master/ec_master.ko
 install devices/ec_8139too.ko
 
-# Finished
+# Update dependencies
+
+echo "  building module dependencies..."
+depmod
+
+# Create configuration file
+
+if [ -f $CONFIGFILE ]; then
+    echo "  notice: using existing configuration file."
+else
+    echo "  creating $CONFIGFILE..."
+    echo "DEVICEINDEX=$DEVICEINDEX" > $CONFIGFILE || exit 1
+fi
+
+# Install rc script
+
+echo "  installing startup script..."
+cp ethercat.sh /etc/init.d/ethercat || exit 1
+if [ ! -L /usr/sbin/rcethercat ]; then
+    ln -s /etc/init.d/ethercat /usr/sbin/rcethercat || exit 1
+fi
+
+# Finish
 
+echo "EtherCAT installer done."
 exit 0
 
 #------------------------------------------------------------------------------
-- 
GitLab