home *** CD-ROM | disk | FTP | other *** search
/ Chip 1995 March / CHIP3.mdf / slackwar / a / util / util-lin.2 / util-lin / util-linux-2.2 / sys-utils / MAKEDEV < prev    next >
Encoding:
Text File  |  1995-02-22  |  11.6 KB  |  487 lines

  1. #! /bin/sh -
  2.  
  3. RCSID='MAKEDEV,v 1.1.1.1 1995/02/22 19:09:11 faith Exp'
  4.  
  5. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  6. # Customisation:
  7. #   The devices fall into various classes.  This section contains the mapping
  8. # from a class name into a group name and permission.
  9. #   You will almost certainly need to edit the group name to match your
  10. # system, and you may change the permissions to suit your preference.  These
  11. # lines _must_ be of the format "user group perm".
  12.  
  13.  public="  root system 666"
  14.  system="  root system 660"
  15.    kmem="  root kmem   660"
  16.     tty="  root tty    666"
  17.    cons="  root tty    622"    # 622 for console?
  18. dialout="  root uucp   660"
  19.   mouse="  root system 666"
  20. printer="  root daemon 660"
  21.  floppy="  root floppy 660"
  22.    disk="  root disk   660"
  23.    scsi="  root system 600"
  24.   cdrom="  root disk   660"
  25.    tape="  root disk   660"
  26.   audio="  root system 666"
  27.   ibcs2="  root system 666"
  28. scanner="  root system 666"
  29.  
  30. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  31.  
  32. procfs=/proc
  33.  
  34. opt_v=
  35. opt_d=
  36. opt_n=
  37.  
  38. while [ $# -ge 1 ]
  39. do
  40.     case $1 in
  41.         --)    shift; break ;;
  42.         -v)    shift; opt_v=1 ;;
  43.         -d)    shift; opt_d=1 ;;
  44.         -n)    shift; opt_n=1; opt_v=1 ;;
  45.         -V)    shift; opt_V=1 ;;
  46.         -*)    echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
  47.         *)    break ;;
  48.     esac
  49. done
  50.  
  51. if [ "$opt_V" ]
  52. then
  53.     echo "$RCSID"
  54.     exit 0
  55. fi
  56.  
  57. opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
  58.  
  59. makedev () {    # usage: makedev name [bcu] major minor owner group mode
  60.     if [ "$opt_v" ]
  61.     then    if [ "$opt_d" ]
  62.         then    echo "delete $1"
  63.         else    echo "create $1    $2 $3 $4 $5:$6 $7" 
  64.         fi
  65.     fi
  66.     if [ ! "$opt_n" ]
  67.     then    if [ "$opt_d" ]
  68.         then
  69.             rm -f $1
  70.         else
  71.             mknod $1- $2 $3 $4 &&
  72.             chown $5:$6 $1- &&
  73.             chmod $7 $1- &&
  74.             mv $1- $1
  75.         fi
  76.     fi
  77. }
  78. symlink () {    # usage: symlink name target
  79.     if [ "$opt_v" ]
  80.     then    if [ "$opt_d" ]
  81.         then    echo "delete $1"
  82.         else    echo "create $1    -> $2"
  83.         fi
  84.     fi
  85.     [ ! "$opt_n" ] && rm -f $1 &&
  86.     [ ! "$opt_d" ] && ln -s $2 $1
  87. }
  88.  
  89. devices=
  90. if [ ! -f $procfs/devices ]
  91. then
  92.     echo "$0: warning: can't read $procfs/devices" >&2
  93. else
  94.     exec 3<$procfs/devices
  95.     while read major device <&3
  96.     do
  97.         case "$major" in
  98.             Character|Block|'')
  99.                 ;;
  100.             *)
  101.                 eval "major_$device=$major"
  102.                 devices="$devices $device"
  103.                 ;;
  104.         esac
  105.     done
  106.     exec 3<&-
  107. fi
  108.  
  109. Major () {
  110.     device=$2
  111.     if [ "$opt_d" ]
  112.     then
  113.         echo -1    # don't care
  114.     else
  115.         eval echo \${major_$1:-\${device:?\"unknown major number for $1\"}}
  116.     fi
  117. }
  118.  
  119. cvt () {
  120.     while [ $# -ne 0 ]
  121.     do
  122.         case "$1" in
  123.             mem|tty|ttyp|cua|cub)    ;;
  124.             hd)    echo hda hdb ;;
  125.             xd)    echo xda xdb ;;
  126.             fd)    echo fd0 fd1 ;;
  127.             lp)    echo lp0 lp1 lp2 ;;
  128.             mt)    echo ftape ;;
  129.             loop)    echo loop ;;
  130.             ibcs2)    echo ibcs2 ;;
  131.             tpqic02)    echo qic ;;
  132.             sound)        echo audio ;;
  133.             logiscan)    echo logiscan ;;
  134.             ac4096)        echo ac4096 ;;
  135.             idecd)    echo idecd ;;
  136.             hw)    echo helloworld ;;
  137.             sbpcd | sbpcd[123])    echo $1 ;;
  138.             Joystick)    echo js ;;
  139.             apm_bios)    echo apm ;;
  140.             dcf)        echo dcf ;;
  141.             pcmcia)    ;; # taken care of by its own driver
  142.             ttyC)    echo cyclades ;;
  143.             *)    echo "$0: don't know what \"$1\" is" >&2 ;;
  144.         esac
  145.         shift
  146.     done
  147. }
  148.  
  149. for arg
  150. do
  151.     case $arg in
  152.     generic)
  153.         $0 $opts std
  154.         $0 $opts fd0 fd1
  155.         $0 $opts hda hdb
  156.         $0 $opts xda xdb
  157.         $0 $opts sda sdb
  158.         $0 $opts ptyp ptyq ptyr ptys
  159.         $0 $opts console tty1 tty2 tty3 tty4 tty5 tty6 tty7 tty8
  160.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3
  161.         $0 $opts busmice
  162.         $0 $opts lp0 lp1 lp2
  163.         $0 $opts par0 par1 par2
  164.         $0 $opts fd
  165.         ;;
  166.     local)
  167.         $0.local $opts
  168.         ;;
  169.     std)
  170.         makedev mem  c 1 1 $kmem
  171.         makedev kmem c 1 2 $kmem
  172.         makedev null c 1 3 $public
  173.         makedev port c 1 4 $kmem
  174.         makedev zero c 1 5 $public
  175.         symlink core $procfs/kcore
  176.         makedev full c 1 7 $public
  177.         makedev ram  b 1 1 $disk
  178.         makedev tty  c 5 0 $tty
  179.         ;;
  180.     console|tty0)
  181.         makedev $arg c 4 0 $cons
  182.         ;;
  183.     tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
  184.         line=`expr $arg : "tty\(.*\)"`
  185.         makedev tty$line c 4 $line $tty
  186.         ;;
  187.     ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
  188.         line=`expr $arg : "ttyS\(.*\)"`
  189.         minor=`expr 64 + $line`
  190.         makedev ttyS$line c 4 $minor $tty
  191.         makedev cua$line c 5 $minor $dialout
  192.         ;;
  193.     pty[p-s])
  194.         # Currently limited to 64 master/slave pairs.
  195.         bank=`expr $arg : "pty\(.\)"`
  196.         base=`expr \( pqrs : ".*$bank" - 1 \) \* 16`
  197.         for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
  198.         do
  199.             j=`expr 0123456789abcdef : ".*$i" - 1`
  200.             makedev pty$bank$i c 4 `expr 128 + $base + $j` $tty
  201.             makedev tty$bank$i c 4 `expr 192 + $base + $j` $tty
  202.         done
  203.         ;;
  204.     cyclades)
  205.         major1=`Major ttyC` || continue
  206.         major2=`Major cub` || continue
  207.         for i in 0 1 2 3 4 5 6 7 # 8 9 10 11 12 13 14 15
  208.         do
  209.             makedev ttyC$i c $major1 `expr 32 + $i` $tty
  210.             makedev cub$i c $major2 `expr 32 + $i` $dialout
  211.         done
  212.         ;;
  213.     par[0-2])
  214.         major=`Major lp 6` || continue
  215.         port=`expr $arg : "par\(.\)"`
  216.         makedev $arg c $major $port $printer
  217.         ;;
  218.     lp[0-2])
  219.         major=`Major lp 6` || continue
  220.         port=`expr $arg : "lp\(.\)"`
  221.         makedev $arg c $major $port $printer
  222.         ;;
  223.     busmice)
  224.         major=`Major mouse 10` || continue
  225.         makedev logibm   c $major 0 $mouse
  226.         makedev psaux    c $major 1 $mouse
  227.         makedev inportbm c $major 2 $mouse
  228.         makedev atibm    c $major 3 $mouse
  229.         # makedev sejin    c $major 4 $mouse
  230.         ;;
  231.     js)
  232.         major=`Major Joystick` || continue
  233.         makedev js0 c $major 0 $mouse
  234.         makedev js1 c $major 1 $mouse
  235.         ;;
  236.     fd[0-4])
  237.         major=`Major fd 2` || continue
  238.         unit=`expr $arg : "fd\(.\)"`
  239.         makedev fd${unit} b $major $unit $floppy
  240.         makedev fd${unit}d360  b $major `expr $unit +  4` $floppy
  241.         makedev fd${unit}h1200 b $major `expr $unit +  8` $floppy
  242.         makedev fd${unit}D360  b $major `expr $unit + 12` $floppy
  243.         symlink fd${unit}H360 fd${unit}D360
  244.         makedev fd${unit}D720  b $major `expr $unit + 16` $floppy
  245.         symlink fd${unit}H720 fd${unit}D720
  246.         makedev fd${unit}h360  b $major `expr $unit + 20` $floppy
  247.         makedev fd${unit}h720  b $major `expr $unit + 24` $floppy
  248.         makedev fd${unit}H1440 b $major `expr $unit + 28` $floppy
  249.         makedev fd${unit}E2880 b $major `expr $unit + 32` $floppy
  250.         makedev fd${unit}CompaQ b $major `expr $unit + 36` $floppy
  251.  
  252.         makedev fd${unit}h1440 b $major `expr $unit + 40` $floppy
  253.         makedev fd${unit}H1680 b $major `expr $unit + 44` $floppy
  254.         makedev fd${unit}h410  b $major `expr $unit + 48` $floppy
  255.         makedev fd${unit}H820  b $major `expr $unit + 52` $floppy
  256.         makedev fd${unit}h1476 b $major `expr $unit + 56` $floppy
  257.         makedev fd${unit}H1722 b $major `expr $unit + 60` $floppy
  258.         makedev fd${unit}h420  b $major `expr $unit + 64` $floppy
  259.         makedev fd${unit}H830  b $major `expr $unit + 68` $floppy
  260.         makedev fd${unit}h1494 b $major `expr $unit + 72` $floppy
  261.         makedev fd${unit}H1743 b $major `expr $unit + 76` $floppy
  262.         ;;
  263.     hd[a-d])
  264.         major=`Major hd 3` || continue
  265.         unit=`expr $arg : "hd\(.\)"`
  266.         base=`expr \( abcd : ".*$unit" - 1 \) \* 64`
  267.         makedev hd$unit b $major $base $disk
  268.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16
  269.         do
  270.             makedev hd$unit$part b $major `expr $base + $part` $disk
  271.         done
  272.         ;;
  273.     hd1[a-d])
  274.         unit=`expr $arg : "hd1\(.\)"`
  275.         base=`expr \( abcd : ".*$unit" - 1 \) \* 64`
  276.         makedev hd1$unit b 22 $base $disk
  277.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16
  278.         do
  279.             makedev hd1$unit$part b 22 `expr $base + $part` $disk
  280.         done
  281.         ;;
  282.     xd[a-d])
  283.         major=`Major xd 13` || continue
  284.         unit=`expr $arg : "xd\(.\)"`
  285.         base=`expr \( abcd : ".*$unit" - 1 \) \* 64`
  286.         makedev xd$unit b $major $base $disk
  287.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16
  288.         do
  289.             makedev xd$unit$part b $major `expr $base + $part` $disk
  290.         done
  291.         ;;
  292.     sd[a-h])
  293.         major=`Major sd 8` || continue
  294.         unit=`expr $arg : "sd\(.\)"`
  295.         base=`expr \( abcdefgh : ".*$unit" - 1 \) \* 16`
  296.         makedev sd$unit b $major $base $disk
  297.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15
  298.         do
  299.             minor=`expr $base + $part`
  300.             makedev sd$unit$part b $major $minor $disk
  301.         done
  302.         ;;
  303.     loop)
  304.         major=`Major loop` || continue
  305.         for part in 0 1 2 3 4 5 6 7
  306.         do
  307.             makedev loop$part b $major $part $disk
  308.         done
  309.         ;;
  310.     st[0-7])
  311.         major=`Major st 9`
  312.         unit=`expr $arg : "st\(.\)"`
  313.         makedev st$unit c $major $unit $tape
  314.         makedev nst$unit c $major `expr 128 + $unit` $tape
  315.         ;;
  316.     qic)
  317.         major=`Major tpqic02 12`
  318.         makedev rmt8       c $major   6 $tape
  319.         makedev rmt16      c $major   8 $tape
  320.         makedev tape-d     c $major 136 $tape
  321.         makedev tape-reset c $major 255 $tape
  322.         ;;
  323.     ftape)
  324.         major=`Major mt 27` || continue
  325.         for unit in 0 1 2 3
  326.         do
  327.             makedev rft$unit c $major $unit $tape
  328.             makedev nrft$unit c $major `expr $unit + 4` $tape
  329.         done
  330.         symlink ftape rft0
  331.         symlink nftape nrft0
  332.         ;;
  333.     scd[0-7])
  334.         major=`Major sr 11` || continue
  335.         unit=`expr $arg : "scd\(.\)"`
  336.         makedev scd$unit b $major $unit $cdrom
  337.         ;;
  338.     sonycd)
  339.         major=`Major cdu31a` || continue
  340.         makedev $arg b $major 0 $cdrom
  341.         ;;
  342.     mcd)
  343.         major=`Major mcd 23` || continue
  344.         makedev $arg b $major 0 $cdrom
  345.         ;;
  346.     cdu535)
  347.         makedev $arg b 24 0 $cdrom
  348.         ;;
  349.     lmscd)
  350.         makedev $arg b 24 0 $cdrom
  351.         ;;
  352.     sbpcd|sbpcd[123])
  353.         major=`Major $arg` || continue
  354.         base=`expr ${arg}0 : "sbpcd\(.\)"`
  355.         for minor in 0 1 2 3
  356.         do
  357.             unit=`expr substr 0123456789abcdef \( $base \* 4 + $minor + 1 \) 1`
  358.             makedev spbcd$unit b $major $minor $cdrom
  359.         done
  360.         [ $arg = sbpcd ] && symlink $arg ${arg}0
  361.         ;;
  362.     idecd)
  363.         major=`Major idecd` || continue
  364.         makedev $arg c $major 0 $cdrom
  365.         ;;
  366.     logiscan)
  367.         major=`Major logiscan` || continue
  368.         makedev $arg c $major 0 $scanner
  369.         ;;
  370.     m105scan)
  371.         major=`Major m105` || continue
  372.         makedev $arg c $major 0 $scanner
  373.         ;;
  374.     ac4096)
  375.         major=`Major ac4096` || continue
  376.         makedev $arg c $major 0 $scanner
  377.         ;;
  378.     audio)
  379.         major=`Major sound 14`
  380.         makedev mixer      c $major  0 $audio
  381.         makedev sequencer  c $major  1 $audio
  382.         makedev midi00     c $major  2 $audio
  383.         makedev dsp        c $major  3 $audio
  384.         makedev audio      c $major  4 $audio
  385.         makedev sndstat    c $major  6 $audio
  386. #        makedev sequencer2 c $major  8 $audio
  387.         makedev mixer1     c $major 16 $audio
  388. #        makedev patmgr0    c $major 17 $audio
  389.         makedev midi01     c $major 18 $audio
  390.         makedev dsp1       c $major 19 $audio
  391.         makedev audio1     c $major 20 $audio
  392. #        makedev patmgr1    c $major 33 $audio
  393.         makedev midi02     c $major 34 $audio
  394.         makedev midi03     c $major 50 $audio
  395.         ;;
  396.     pcaudio)
  397.         major=`Major pcsp` || continue
  398.         makedev pcmixer c $major 0 $audio
  399.         makedev pcsp    c $major 3 $audio
  400.         makedev pcaudio c $major 4 $audio
  401.         ;;
  402.     sg)
  403.         major=`Major sg 21`
  404.         for unit in a b c d e f g h
  405.         do
  406.             minor=`expr abcdefgh : ".*$unit" - 1`
  407.             makedev $arg$unit c $major $minor $scsi
  408.         done
  409.         ;;
  410.     fd)
  411.         # not really devices, we use the /proc filesystem
  412.         symlink fd     $procfs/self/fd
  413.         symlink stdin  fd/0
  414.         symlink stdout fd/1
  415.         symlink stderr fd/2
  416.         ;;
  417.     ibcs2)
  418.         major=`Major ibcs2` || continue
  419.         makedev socksys c $major 0 $ibcs2
  420.         symlink nfsd socksys
  421.         makedev spx     c $major 1 $ibcs2
  422.         symlink X0R null
  423.         ;;
  424.     apm)
  425.         major=`Major apm_bios` || continue
  426.         makedev $arg c $major 0 $system
  427.         ;;
  428.     dcf)
  429.         major=`Major dcf` || continue
  430.         makedev $arg c $major 0 $system
  431.         ;;
  432.     helloworld)
  433.         major=`Major hw` || continue
  434.         makedev helloworld c $major 0 $public
  435.         ;;
  436.     update)
  437.         if [ ! "$devices" ]
  438.         then
  439.             echo "$0: don't appear to have any devices" >&2
  440.             continue
  441.         fi
  442.         if [ "$opt_d" ]
  443.         then
  444.             echo "$0: can't delete an update" >&2
  445.             continue
  446.         fi
  447.         create=
  448.         delete=
  449.         devs="$devices"
  450.         if [ -f DEVICES ]
  451.         then
  452.             exec 3<DEVICES
  453.             while read device major <&3
  454.             do
  455.                 eval now=\$major_$device
  456.                 if [ "$now" = "" ]
  457.                 then
  458.                     delete="$delete `cvt $device`"
  459.                     continue
  460.                 elif [ "$now" != $major ]
  461.                 then
  462.                     create="$create "`cvt $device`
  463.                 fi
  464.                 devs=`expr "$devs" : "\(.*\) $device"``expr "$devs" : ".* $device\(.*\)"`
  465.             done
  466.             exec 3<&-
  467.         fi
  468.         create="$create "`cvt $devs`
  469.         $0 $opts -d $delete
  470.         $0 $opts $create
  471.         [ "$opt_n" ] && continue
  472.         for device in $devices
  473.         do
  474.             if [ "`cvt $device`" ]
  475.             then
  476.                 eval echo $device \$major_$device
  477.             fi
  478.         done > DEVICES
  479.         ;;
  480.     *)
  481.         echo "$0: don't know how to make device \"$arg\"" >&2
  482.         ;;
  483.     esac
  484. done
  485.  
  486. exit 0
  487.