Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions scripts/latency-histogram
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,10 @@ source [file join [exec linuxcnc_var HALLIB_DIR] lh_chart.tcl]
proc set_defaults {} {
set ::LH(start) [clock seconds]
# don't include glxgears, error suffices
program_check {halrun halcmd lsmod pgrep pkill hostname}
set ::LH(realtime) [exec linuxcnc_var REALTIME]
program_check {halrun halcmd lsmod pgrep pkill hostname realtime}
if {[string first rtai [string tolower $::tcl_platform(osVersion)]] >=0} {
set ::LH(rtai) rtai
set ::LH(realtime) [exec linuxcnc_var REALTIME]
program_check $::LH(realtime)
}

set ::LH(use_x) 1
Expand Down Expand Up @@ -317,6 +316,9 @@ proc load_packages {} {
exec $::LH(realtime) start &
progress "Delay for realtime startup"
after 1000 ;# wait to load Hal package
} else {
exec $::LH(realtime) start &
#No need to wait, uspace realtime has no startup delay
}

# augment ::auto_path for special case:
Expand Down
256 changes: 137 additions & 119 deletions scripts/realtime.in
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,17 @@ CheckKernel() {
# Shellcheck doesn't know about substitution
# shellcheck disable=SC2194
case "@KERNEL_VERS@" in
"") ;;
"")
;;
*)
if [ "$(uname -r)" != "@KERNEL_VERS@" ]; then
cat 1>&2 << EOF
if [ "$(uname -r)" != "@KERNEL_VERS@" ]; then
cat 1>&2 << EOF
RTAPI requires the real-time kernel @KERNEL_VERS@ to run. Before running
this realtime application, reboot and choose this kernel at the boot menu.
EOF
exit 1
fi
exit 1
fi
;;
esac
}

