diff -r 59913f648e04 -r ba69f7f34fbf script/init.d/ethercat --- a/script/init.d/ethercat Wed Feb 21 13:36:08 2007 +0000 +++ b/script/init.d/ethercat Wed Feb 21 13:38:02 2007 +0000 @@ -56,7 +56,7 @@ ETHERCAT_CONFIG=/etc/sysconfig/ethercat if [ ! -r ${ETHERCAT_CONFIG} ]; then - echo "${ETHERCAT_CONFIG} not existing"; + echo ${ETHERCAT_CONFIG} not existing; if [ "${1}" = "stop" ]; then exit 0 else @@ -111,17 +111,6 @@ MASTER_INDEX=$(expr ${MASTER_INDEX} + 1) done - # unload conflicting modules at first - for MODULE in 8139too; do - if lsmod | grep "^${MODULE} " > /dev/null; then - if ! rmmod ${MODULE}; then - /bin/false - rc_status -v - rc_exit - fi - fi - done - # load master module if ! modprobe ec_master main=${DEVICES} backup=${BACKUPS}; then modprobe 8139too @@ -139,29 +128,43 @@ # create character device mknod /dev/${XMLDEVICE}0 c ${MAJOR} 0 - # load device module - if ! modprobe ec_8139too; then - rmmod ec_master - modprobe 8139too - /bin/false - rc_status -v - rc_exit - fi - - rc_status -v - ;; - -stop) - echo -n "Shutting down EtherCAT master " - - # unload modules - for mod in ec_8139too ec_master; do - if lsmod | grep "^$mod " > /dev/null; then - if ! rmmod $mod; then + # check for modules to replace + for MODULE in ${DEVICE_MODULES}; do + ECMODULE=ec_${MODULE} + if ! modinfo ${ECMODULE} > /dev/null; then + continue + fi + if lsmod | grep "^${MODULE} " > /dev/null; then + if ! rmmod ${MODULE}; then /bin/false rc_status -v rc_exit - fi; + fi + fi + if ! modprobe ${ECMODULE}; then + modprobe ${MODULE} # try to restore module + /bin/false + rc_status -v + rc_exit + fi + done + + rc_status -v + ;; + +stop) + echo -n "Shutting down EtherCAT master " + + # unload EtherCAT device modules + for MODULE in ${DEVICE_MODULES} master; do + ECMODULE=ec_${MODULE} + if ! lsmod | grep -q "^${ECMODULE} "; then + continue + fi + if ! rmmod ${ECMODULE}; then + /bin/false + rc_status -v + rc_exit fi; done @@ -171,9 +174,11 @@ sleep 1 # reload previous modules - if ! modprobe 8139too; then - echo "Warning: Failed to restore 8139too module." - fi + for MODULE in ${DEVICE_MODULES}; do + if ! modprobe ${MODULE}; then + echo Warning: Failed to restore ${MODULE}. + fi + done rc_status -v ;; @@ -188,13 +193,14 @@ status) echo -n "Checking for EtherCAT " - lsmod | grep "^ec_master " > /dev/null - master_running=$? - lsmod | grep "^ec_8139too " > /dev/null - device_running=$? - - # master module and device module loaded? - test $master_running -eq 0 -a $device_running -eq 0 + lsmod | grep -q "^ec_master " + MASTERS_RUNNING=$? + + ! grep -q "(WAITING)" /sys/ethercat/master*/info + MASTERS_IDLE=$? + + # master module loaded and masters not waiting for devices? + test ${MASTERS_RUNNING} -eq 0 -a ${MASTERS_IDLE} -eq 0 rc_status -v ;;