scull.init
上传用户:wudi5211
上传日期:2010-01-21
资源大小:607k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

C/C++

  1. #!/bin/bash
  2. # Sample init script for the a driver module <rubini@linux.it>
  3. DEVICE="scull"
  4. SECTION="misc"
  5. # The list of filenames and minor numbers: $PREFIX is prefixed to all names
  6. PREFIX="scull"
  7. FILES="     0 0         1 1         2 2        3 3    priv 16 
  8.         pipe0 32    pipe1 33    pipe2 34   pipe3 35
  9.        single 48      uid 64     wuid 80"
  10. INSMOD=/sbin/insmod; # use /sbin/modprobe if you prefer
  11. function device_specific_post_load () {
  12.     true; # fill at will
  13. }
  14. function device_specific_pre_unload () {
  15.     true; # fill at will
  16. }
  17. # Everything below this line should work unchanged for any char device.
  18. # Obviously, however, no options on the command line: either in
  19. # /etc/${DEVICE}.conf or /etc/modules.conf (if modprobe is used)
  20. # Optional configuration file: format is
  21. #    owner  <ownername>
  22. #    group  <groupname>
  23. #    mode   <modename>
  24. #    options <insmod options>
  25. CFG=/etc/${DEVICE}.conf
  26. # kernel version, used to look for modules
  27. KERNEL=`uname -r`
  28. #FIXME: it looks like there is no misc section. Where should it be?
  29. MODDIR="/lib/modules/${KERNEL}/kernel/drivers/${SECTION}"
  30. if [ ! -d $MODDIR ]; then MODDIR="/lib/modules/${KERNEL}/${SECTION}"; fi
  31. # Root or die
  32. if [ "$(id -u)" != "0" ]
  33. then
  34.   echo "You must be root to load or unload kernel modules"
  35.   exit 1
  36. fi
  37. # Read configuration file
  38. if [ -r $CFG ]; then
  39.     OWNER=`awk "\$1=="owner" {print \$2}" $CFG`
  40.     GROUP=`awk "\$1=="group" {print \$2}" $CFG`
  41.     MODE=`awk "\$1=="mode" {print \$2}" $CFG`
  42.     # The options string may include extra blanks or only blanks
  43.     OPTIONS=`sed -n '/^options / s/options //p' $CFG`
  44. fi
  45. # Create device files
  46. function create_files () {
  47.     cd /dev
  48.     local devlist=""
  49.     local file
  50.     while true; do
  51. if [ $# -lt 2 ]; then break; fi
  52. file="${DEVICE}$1"
  53. mknod $file c $MAJOR $2
  54. devlist="$devlist $file"
  55. shift 2
  56.     done
  57.     if [ -n "$OWNER" ]; then chown $OWNER $devlist; fi
  58.     if [ -n "$GROUP" ]; then chgrp $GROUP $devlist; fi
  59.     if [ -n "$MODE"  ]; then chmod $MODE  $devlist; fi
  60. }
  61. # Remove device files
  62. function remove_files () {
  63.     cd /dev
  64.     local devlist=""
  65.     local file
  66.     while true; do
  67. if [ $# -lt 2 ]; then break; fi
  68. file="${DEVICE}$1"
  69. devlist="$devlist $file"
  70. shift 2
  71.     done
  72.     rm -f $devlist
  73. }
  74. # Load and create files
  75. function load_device () {
  76.     
  77.     if [ -f $MODDIR/$DEVICE.o ]; then
  78. devpath=$MODDIR/$DEVICE.o
  79.     else if [ -f ./$DEVICE.o ]; then
  80. devpath=./$DEVICE.o
  81.     else
  82. devpath=$DEVICE; # let insmod/modprobe guess
  83.     fi; fi
  84.     if [ "$devpath" != "$DEVICE" ]; then
  85. echo -n " (loading file $devpath)"
  86.     fi
  87.     if $INSMOD $devpath $OPTIONS; then
  88. MAJOR=`awk "\$2=="$DEVICE" {print \$1}" /proc/devices`
  89. remove_files $FILES
  90. create_files $FILES
  91. device_specific_post_load
  92.     else
  93. echo " FAILED!"
  94.      fi
  95. }
  96. # Unload and remove files
  97. function unload_device () {
  98.     device_specific_pre_unload 
  99.     /sbin/rmmod $DEVICE
  100.     remove_files $FILES
  101. }
  102. case "$1" in
  103.   start)
  104.      echo -n "Loading $DEVICE"
  105.      load_device
  106.      echo "."
  107.      ;;
  108.   stop)
  109.      echo -n "Unloading $DEVICE"
  110.      unload_device
  111.      echo "."
  112.      ;;
  113.   force-reload|restart)
  114.      echo -n "Reloading $DEVICE"
  115.      unload_device
  116.      load_device
  117.      echo "."
  118.      ;;
  119.   *)
  120.      echo "Usage: $0 {start|stop|restart|force-reload}"
  121.      exit 1
  122. esac
  123. exit 0