home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / etc / init.d / haldaemon < prev    next >
Text File  |  2006-11-29  |  7KB  |  219 lines

  1. #!/bin/sh
  2. # Author: Danny Kukawka <dkukawka@suse.de>
  3. #
  4. # /etc/init.d/rchal
  5. #
  6. ### BEGIN INIT INFO
  7. # Provides:          haldaemon
  8. # Required-Start:    boot.localnet dbus policykitd 
  9. # Should-Start:      acpid resmgr
  10. # Required-Stop:     
  11. # Should-Stop:
  12. # Default-Start:     2 3 5
  13. # Default-Stop:      
  14. # Short-Description: HAL is a daemon for managing information about the hardware on the system
  15. # Description:       HAL is a hardware abstraction layer and aims to provide a live list of devices present 
  16. #             in the system at any point in time. HAL tries to understand both physical devices (such 
  17. #                as PCI, USB) and the device classes (such as input, net and block) physical devices have, 
  18. #             and it allows merging of information from so called device info files specific to a device. 
  19. #             HAL provides a network API through D-BUS for querying devices and notifying when things 
  20. #             change. Finally, HAL provides some monitoring (in an unintrusive way) of devices, presently 
  21. #             ethernet link detection and volume mounts are monitored. This, and more, is all described 
  22. #             in the HAL specification
  23. #                    
  24. ### END INIT INFO
  25.  
  26. # Check for binary
  27. HALDAEMON_BIN=/usr/sbin/hald
  28. test -x $HALDAEMON_BIN || exit 5
  29.  
  30. # Parameters (startup)
  31. HALDAEMON_PARA="--daemon=yes";
  32. HALDAEMON_PIDDIR="/var/run/hal";
  33. HALDAEMON_PID=$HALDAEMON_PIDDIR/haldaemon.pid;
  34. DBUSDAEMON_PIDDIR="/var/run/dbus";
  35. DBUSDAEMON_PID=$DBUSDAEMON_PIDDIR/pid;
  36. CPUFREQ_SYSFS_PATH="/sys/devices/system/cpu/cpu0/cpufreq"
  37. LOGGER="/bin/logger -t rchal"
  38.  
  39. function load_governors()
  40. {
  41.     if [ ! -r $CPUFREQ_SYSFS_PATH ];then
  42.     $LOGGER Cannot load cpufreq governors - No cpufreq driver available
  43.     return 1
  44.     fi
  45.     read govs < $CPUFREQ_SYSFS_PATH/scaling_available_governors
  46.     case "$govs" in
  47.     *powersave*) 
  48.         ;;
  49.     *) 
  50.         modprobe -q cpufreq_powersave >/dev/null 2>&1
  51.         [ $? != 0 ] && $LOGGER powersave cpufreq governor could not be loaded
  52.         ;;
  53.     esac
  54.     case "$govs" in
  55.     *performance*) 
  56.         ;;
  57.     *) 
  58.         modprobe -q cpufreq_performance >/dev/null 2>&1
  59.         [ $? != 0 ] && $LOGGER perfromance cpufreq governor could not be loaded
  60.         ;;
  61.     esac
  62.     case "$govs" in
  63.     *userspace*) 
  64.         ;;
  65.     *) 
  66.         modprobe -q cpufreq_userspace >/dev/null 2>&1
  67.         [ $? != 0 ] && $LOGGER userspace cpufreq governor could not be loaded
  68.         ;;
  69.     esac
  70.     case "$govs" in
  71.     *ondemand*)
  72.         ;;
  73.     *) 
  74.         modprobe -q cpufreq_ondemand >/dev/null 2>&1
  75.         [ $? != 0 ] && $LOGGER ondemand cpufreq governor could not be loaded
  76.         ;;
  77.     esac
  78.     case "$govs" in
  79.     *conservative*)
  80.         ;;
  81.     *) 
  82.         modprobe -q cpufreq_conservative >/dev/null 2>&1
  83.         [ $? != 0 ] && $LOGGER conservative cpufreq governor could not be loaded
  84.         ;;
  85.     esac
  86.     return 0
  87. }
  88.  
  89. function load_cpufreq_driver()
  90. {
  91.     CPUFREQ_MODULES="speedstep_centrino powernow_k8 powernow_k7 powernow_k6 longrun speedstep_ich acpi_cpufreq"
  92.     CPUFREQ_MODULES_GREP="^speedstep_centrino\|^speedstep_ich\|^powernow_k8\|^powernow_k7\|^powernow_k6\|^longrun\|^longhaul\|^acpi_cpufreq"
  93.     
  94.     ###### load CPUFREQ modules############
  95.     # if the drivers are compiled in, $CPUFREQ_SYSFS_PATH already exists
  96.     if [ ! -d $CPUFREQ_SYSFS_PATH ]; then
  97.             # test for already loaded modules
  98.     ALREADY_LOADED_MODS=`grep $CPUFREQ_MODULES_GREP /proc/modules`
  99.     if [ -z "$ALREADY_LOADED_MODS" ] ; then 
  100.         for MODULE in $CPUFREQ_MODULES; do
  101.         modprobe $MODULE &>/dev/null
  102.         RETVAL=$?
  103.         [ "$RETVAL" = 0 ] && break
  104.         done
  105.         # skip if no module could be loaded!
  106.         if [ "$RETVAL" != 0 ]; then
  107.         $LOGGER "CPU frequency scaling is not supported by your processor."
  108.         $LOGGER "boot with 'CPUFREQ=no' in to avoid this warning."
  109.                     # remove eventually loaded modules, bug 150381
  110.         rmmod speedstep_lib freq_table 2>/dev/null
  111.         fi
  112.     fi
  113.     fi
  114.     ###### load CPUFREQ modules############
  115. }
  116.  
  117. # Source LSB init functions
  118. # providing start_daemon, killproc, pidofproc,
  119. # log_success_msg, log_failure_msg and log_warning_msg.
  120. # This is currently not used by UnitedLinux based distributions and
  121. # not needed for init scripts for UnitedLinux only. If it is used,
  122. # the functions from rc.status should not be sourced or used.
  123. #. /lib/lsb/init-functions
  124.  
  125. . /etc/rc.status
  126.  
  127. # Reset status of this service
  128. rc_reset
  129.  
  130. case "$1" in
  131.     start)
  132.     
  133.     if [ ! -d $HALDAEMON_PIDDIR ]; then
  134.                 mkdir -p $HALDAEMON_PIDDIR;
  135.                 chown haldaemon:haldaemon $HALDAEMON_PIDDIR;
  136.         fi
  137.         if [ -e $HALDAEMON_PID ]; then
  138.                 if checkproc $HALDAEMON_BIN ; then
  139.             echo "HAL already started. Not starting."
  140.             exit 0;
  141.                 else
  142.                         echo "Removing stale PID file $HALDAEMON_PID.";
  143.                         rm -f $HALDAEMON_PID;
  144.                 fi
  145.         fi
  146. #    if [ ! -e $DBUSDAEMON_PID ]; then
  147. #        echo "DBUS is not running. Please start DBUS (or try 'rchal start-with-dbus').";
  148. #        exit 1;
  149. #    fi
  150.         
  151.     echo -n "Starting HAL daemon";
  152.         startproc -p $HALDAEMON_PID $HALDAEMON_BIN $HALDAEMON_PARA
  153.         rc_status -v
  154.  
  155.     ##### CPUFreq stuff #####
  156.     if [ "$CPUFREQ" != "no" -a "$CPUFREQ" != "off" ]; then
  157.         echo -n "Loading CPUFreq modules"
  158.         load_cpufreq_driver
  159.         load_governors
  160.         
  161.         if [ "$?" = 0 ]; then
  162.         rc_status -v
  163.         else
  164.         echo " (CPUFreq not supported)"
  165.         fi
  166.     fi
  167.  
  168.         ;;
  169.     start-with-dbus)
  170.     if [ ! -e $DBUSDAEMON_PID ]; then
  171.                echo -n "DBUS is not running. Starting D-BUS daemon";
  172.                 rcdbus start;
  173.         fi
  174.     $0 start
  175.     ;;
  176.     stop)
  177.     echo -n "Shutting down HAL daemon"
  178.            killproc -p $HALDAEMON_PID -TERM $HALDAEMON_BIN
  179.            rc_status
  180.     rm -f $HALDAEMON_PID;
  181.            rc_status -v
  182.         ;;
  183.     try-restart)
  184.         $0 status >/dev/null &&  $0 restart
  185.         rc_status
  186.         ;;
  187.     restart)
  188.         $0 stop
  189.         $0 start
  190.         ;;
  191.     force-reload)
  192.         echo -n "Reload service HAL daemon"
  193.         $0 stop  &&  $0 start
  194.         rc_status
  195.         ;;
  196.     reload)
  197.         rc_failed 3
  198.         rc_status -v
  199.         ;;
  200.     status)
  201.         echo -n "Checking for service HAL daemon"
  202.         checkproc $HALDAEMON_BIN
  203.         rc_status -v
  204.         ;;
  205.     probe)
  206.         ## Optional: Probe for the necessity of a reload, print out the
  207.         ## argument to this init script which is required for a reload.
  208.         ## Note: probe is not (yet) part of LSB (as of 1.2)
  209.         # test /etc/FOO/FOO.conf -nt /var/run/FOO.pid && echo reload
  210.         ;;
  211.     *)
  212.         echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|start-with-dbus|reload|probe}"
  213.         exit 1
  214.         ;;
  215. esac
  216. rc_exit
  217.  
  218.  
  219.