RHEL startup script for CUDA

Here is a simple startup script I use in CentOS for initializing CUDA at boot without starting X. It loads the nvidia module and sets up the appropriate nodes in /dev as needed. It’s very useful for machines that default to runlevel 3.

The script works on my bench system containing two 8800GTX’s; it has also been tested with a single 8800GTX. It may not work for systems that have a non-CUDA card present for display.

The section that creates the /dev nodes are shamelessly pulled from Massimiliano’s script here.

#!/bin/bash

#

# Startup/shutdown script for nVidia CUDA

#

# chkconfig: 345 80 20

# description: Startup/shutdown script for nVidia CUDA

# Source function library.

. /etc/init.d/functions

DRIVER=nvidia

RETVAL=0

# Create /dev nodes for nvidia devices

function createnodes() {

    # Count the number of NVIDIA controllers found.

    N3D=`/sbin/lspci | grep -i NVIDIA | grep "3D controller" | wc -l`

    NVGA=`/sbin/lspci | grep -i NVIDIA | grep "VGA compatible controller" | wc -l`

   N=`expr $N3D + $NVGA - 1`

    for i in `seq 0 $N`; do

        mknod -m 666 /dev/nvidia$i c 195 $i

        RETVAL=$?

        [ "$RETVAL" = 0 ] || exit $RETVAL

    done

	

    mknod -m 666 /dev/nvidiactl c 195 255

    RETVAL=$?

    [ "$RETVAL" = 0 ] || exit $RETVAL

}

# Remove /dev nodes for nvidia devices

function removenodes() {

    rm -f /dev/nvidia*

}

# Start daemon

function start() {

    echo -n $"Loading $DRIVER kernel module: "

    modprobe $DRIVER && success || failure

    RETVAL=$?

    echo

    [ "$RETVAL" = 0 ] || exit $RETVAL

   echo -n $"Initializing CUDA /dev entries: "

    createnodes && success || failure

    RETVAL=$?

    echo

    [ "$RETVAL" = 0 ] || exit $RETVAL

}

# Stop daemon

function stop() {

    echo -n $"Unloading $DRIVER kernel module: "

    rmmod -f $DRIVER && success || failure

    RETVAL=$?

    echo

    [ "$RETVAL" = 0 ] || exit $RETVAL

   echo -n $"Removing CUDA /dev entries: "

    removenodes && success || failure

    RETVAL=$?

    echo

    [ "$RETVAL" = 0 ] || exit $RETVAL

}

# See how we were called

case "$1" in

    start)

        start

       ;;

    stop)

        stop

       ;;

    restart)

        stop

        start

       ;;

    *)

        echo $"Usage: $0 {start|stop|restart}"

        RETVAL=1

esac

exit $RETVAL