Expand Down Expand Up @@ -71,8 +73,8 @@ CheckConfig(){
fi
fi
if [ -z "$RTAPICONF" ] ; then
echo "Missing rtapi.conf. Check your installation." 1>&2
exit 1
echo "Missing rtapi.conf. Check your installation." 1>&2
exit 1
fi
INSMOD="@INSMOD@"
RMMOD="@RMMOD@"
Expand All @@ -94,10 +96,12 @@ CheckConfig(){
MODULES_LOAD=
MODULES_UNLOAD=
case $RTPREFIX in
uspace) SHM_DEV=/dev/zero;;
uspace)
SHM_DEV=/dev/zero
;;
esac
for MOD in $MODULES ; do
eval MOD=\${MODPATH_"$MOD"}
eval MOD="\${MODPATH_${MOD}}"
if [ -z "$MOD" ]; then continue; fi
if [ -L "$MOD" ]; then
MOD=${MOD%/*}/$(readlink "$MOD")
Expand All @@ -108,76 +112,86 @@ CheckConfig(){
MODULES_UNLOAD="$MOD $MODULES_UNLOAD"
done
case $RTPREFIX in
(*rtai*)
MODULES_LOAD="$MODULES_LOAD $RTLIB_DIR/rtapi$MODULE_EXT $RTLIB_DIR/hal_lib$MODULE_EXT"
MODULES_UNLOAD="hal_lib rtapi $MODULES_UNLOAD"
SHM_DEV=/dev/rtai_shm
;;
(*)
MODULES_UNLOAD=
*rtai*)
MODULES_LOAD="$MODULES_LOAD $RTLIB_DIR/rtapi$MODULE_EXT $RTLIB_DIR/hal_lib$MODULE_EXT"
MODULES_UNLOAD="hal_lib rtapi $MODULES_UNLOAD"
SHM_DEV=/dev/rtai_shm
;;
*)
MODULES_UNLOAD=
;;
esac
}

CheckStatus(){
case $RTPREFIX in
uspace)
if [ -z "$($PS -o stat= -o comm= -C rtapi_app | $GREP -v '^Z')" ]; then
echo rtapi_app is not running
return 1
else
echo rtapi_app is running
return 0
fi ;;
*)
# check loaded/unloaded status of modules
unset NOTLOADED
for MOD in $MODULES_UNLOAD ; do
if "$LSMOD" | awk '{print $1}' | $GREP -x "$MOD" >/dev/null ; then
echo "$MOD is loaded"
uspace)
if [ -z "$($PS -o stat= -o comm= -C rtapi_app | $GREP -v '^Z')" ]; then
echo rtapi_app is not running
return 1
else
echo "$MOD is not loaded"
NOTLOADED=NOT
echo rtapi_app is running
return 0
fi
done
if [ -z "$NOTLOADED" ]; then
return 0
else
return 1
fi
;;
*)
# check loaded/unloaded status of modules
unset NOTLOADED
for MOD in $MODULES_UNLOAD ; do
if "$LSMOD" | awk '{print $1}' | $GREP -x "$MOD" >/dev/null ; then
echo "$MOD is loaded"
else
echo "$MOD is not loaded"
NOTLOADED=NOT
fi
done
if [ -z "$NOTLOADED" ]; then
return 0
else
return 1
fi
;;
esac
}

CheckMem(){
# check for user space processes using shared memory
if [ -e /dev/mbuff ] ; then
# device file exists, check for processes using it
if $FUSER -s /dev/mbuff 2>/dev/null; then
# at least one process is using it
echo "ERROR: Can't remove RTLinux modules, kill the following process(es) first"
$FUSER -v /dev/mbuff
exit 1
fi
# device file exists, check for processes using it
if $FUSER -s /dev/mbuff 2>/dev/null; then
# at least one process is using it
echo "ERROR: Can't remove RTLinux modules, kill the following process(es) first"
$FUSER -v /dev/mbuff
exit 1
fi
elif [ -e /dev/rtai_shm ] ; then
# device file exists, check for processes using it
if $FUSER -s /dev/rtai_shm 2>/dev/null; then
# at least one process is using it
echo "ERROR: Can't remove RTAI modules, kill the following process(es) first"
$FUSER -v /dev/rtai_shm
exit 1
fi
# device file exists, check for processes using it
if $FUSER -s /dev/rtai_shm 2>/dev/null; then
# at least one process is using it
echo "ERROR: Can't remove RTAI modules, kill the following process(es) first"
$FUSER -v /dev/rtai_shm
exit 1
fi
fi
}

Load(){
CheckKernel
for MOD in $MODULES_LOAD ; do
if ! [ -d "/sys/module/$(basename "$MOD" .ko)" ]; then
$INSMOD "$MOD" || return $?
fi
done
if [ "$DEBUG" != "" ] && [ -w /proc/rtapi/debug ] ; then
echo "$DEBUG" > /proc/rtapi/debug
fi
case $RTPREFIX in
uspace)
rtapi_app start
;;
*rtai*)
for MOD in $MODULES_LOAD ; do
if ! [ -d "/sys/module/$(basename "$MOD" .ko)" ]; then
$INSMOD "$MOD" || return $?
fi
done
if [ "$DEBUG" != "" ] && [ -w /proc/rtapi/debug ] ; then
echo "$DEBUG" > /proc/rtapi/debug
fi
;;
esac
}

CheckLoaded(){
Expand All @@ -196,29 +210,32 @@ CheckLoaded(){

Unload(){
CheckKernel

case $RTPREFIX in
uspace)
rtapi_app exit
uspace)
rtapi_app exit

# wait 5 seconds for rtapi_app to die and be reaped by its parent
START=$SECONDS
local NPROCS
while [ 5 -gt $((SECONDS-START)) ]; do
# wait 5 seconds for rtapi_app to die and be reaped by its parent
START=$SECONDS
local NPROCS
while [ 5 -gt $((SECONDS-START)) ]; do
NPROCS=$(ps -C rtapi_app -o stat= -o comm= | $GREP -v '^Z' | wc -l)
if [ "$NPROCS" -eq 0 ]; then
break
fi
sleep 0.1
done
NPROCS=$(ps -C rtapi_app -o stat= -o comm= | $GREP -v '^Z' | wc -l)
if [ "$NPROCS" -eq 0 ]; then
break
if [ "$NPROCS" -gt 0 ]; then
echo "ERROR: rtapi_app failed to die" 1>&2
fi
sleep 0.1
done
NPROCS=$(ps -C rtapi_app -o stat= -o comm= | $GREP -v '^Z' | wc -l)
if [ "$NPROCS" -gt 0 ]; then
echo "ERROR: rtapi_app failed to die" 1>&2
fi

ipcrm -M 0x48414c32 2>/dev/null ;# HAL_KEY
ipcrm -M 0x90280A48 2>/dev/null ;# RTAPI_KEY
ipcrm -M 0x48484c34 2>/dev/null ;# UUID_KEY
ipcrm -M 0x48414c32 2>/dev/null ;# HAL_KEY
ipcrm -M 0x90280A48 2>/dev/null ;# RTAPI_KEY
ipcrm -M 0x48484c34 2>/dev/null ;# UUID_KEY
;;
esac

for module in $MODULES_UNLOAD ; do
$RMMOD "$module"
done
Expand All @@ -227,12 +244,13 @@ Unload(){
Verify(){
HAS_REALTIME=false
case $RTPREFIX in
uspace)
rtapi_app check_rt && HAS_REALTIME=true
;;
(*rtai*)
echo "RTAI"
HAS_REALTIME=true
uspace)
rtapi_app check_rt && HAS_REALTIME=true
;;
*rtai*)
echo "RTAI"
HAS_REALTIME=true
;;
esac

if [ $HAS_REALTIME = true ]; then
Expand All @@ -246,50 +264,50 @@ CheckUnloaded(){
# checks to see if all modules were unloaded
STATUS=
for module in $MODULES_UNLOAD ; do
# check to see if the module is installed
if "$LSMOD" | awk '{print $1}' | $GREP -x "$module" >/dev/null ; then
echo "ERROR: Could not unload '$module'"
STATUS=error
fi
# check to see if the module is installed
if "$LSMOD" | awk '{print $1}' | $GREP -x "$module" >/dev/null ; then
echo "ERROR: Could not unload '$module'"
STATUS=error
fi
done
if [ -n "$STATUS" ] ; then
exit 1
exit 1
fi
}

CMD=$1

case "$CMD" in
start|load)
CheckConfig
Load || exit $?
CheckLoaded
;;
restart|force-reload)
CheckConfig
CheckMem
Unload
CheckUnloaded
Load || exit $?
CheckLoaded
;;
stop|unload)
CheckConfig
CheckMem
Unload || exit $?
;;
status)
CheckConfig
CheckStatus || exit $?
;;
verify)
CheckConfig
Verify || exit $?
;;
*)
echo "Usage: $0 {start|load|stop|unload|restart|force-reload|status|verify}" >&2
exit 1
;;
start|load)
CheckConfig
Load || exit $?
CheckLoaded
;;
restart|force-reload)
CheckConfig
CheckMem
Unload
CheckUnloaded
Load || exit $?
CheckLoaded
;;
stop|unload)
CheckConfig
CheckMem
Unload || exit $?
;;
status)
CheckConfig
CheckStatus || exit $?
;;
verify)
CheckConfig
Verify || exit $?
;;
*)
echo "Usage: $0 {start|load|stop|unload|restart|force-reload|status|verify}" >&2
exit 1
;;
esac

exit 0
Expand Down
Loading
Loading