home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Linux / Ubuntu_64-bit / ubuntu-11.04-desktop-amd64.iso / casper / filesystem.squashfs / sbin / MAKEDEV < prev    next >
Text File  |  2009-12-23  |  52KB  |  2,197 lines

  1. #! /bin/sh -
  2. # $Id$
  3.  
  4. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  5. # Customisation:
  6. #   The devices fall into various classes.  This section contains the mapping
  7. # from a class name into a group name and permission.
  8. #   You will almost certainly need to edit the group name to match your
  9. # system, and you may change the permissions to suit your preference.  These
  10. # lines _must_ be of the format "user group perm".
  11.  
  12.  public="  root root   0666"
  13. private="  root root   0600"
  14.  system="  root root   0660"
  15.    kmem="  root kmem   0640"
  16.     tty="  root tty    0666"
  17.    cons="  root tty    0600"
  18. dialout="  root dialout 0660"
  19.     dip="  root dip    0660"
  20.   mouse="  root root   0660"
  21. printer="  root lp     0660"
  22.  floppy="  root floppy 0660"
  23.    disk="  root disk   0660"
  24.    scsi="  root root   0600"
  25.   cdrom="  root cdrom  0660"
  26.    tape="  root tape   0660"
  27.   audio="  root audio  0660"
  28.   video="  root video  0660"
  29.   ibcs2="  root root   0666"
  30. scanner="  root root   0666"
  31.    coda="  root root   0600"
  32.   ipsec="  root root   0200"
  33. readable="  root root   0444"
  34.    lirc="  root video   0640"
  35.  
  36. MAXVT=63
  37.  
  38. # defaults for $major_*
  39. major_ide0=3
  40. major_ide1=22
  41. major_sd=8
  42. major_lp=6
  43.  
  44. # Remark: OSS/Linux becomes major_OSSLinux
  45.  
  46. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  47.  
  48. # don't stomp on devfs users
  49. if  [ -c .devfsd ]
  50. then
  51.     echo ".devfsd presence implies active DevFS.  Aborting MAKEDEV invocation."
  52.     # use exit 0, not 1, so postinst scripts don't fail on this
  53.     exit 0
  54. fi
  55.  
  56. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  57.  
  58. # don't stomp on non-Linux users
  59. if [ "$(uname -s)" != "Linux" ]
  60. then
  61.     echo "Results undefined on non-Linux systems, aborting MAKEDEV invocation."
  62.     # use exit 0, not 1, so postinst scripts don't fail on this
  63.     exit 0
  64. fi
  65.  
  66. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  67.  
  68. procfs=/proc
  69.  
  70. opt_v=
  71. opt_d=
  72. opt_n=
  73.  
  74. while [ $# -ge 1 ]
  75. do
  76.     case $1 in
  77.         --)    shift; break ;;
  78.         -v)    shift; opt_v=1 ;;
  79.         -d)    shift; opt_d=1 ;;
  80.         -n)    shift; opt_n=1; opt_v=1 ;;
  81.         -V)    shift; opt_V=1 ;;
  82.         -*)    echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
  83.         *)    break ;;
  84.     esac
  85. done
  86.  
  87. if [ "$opt_V" ]
  88. then
  89.     echo "This is Debian MAKEDEV.  For version info, try 'dpkg --list makedev'"
  90.     echo "See /usr/share/doc/makedev/ for more information on Debian MAKEDEV."
  91.     exit 0
  92. fi
  93.  
  94. opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
  95.  
  96. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  97.  
  98. devicename () {    # translate device names to something safe
  99.     # A-Z is not full alphabet in all locales (e.g. in et_EE)
  100.     echo "$*" | LC_ALL=C sed -e 's/[^A-Za-z0-9_]/_/g' 
  101. }
  102.  
  103. makedev () {    # usage: makedev name [bcu] major minor owner group mode
  104.     if [ "$opt_v" ]
  105.     then    if [ "$opt_d" ]
  106.         then    echo "delete $1"
  107.         else    echo "create $1    $2 $3 $4 $5:$6 $7" 
  108.         fi
  109.     fi
  110.     # missing parameters are a bug - bail - should we do an exit 1 here?
  111.     case :$1:$2:$3:$4:$5:$6:$7: in
  112.         *::*) echo "Warning: MAKEDEV $@ is missing parameter(s)." >&2;;
  113.     esac
  114.     if [ ! "$opt_n" ]
  115.     then    
  116.         if [ "$opt_d" ]
  117.         then
  118.             rm -f $1
  119.         else
  120.             rm -f $1-
  121.             if mknod $1- $2 $3 $4 &&
  122.                chown $5:$6 $1- &&
  123.                chmod $7 $1- &&
  124.                mv $1- $1
  125.             then
  126.                 :    # it worked
  127.             else
  128.                     # Didn't work, clean up any mess...
  129.                 echo "makedev $@: failed"
  130.                 rm -f $1-
  131.             fi
  132.         fi
  133.     fi
  134. }
  135. makefifo () { # usage: makefifo name owner group mode
  136.     if [ "$opt_v" ]
  137.     then    if [ "$opt_d" ]
  138.         then    echo "delete $1"
  139.         else    echo "create $1 $2:$3 $4" 
  140.         fi
  141.     fi
  142.     # missing parameters are a bug - bail - should we do an exit 1 here?
  143.     case :$1:$2:$3:$4: in
  144.         *::*) echo "Warning: MAKEFIFO $@ is missing parameter(s)." >&2;;
  145.     esac
  146.     if [ ! "$opt_n" ]
  147.     then    
  148.         if [ "$opt_d" ]
  149.         then
  150.             rm -f $1
  151.         else
  152.             rm -f $1-
  153.             if mknod $1- p &&
  154.                chown $2:$3 $1- &&
  155.                chmod $4 $1- &&
  156.                mv $1- $1
  157.             then
  158.                 :    # it worked
  159.             else
  160.                     # Didn't work, clean up any mess...
  161.                 echo "makefifo $@: failed"
  162.                 rm -f $1-
  163.             fi
  164.         fi
  165.     fi
  166. }
  167. symlink () {    # usage: symlink name target
  168.     if [ "$opt_v" ]
  169.     then    if [ "$opt_d" ]
  170.         then    echo "delete $1"
  171.         else    echo "create $1    -> $2"
  172.         fi
  173.     fi
  174.     [ ! "$opt_n" ] && rm -f $1 &&
  175.     [ ! "$opt_d" ] && ln -s $2 $1
  176. }
  177.  
  178. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  179.  
  180. # Debian allows us to assume /bin/sh is a POSIX compliant shell, so go for it!
  181.  
  182. math () {
  183.     eval echo "\$(($*))"
  184. }
  185. index () {    # index string c
  186.     eval "I=\${1%$2*}"
  187.     eval echo "\${#I}"
  188. }
  189. suffix () {
  190.     eval echo "\${1#$2}"
  191. }
  192. strip () {
  193.     eval echo "\${1% $2 *} \${1#* $2 }"
  194. }
  195. first () {
  196.     echo "${1%%?}"
  197. }
  198. second () {
  199.     echo "${1##?}"
  200. }
  201. substr () {
  202.     echo $1 | dd bs=1 count=1 skip=$(( $2 - 1 )) 2> /dev/null
  203. }
  204.  
  205. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  206.  
  207. devices=
  208. if [ ! -f $procfs/devices ]
  209. then
  210.     echo "$0: warning: can't read $procfs/devices" >&2
  211. else
  212.     exec 3<$procfs/devices
  213.     while read major device extra <&3
  214.     do
  215.         device=`echo $device | sed 's#/.*##'`
  216.         case "$major" in
  217.             Character|Block|'')
  218.                 ;;
  219.             *)
  220.                 safedevname=`devicename $device`
  221.                 eval "major_$safedevname=$major"
  222.                 devices="$devices $device"
  223.                 ;;
  224.         esac
  225.     done
  226.     exec 3<&-
  227. fi
  228.  
  229. Major () {
  230.     device=$2
  231.     devname=`devicename $1`
  232.     if [ "$opt_d" ]
  233.     then
  234.         echo -1    # don't care
  235.     else
  236.         eval echo \${major_$devname:-\${device:?\"unknown major number for $1\"}}
  237.     fi
  238. }
  239.  
  240. cvt () {
  241.     while [ $# -ne 0 ]
  242.     do
  243.         case "$1" in
  244.             mem|tty|ttyp|cua|cub|cui)    ;;
  245.             hd)    (for d in a b c d e f g h i j k l m n o p ; do
  246.                     echo -n hd$d " "
  247.                  done) ; echo
  248.                 ;;
  249.             ide0)    echo hda hdb ;;
  250.             ide1)    echo hdc hdd ;;
  251.             ide2)    echo hde hdf ;;
  252.             ide3)    echo hdg hdh ;;
  253.             ide4)    echo hdi hdj ;;
  254.             ide5)    echo hdk hdl ;;
  255.             ide6)    echo hdm hdn ;;
  256.             ide7)    echo hdo hdp ;;
  257.             ide8)    echo hdq hdr ;;
  258.             ide9)    echo hds hdt ;;
  259.             sd)    (for d in a b c d e f g h i j k l m n o p ; do
  260.                     echo -n sd$d " "
  261.                  done) ; echo
  262.                 ;;
  263.             dasd)   (for d in a b c d e f g h i j k l m \
  264.                     n o p q r s t u v w x y z ; do
  265.                     echo -n dasd$d " "
  266.                 done) ; echo
  267.                 ;;
  268.             raw)    echo raw ;;
  269.             sg)    echo sg ;;
  270.             sr)    echo scd ;;
  271.             st)    echo st0 ;;
  272.             xd)    echo xda xdb ;;
  273.             ad)    echo ada adb ;;
  274.             lp)    echo lp ;;
  275.             mt)    echo ftape ;;
  276.             qft)    echo ftape ;;
  277.             loop)    echo loop ;;
  278.             md)    echo md ;;
  279.             ibcs2)    echo ibcs2 ;;
  280.             tpqic02)    echo qic ;;
  281.             sound)        echo audio ;;
  282.             logiscan)    echo logiscan ;;
  283.             ac4096)        echo ac4096 ;;
  284.             hw)    echo helloworld ;;
  285.             sbpcd | sbpcd[123])    echo $1 ;;
  286.             joystick)    echo js ;;
  287.             input)    echo input ;;
  288.             apm_bios)    echo apm ;;
  289.             dcf)        echo dcf ;;
  290.             aztcd)        echo aztcd ;;
  291.             cm206cd)    echo cm206cd ;;
  292.             gscd)        echo gscd ;;
  293.             pcmcia)    ;; # taken care of by its own driver
  294.             ttyC)    echo cyclades ;;
  295.             isdn)    echo isdnmodem isdnbri dcbri ;;
  296.             vcs)    ;;
  297.             pty)    echo pty ;;
  298.             misc)    echo misc ;;
  299.             3dfx)    echo 3dfx ;;
  300.             agpgart)    echo agpgart ;;
  301.             microcode)    echo microcode ;;
  302.             ipmi|ipmikcs)    echo ipmi ;;
  303.             fb)    echo fb ;;
  304.             nb|drbd)    echo nb0 nb1 nb2 nb3 nb4 nb5 nb6 nb7;;
  305.             netlink)    echo netlink ;;
  306.             tap)    echo netlink ;;
  307.             hamradio)    echo hamradio ;;
  308.             snd)    ;;
  309.             ptm)    ;;
  310.             pts)    ;;
  311.             ttyB)    (for l in 0 1 2 3 4 5 6 7 ; do
  312.                     echo -n ttyB$l " "
  313.                  done) ; echo
  314.                 ;;
  315.             ttyS)    echo ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ;;
  316.             ttyI)    echo ttyI0 ttyI1 ttyI2 ttyI3 ;;
  317.             ircomm|irlpt)    irda ;;
  318.             ppp)    echo ppp ;;
  319.             usb)    echo usb ;;
  320.             dpt_i2o)    echo dpti ;;
  321.             bluetooth)    echo bluetooth ;;
  322.             lvm)    ;; # taken care of by LVM userspace tools
  323.             ramdisk)    echo ram ;;
  324.             null)    echo std ;;
  325.             zero)    echo std ;;
  326. #            *)    echo "$0: don't know what \"$1\" is" >&2 ;;
  327.             *)    echo $1
  328.         esac
  329.         shift
  330.     done
  331. }
  332.  
  333. for arg in `cvt $*`
  334. do
  335.     # this is to make the case patterns work as expected in all locales
  336.     LC_ALL=C
  337.     case $arg in
  338.     generic)
  339.         # pick the right generic-<arch> using dpkg's knowledge
  340.         case `dpkg --print-architecture` in
  341.             alpha)
  342.                 $0 $opts generic-alpha
  343.                 ;;
  344.             arm|armeb|armel)
  345.                 $0 $opts generic-arm
  346.                 ;;
  347.             hppa)
  348.                 $0 $opts generic-hppa
  349.                 ;;
  350.             i386|lpia)
  351.                 $0 $opts generic-i386
  352.                 ;;
  353.             amd64)
  354.                 $0 $opts generic-i386
  355.                 ;;
  356.             ia64)
  357.                 $0 $opts generic-ia64
  358.                 ;;
  359.             m68k)
  360.                 $0 $opts generic-m68k
  361.                 ;;
  362.             mips)
  363.                 $0 $opts generic-mips
  364.                 ;;
  365.             mipsel)
  366.                 $0 $opts generic-mipsel
  367.                 ;;
  368.             powerpc)
  369.                 $0 $opts generic-powerpc
  370.                 ;;
  371.             ppc64)
  372.                 $0 $opts generic-powerpc
  373.                 ;;
  374.             s390)
  375.                 $0 $opts generic-s390
  376.                 ;;
  377.             sh*)    
  378.                 $0 $opts generic-sh
  379.                 ;;
  380.             sparc)
  381.                 $0 $opts generic-sparc
  382.                 ;;
  383.             *)
  384.                 echo "$0: no support for generic on this arch" >&2
  385.                 exit 1
  386.                 ;;
  387.         esac
  388.         ;;
  389.     generic-alpha)
  390.         $0 $opts std
  391.         $0 $opts fd
  392.         $0 $opts fd0 fd1
  393.         $0 $opts hd sd
  394.         $0 $opts xda xdb
  395.         $0 $opts scd0 scd1
  396.         $0 $opts st0 st1
  397.         $0 $opts sg
  398.         $0 $opts pty
  399.         $0 $opts console
  400.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  401.         $0 $opts busmice
  402.         $0 $opts lp
  403.         $0 $opts par
  404.         $0 $opts audio
  405.         $0 $opts fb
  406.         $0 $opts dac960
  407.         ;;
  408.     generic-arm)
  409.         $0 $opts std
  410.         $0 $opts fd
  411.         $0 $opts fd0 fd1
  412.         $0 $opts hd sd
  413.         $0 $opts xda xdb
  414.         $0 $opts scd0 scd1
  415.         $0 $opts st0 st1
  416.         $0 $opts sg
  417.         $0 $opts pty
  418.         $0 $opts console
  419.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  420.         $0 $opts busmice
  421.         makedev sunmouse  c 10 6 $mouse
  422.         $0 $opts lp
  423.         $0 $opts par
  424.         $0 $opts audio
  425.         $0 $opts fb
  426.         ;;
  427.     generic-hppa)
  428.         $0 $opts std
  429.         $0 $opts fd
  430.         $0 $opts fd0 fd1
  431.         $0 $opts hd sd
  432.         $0 $opts scd0 scd1
  433.         $0 $opts st0 st1
  434.         $0 $opts sg
  435.         $0 $opts pty
  436.         $0 $opts console
  437.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  438.         $0 $opts ttyB0 ttyB1 ttyB2 ttyB3 ttyB4 ttyB5 ttyB6 ttyB7
  439.         $0 $opts busmice
  440.         $0 $opts lp
  441.         $0 $opts par
  442.         $0 $opts audio
  443.         $0 $opts fb
  444.         $0 $opts rtc
  445.         ;;
  446.     generic-i386)
  447.         $0 $opts std
  448.         $0 $opts fd
  449.         $0 $opts fd0 fd1
  450.         $0 $opts hd sd
  451.         $0 $opts xda xdb
  452.         $0 $opts scd0 scd1
  453.         $0 $opts st0 st1
  454.         $0 $opts sg
  455.         $0 $opts pty
  456.         $0 $opts console
  457.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  458.         $0 $opts busmice
  459.         $0 $opts input
  460.         $0 $opts lp
  461.         $0 $opts par
  462.         $0 $opts audio
  463.         $0 $opts fb
  464.         $0 $opts isdn-io eda edb sonycd mcd mcdx cdu535
  465.         $0 $opts optcd sjcd cm206cd gscd 
  466.         $0 $opts lmscd sbpcd aztcd bpcd dac960 dpti ida ataraid cciss
  467.         $0 $opts i2o.hda i2o.hdb i2o.hdc i2o.hdd
  468.         ;;
  469.     generic-ia64)
  470.         $0 $opts std
  471.         $0 $opts fd
  472.         $0 $opts fd0 fd1
  473.         $0 $opts hd sd
  474.         $0 $opts scd0 scd1
  475.         $0 $opts st0 st1
  476.         $0 $opts sg
  477.         $0 $opts pty
  478.         $0 $opts console
  479.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5
  480.         $0 $opts busmice
  481.         $0 $opts input
  482.         $0 $opts lp
  483.         $0 $opts par
  484.         $0 $opts audio
  485.         $0 $opts fb
  486.         $0 $opts efirtc
  487.         ;;
  488.     generic-m68k)
  489.         $0 $opts std
  490.         $0 $opts fd
  491.         $0 $opts fd0 fd1
  492.         $0 $opts hd sd
  493.         $0 $opts scd0 scd1
  494.         $0 $opts sg
  495.         $0 $opts ada adb adc add ade adf
  496.         $0 $opts pty
  497.         $0 $opts console
  498.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5
  499.         $0 $opts m68k-mice
  500.         $0 $opts lp
  501.         $0 $opts par
  502.         $0 $opts nvram
  503.         $0 $opts audio
  504.         $0 $opts fb
  505.         ;;
  506.     generic-mips)
  507.         $0 $opts std
  508.         $0 $opts fd
  509.         $0 $opts fd0 fd1
  510.         $0 $opts hd sd
  511.         $0 $opts scd0 scd1
  512.         $0 $opts st0 st1
  513.         $0 $opts sg
  514.         $0 $opts pty
  515.         $0 $opts console
  516.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  517.         $0 $opts lp
  518.         $0 $opts par
  519.         $0 $opts audio
  520.         $0 $opts fb
  521.         $0 $opts busmice
  522.         ;;
  523.     generic-mipsel)
  524.         $0 $opts std
  525.         $0 $opts fd
  526.         $0 $opts fd0 fd1
  527.         $0 $opts hd sd
  528.         $0 $opts scd0 scd1
  529.         $0 $opts st0 st1
  530.         $0 $opts sg
  531.         $0 $opts pty
  532.         $0 $opts console
  533.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  534.         $0 $opts lp
  535.         $0 $opts par
  536.         $0 $opts audio
  537.         $0 $opts fb
  538.         $0 $opts rtc
  539.         ;;
  540.     generic-powerpc)
  541.         $0 $opts std
  542.         $0 $opts fd
  543.         $0 $opts fd0 fd1
  544.         $0 $opts hd sd
  545.         $0 $opts scd0 scd1
  546.         $0 $opts st0 st1
  547.         $0 $opts sg
  548.         $0 $opts pty
  549.         $0 $opts console
  550.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  551.         $0 $opts busmice
  552.         $0 $opts m68k-mice
  553.         $0 $opts input
  554.         $0 $opts lp
  555.         $0 $opts par
  556.         $0 $opts nvram
  557.         $0 $opts audio
  558.         $0 $opts adb
  559.         $0 $opts fb
  560.         $0 $opts rtc
  561.         $0 $opts isdn-io
  562.         ;;
  563.     generic-s390)
  564.         $0 $opts std
  565.         $0 $opts fd
  566.         $0 $opts dasda dasdb dasdc dasdd dasde dasdf dasdg dasdh \
  567.             dasdi dasdj dasdk dasdl dasdm dasdn dasdo dasdp \
  568.             dasdq dasdr dasds dasdt dasdu dasdv dasdw dasdx \
  569.             dasdy dasdz
  570.         $0 $opts pty
  571.         $0 $opts consoleonly
  572.         $0 $opts rtc
  573.         ;;
  574.     generic-sh)
  575.         $0 $opts std
  576.         $0 $opts fd
  577.         $0 $opts fd0 fd1
  578.         $0 $opts hd sd
  579.         $0 $opts scd0 scd1
  580.         $0 $opts st0 st1
  581.         $0 $opts sg
  582.         $0 $opts pty
  583.         $0 $opts console
  584.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4  
  585.         $0 $opts ttySC0 ttySC1 ttySC2 ttySC3 
  586.         $0 $opts lp
  587.         $0 $opts par
  588.         $0 $opts audio
  589.         $0 $opts fb
  590.         $0 $opts rtc
  591.         ;;
  592.     generic-sparc)
  593.         $0 $opts std
  594.         $0 $opts fd
  595.         $0 $opts fd0 fd1
  596.         $0 $opts hd sd
  597.         $0 $opts scd0 scd1
  598.         $0 $opts st0 st1
  599.         $0 $opts sg
  600.         $0 $opts pty
  601.         $0 $opts console
  602.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  603.         $0 $opts busmice
  604.         $0 $opts fb
  605.         $0 $opts rtc
  606.         makedev kbd  c 11 0 $cons
  607.         makedev sunmouse  c 10 6 $mouse
  608.         symlink mouse sunmouse
  609.         makedev openprom  c 10 139 root root 0664
  610.         ;;
  611.     local)
  612.         $0.local $opts
  613.         ;;
  614.     std)
  615.         makedev mem  c 1 1 $kmem
  616.         makedev kmem c 1 2 $kmem
  617.         makedev null c 1 3 $public
  618.         makedev port c 1 4 $kmem
  619.         makedev zero c 1 5 $public
  620.         symlink core $procfs/kcore
  621.         makedev full c 1 7 $public
  622.         makedev random c 1 8 $public
  623.         makedev urandom c 1 9 $public
  624.         makedev tty  c 5 0 $tty
  625.         $0 $opts ram
  626.         $0 $opts loop
  627.         ;;
  628.     hamradio)
  629.         $0 $opts scc
  630.         $0 $opts bc
  631.         ;;
  632.     scc)
  633.         for unit in 0 1 2 3 4 5 6 7 
  634.         do
  635.             makedev scc$unit c 34 $unit $system
  636.         done
  637.         ;;
  638.     mtd)    
  639.         for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  640.         do
  641.             makedev mtd$unit c 90 `math $unit \* 2` $system
  642.         done
  643.         ;;
  644.     bc)    
  645.         for unit in 0 1 2 3
  646.         do
  647.             makedev bc$unit c 51 $unit $system
  648.         done
  649.         ;;
  650.     random)
  651.         makedev random c 1 8 $public
  652.         ;;
  653.     urandom)
  654.         makedev urandom c 1 9 $readable
  655.         ;;
  656.     ram)
  657.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
  658.             makedev ram$i  b 1 $i $disk
  659.         done
  660.         symlink ram ram1
  661.         ;;
  662.     ram[0-9]|ram1[0-6])
  663.         unit=`suffix $arg ram`
  664.         makedev ram$unit b 1 $unit $disk
  665.         ;;
  666.     initrd)
  667.         makedev initrd b 1 250 $disk
  668.         ;;
  669.     raw)
  670.         makedev rawctl c 162 0 $disk
  671.         mkdir -p raw
  672.         for i in 1 2 3 4 5 6 7 8; do
  673.             makedev raw/raw$i c 162 $i $disk
  674.         done
  675.         ;;
  676.     consoleonly)
  677.         makedev tty0 c 4 0 $cons
  678.         #    new kernels need a device, old ones a symlink... sigh
  679.         kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
  680.         kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
  681.         if [ $kern_rev1 -gt 2 ]
  682.         then
  683.             makedev console c 5 1 $cons
  684.         else
  685.             if [ $kern_rev1 -eq 2 ] && [ $kern_rev2 -ge 1 ]
  686.             then
  687.                 makedev console c 5 1 $cons
  688.             else
  689.                 symlink console tty0
  690.             fi
  691.         fi
  692.         ;;
  693.     console)
  694.         $0 $opts consoleonly
  695.         major=`Major vcs 7`       # not fatal
  696.         [ "$major" ] && makedev vcs0 c $major 0 $cons
  697.         symlink vcs vcs0
  698.         [ "$major" ] && makedev vcsa0 c $major 128 $cons
  699.         symlink vcsa vcsa0
  700.         # individual vts
  701.         line=1
  702.         while [ $line -le $MAXVT ] && [ $line -le 63 ]
  703.         do
  704.             makedev tty$line c 4 $line $cons
  705.             [ "$major" ] && makedev vcs$line c $major $line $cons
  706.             [ "$major" ] && makedev vcsa$line c $major `math $line + 128` $cons
  707.             line=`math $line + 1`
  708.         done
  709.         ;;
  710.     adb)
  711.         # pick the right arch device using dpkg's knowledge
  712.         case `dpkg --print-architecture` in
  713.             powerpc)
  714.                 # ADB bus devices (char)
  715.                 makedev adb c 56 0 $mouse
  716.                 makedev adbmouse c 10 10 $mouse
  717.                 ;;
  718.             m68k)
  719.                 # ACSI disk 2, whole device (block)
  720.                 makedev adb b 28 16 $disk
  721.                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  722.                 do
  723.                     minor=$(( 16 + $part ))
  724.                     makedev adb$part b 28 $minor $disk
  725.                 done
  726.                 ;;
  727.             *)
  728.                 echo "no support for adb on this arch" >&2
  729.                 exit 1
  730.                 ;;
  731.         esac
  732.         ;;
  733.     raw1394)
  734.         makedev raw1394 c 171 0 $disk
  735.         ;;
  736.     video1394)
  737.         rm -f video1394
  738.         mkdir -p video1394
  739.         for i in `seq 0 15`
  740.         do
  741.             makedev video1394/$i c 171 `math 16 + $i` $video
  742.         done
  743.         ;;
  744.     alsa)
  745.         echo "You requested 'alsa' devices.  Please install the alsa-base package instead,"
  746.         echo "which creates and maintains device information for ALSA."
  747.         ;;
  748.     nvram)
  749.         makedev nvram c 10 144 $mouse
  750.         ;;
  751.     tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
  752.         line=`suffix $arg tty`
  753.         makedev tty$line c 4 $line $cons
  754.         ;;
  755.     ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
  756.         line=`suffix $arg ttyS`
  757.         minor=`math 64 + $line`
  758.         makedev ttyS$line c 4 $minor $dialout
  759.         ;;
  760.     ttySC[0-3])
  761.         line=`suffix $arg ttySC`
  762.         minor=`math 8 + $line`
  763.         makedev ttySC$line c 204 $minor $dialout
  764.          ;;
  765.     ttyB[0-7])
  766.         minor=`suffix $arg ttyB`
  767.         makedev ttyB$minor c 11 $minor $dialout
  768.         ;;
  769.     pty[a-ep-z])
  770.         bank=`suffix $arg pty`
  771.         base=`index pqrstuvwxyzabcde $bank`
  772.         base=`math $base \* 16`
  773.         for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
  774.         do
  775.             j=`index 0123456789abcdef $i`
  776.             makedev pty$bank$i c 2 `math $base + $j` $tty
  777.             makedev tty$bank$i c 3 `math $base + $j` $tty
  778.         done
  779.         ;;
  780.     pty)
  781.         ptysufs=""
  782.         for i in p q r s t u v w x y z a b c d e
  783.         do
  784.             ptysufs="$ptysufs pty$i"
  785.         done
  786.         $0 $opts $ptysufs ptmx
  787.         ;;
  788.     ptmx)
  789.         # master pty multiplexer for 2.1 kernels
  790.         makedev ptmx c 5 2 $tty
  791.         ;;
  792.     cyclades|ttyC)
  793.         major1=`Major ttyC 19` || continue
  794.         #major2=`Major cub 20` || continue
  795.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
  796.               16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
  797.         do
  798.             makedev ttyC$i c $major1 $i $dialout
  799.             #makedev cub$i c $major2 $i $dialout
  800.         done
  801.         ;;
  802.     stallion|ttyE)
  803.         major1=`Major ttyE 24` || continue
  804.         #major2=`Major cue 25` || continue
  805.         majorc=28
  806.         minor=0
  807.         until [ $minor -gt 256 ]
  808.         do
  809.             makedev ttyE$minor c $major1 $minor $dialout
  810.             #makedev cue$minor c $major2 $minor $dialout
  811.             minor=`math $minor + 1`
  812.         done
  813.         for i in 0 1 2 3
  814.         do
  815.             makedev staliomem$i c $majorc $i $private
  816.         done
  817.         ;;
  818.     chase|ttyH)
  819.         major1=`Major ttyH 17` || continue
  820.         #major2=`Major cuh 18` || continue
  821.         minor=0
  822.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  823.         do
  824.             makedev ttyH$minor c $major1 $minor $dialout
  825.             #makedev cuh$minor c $major2 $minor $dialout
  826.             minor=`math $minor + 1`
  827.         done
  828.         ;;
  829.     rocketport|ttyR)
  830.         major1=`Major ttyR 46` || continue
  831.         #major2=`Major cur 47` || continue
  832.         minor=0
  833.         until [ $minor -gt 64 ] # tell me if 64 is wrong
  834.         do
  835.             makedev ttyR$minor c $major1 $minor $dialout
  836.             #makedev cur$minor c $major2 $minor $dialout
  837.             minor=`math $minor + 1`
  838.         done
  839.         ;;
  840.     ttyV)
  841.         major1=`Major ttyV 105` || continue
  842.         #major2=`Major cuv 106` || continue
  843.         minor=0
  844.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  845.         do
  846.             makedev ttyV$minor c $major1 $minor $dialout
  847.             #makedev cuv$minor c $major2 $minor $dialout
  848.             minor=`math $minor + 1`
  849.         done
  850.         ;;
  851.     digi|ttyD)
  852.         major1=`Major ttyD 22` || continue
  853.         #major2=`Major cud 23` || continue
  854.         minor=0
  855.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  856.         do
  857.             makedev ttyD$minor c $major1 $minor $dialout
  858.             #makedev cud$minor c $major2 $minor $dialout
  859.             minor=`math $minor + 1`
  860.         done
  861.         ;;
  862.     specialix|ttyX)
  863.         major1=`Major ttyX 32` || continue
  864.         #major2=`Major cux 33` || continue
  865.         minor=0
  866.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  867.         do
  868.             makedev ttyX$minor c $major1 $minor $dialout
  869.             #makedev cux$minor c $major2 $minor $dialout
  870.             minor=`math $minor + 1`
  871.         done
  872.         ;;
  873.     specialixIO8|ttyW)
  874.         major1=`Major ttyW 75` || continue
  875.         #major2=`Major cuw 76` || continue
  876.         minor=0
  877.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  878.         do
  879.             makedev ttyW$minor c $major1 $minor $dialout
  880.             #makedev cuw$minor c $major2 $minor $dialout
  881.             minor=`math $minor + 1`
  882.         done
  883.         ;;
  884.     PAM|ttyM)
  885.         major1=`Major ttyM 79` || continue
  886.         #major2=`Major cum 80` || continue
  887.         minor=0
  888.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  889.         do
  890.             makedev ttyM$minor c $major1 $minor $dialout
  891.             #makedev cum$minor c $major2 $minor $dialout
  892.             minor=`math $minor + 1`
  893.         done
  894.         ;;
  895.     riscom|ttyL)
  896.         major=`Major ttyL 48` || continue
  897.         minor=0
  898.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  899.         do
  900.             makedev ttyL$minor c $major $minor $dialout
  901.             minor=`math $minor + 1`
  902.         done
  903.         ;;
  904.     computone|ttyF)
  905.         major=`Major ttyF 71` || continue
  906.         #major2=`Major cuf 72` || continue
  907.         minor=0
  908.         until [ $minor -gt 255 ]
  909.         do
  910.             makedev ttyF$minor c $major $minor $dialout
  911.             #makedev cuf$minor c $major2 $minor $dialout
  912.             minor=`math $minor + 1`
  913.         done
  914.         major=73
  915.         for i in 0 4 8 12
  916.         do
  917.             makedev ip2ipl$i  c $major $i $private
  918.             makedev ip2stat$i c $major `math $i + 1` $private
  919.         done
  920.         ;;
  921.     ESP|ttyP)
  922.         major=`Major ttyP 57` || continue
  923.         #major2=`Major cup 58` || continue
  924.         minor=0
  925.         until [ $minor -gt 4 ] # tell me if 4 is wrong
  926.         do
  927.             makedev ttyP$minor c $major $minor $dialout
  928.             #makedev cup$minor c $major2 $minor $dialout
  929.             minor=`math $minor + 1`
  930.         done
  931.         ;;
  932.     COMX|comx)
  933.         major=`Major comx 88` || continue
  934.         minor=0
  935.         until [ $minor -gt 4 ] # tell me if 4 is wrong
  936.         do
  937.             makedev comx$minor c $major $minor $private
  938.             minor=`math $minor + 1`
  939.         done
  940.         ;;
  941.     isdnmodem|ttyI)
  942.         major1=`Major ttyI 43` || continue
  943.         #major2=`Major cui 44` || continue
  944.         minor=0
  945.         until [ $minor -gt 63 ]
  946.         do
  947.             makedev ttyI$minor c $major1 $minor $dialout
  948.             #makedev cui$minor c $major2 $minor $dialout
  949.             minor=`math $minor + 1`
  950.         done
  951.         ;;
  952.     isdnbri)
  953.         major=45
  954.         minor=0
  955.         until [ $minor -gt 63 ]
  956.         do
  957.             makedev isdn$minor c $major $minor $dialout
  958.             makedev isdnctrl$minor c $major `math $minor + 64` $dialout
  959.             makedev ippp$minor c $major `math $minor + 128` $dialout
  960.             minor=`math $minor + 1`
  961.         done
  962.         makedev isdninfo c $major 255 $private
  963.         ;;
  964.     dcbri)
  965.         major=52
  966.         for i in 0 1 2 3
  967.         do
  968.             makedev dcbri$i c $major $i $dialout
  969.         done
  970.         ;;
  971.     capi)
  972.         major=68
  973.         makedev capi20 c $major 0 $dialout
  974.         for i in 0 1 2 3 4 5 6 7 8 9
  975.         do
  976.             makedev capi20.0$i c $major `math $i + 1` $dialout
  977.         done
  978.         for i in 10 11 12 13 14 15 16 17 18 19
  979.         do
  980.             makedev capi20.$i c $major `math $i + 1` $dialout
  981.         done
  982.         ;;
  983.     ubd)
  984.         major=98
  985.         for devicenum in 0 1 2 3 4 5 6 7
  986.         do
  987.             device=ubd`substr abcdefgh $(($devicenum + 1))`
  988.             baseminor=`math $devicenum \* 16`
  989.             makedev $device b $major $baseminor $disk
  990.             for partition in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  991.             do
  992.                 minor=`math $baseminor + $partition`
  993.                 makedev $device$partition b $major $minor $disk
  994.             done
  995.         done
  996.         ;;
  997.     fb)
  998.         for i in 0 1 2 3 4 5 6 7
  999.         do
  1000.             makedev fb$i c 29 $i $video
  1001.         done
  1002.         ;;
  1003.     fb[0-7])
  1004.         dev=`suffix $arg fb`
  1005.         makedev fb$dev c 29 $dev $video
  1006.         ;;
  1007.     netlink|tap|tap[0-9]|tap1[0-5])
  1008.         makedev route     c 36 0 $coda
  1009.         makedev skip      c 36 1 $coda
  1010.         makedev fwmonitor c 36 3 $coda
  1011.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1012.         do
  1013.             makedev tap$i c 36 `math $i + 16` $coda
  1014.         done
  1015.         ;;
  1016.     tun)
  1017.         mkdir -p net
  1018.         makedev net/tun c 10 200 $system
  1019.         ;;
  1020.     lp)
  1021.         major=`Major lp 6` || continue
  1022.         makedev ${arg}0 c $major 0 $printer
  1023.         makedev ${arg}1 c $major 1 $printer
  1024.         makedev ${arg}2 c $major 2 $printer
  1025.         ;;
  1026.     par)
  1027.         major=`Major lp 6` || continue
  1028.         makedev ${arg}0 c $major 0 $printer
  1029.         makedev ${arg}1 c $major 1 $printer
  1030.         makedev ${arg}2 c $major 2 $printer
  1031.         ;;
  1032.     parport)
  1033.         major=`Major parport 99` || continue
  1034.         makedev ${arg}0 c $major 0 $printer
  1035.         makedev ${arg}1 c $major 1 $printer
  1036.         makedev ${arg}2 c $major 2 $printer
  1037.         ;;
  1038.     slm)
  1039.         major=`Major slm 28` || continue
  1040.         for i in 0 1 2 3
  1041.         do
  1042.             makedev slm c $major $i $printer
  1043.         done
  1044.         ;;
  1045.     input)
  1046.         major=`Major pcsp 13` || continue
  1047.         mkdir -p input
  1048.         for i in 0 1 2 3
  1049.         do
  1050.             makedev input/js$i c $major $i $mouse
  1051.             makedev input/mouse$i c $major `math $i + 32` $mouse
  1052.             makedev input/event$i c $major `math $i + 64` $mouse
  1053.         done
  1054.         makedev input/mice c $major 63 $mouse
  1055.         ;;
  1056.     busmice)
  1057.         major=`Major mouse 10` || continue
  1058.         makedev logibm      c $major 0 $mouse
  1059.         makedev psaux     c $major 1 $mouse
  1060.         makedev inportbm  c $major 2 $mouse
  1061.         makedev atibm     c $major 3 $mouse
  1062.         makedev jbm       c $major 4 $mouse
  1063.         ;;
  1064.     m68k-mice)
  1065.         major=`Major mouse 10` || continue
  1066.         makedev amigamouse c $major 4 $mouse
  1067.         makedev atarimouse c $major 5 $mouse
  1068.         makedev amigamouse1 c $major 7 $mouse
  1069.         makedev adbmouse  c $major 10 $mouse
  1070.         ;;
  1071.     3dfx)
  1072.         major=`Major $arg 107` || continue
  1073.         makedev $arg    c $major 0 $video
  1074.         ;;
  1075.     agpgart)
  1076.         major=`Major $arg 10` || continue
  1077.         makedev $arg    c $major 175 $video
  1078.         ;;
  1079.     hwrng)
  1080.         major=`Major $arg 10` || continue
  1081.         makedev $arg    c $major 183 $private
  1082.         ;;
  1083.     mcelog)
  1084.         major=`Major $arg 10` || continue
  1085.         makedev $arg    c $major 227 $private
  1086.         ;;
  1087.     cpu|microcode)
  1088.         mkdir -p cpu
  1089.         makedev cpu/microcode c 10 184 $private
  1090.         for i in 0 1 2 3
  1091.         do
  1092.             mkdir -p cpu/$i
  1093.             makedev cpu/$i/msr   c 202 $i $private
  1094.             makedev cpu/$i/cpuid c 203 $i $private
  1095.         done
  1096.         ;;
  1097.     ipmi|ipmikcs)
  1098.         major=`Major ipmikcs 10` || continue
  1099.         makedev ipmikcs    c $major 173 $private
  1100.         ;;
  1101.     irda)
  1102.         for i in 0 1
  1103.         do
  1104.             makedev ircomm$i c 161 $i $dialout
  1105.             makedev irlpt$i  c 161 `math $i + 16` $printer
  1106.         done
  1107.         ;;
  1108.     irnet)
  1109.         makedev irnet c 10 187 $system
  1110.         ;;
  1111.     cbm)
  1112.         makedev cbm c 10 177 $floppy
  1113.         ;;
  1114.     misc)
  1115.         major=`Major mouse 10` || continue
  1116.         makedev logibm      c $major 0 $mouse
  1117.         makedev psaux     c $major 1 $mouse
  1118.         makedev inportbm  c $major 2 $mouse
  1119.         makedev atibm     c $major 3 $mouse
  1120.         makedev jbm       c $major 4 $mouse
  1121.         makedev amigamouse c $major 4 $mouse
  1122.         makedev atarimouse c $major 5 $mouse
  1123.         makedev sunmouse  c $major 6 $mouse
  1124.         makedev amigamouse1 c $major 7 $mouse
  1125.         makedev smouse    c $major 8 $mouse
  1126.         makedev pc110pad  c $major 9 $mouse
  1127.         makedev adbmouse  c $major 10 $mouse
  1128.         makedev beep      c $major 128 $mouse
  1129.         makedev modreq    c $major 129 $mouse
  1130.         makedev watchdog  c $major 130 $mouse
  1131.         makedev temperature c $major 131 $mouse
  1132.         makedev hwtrap    c $major 132 $mouse
  1133.         makedev exttrp    c $major 133 $mouse
  1134.         makedev apm_bios  c $major 134 $mouse
  1135.         makedev rtc       c $major 135 $mouse
  1136.         makedev openprom  c $major 139 root root 0664
  1137.         makedev relay8    c $major 140 $mouse
  1138.         makedev relay16   c $major 141 $mouse
  1139.         makedev msr       c $major 142 $mouse
  1140.         makedev pciconf   c $major 143 $mouse
  1141.         makedev nvram     c $major 144 $mouse
  1142.         makedev hfmodem   c $major 145 $mouse
  1143.         makedev led       c $major 151 $mouse
  1144.         makedev mergemem  c $major 153 $mouse
  1145.         makedev pmu       c $major 154 $mouse
  1146.         ;;
  1147.     fuse)
  1148.         makedev fuse      c 10 229 $system
  1149.         ;;
  1150.     pmu)
  1151.         major=`Major mouse 10` || continue
  1152.         makedev pmu       c $major 154 $mouse
  1153.         ;;
  1154.     thinkpad)
  1155.         major=`Major mouse 10` || continue
  1156.         mkdir -p thinkpad
  1157.         makedev thinkpad/thinkpad c $major 170 $mouse
  1158.         ;;
  1159.         rtc)
  1160.         major=`Major mouse 10` || continue
  1161.         makedev rtc       c $major 135 $mouse
  1162.         ;;
  1163.     efirtc)
  1164.         major=`Major mouse 10` || continue
  1165.         makedev efirtc    c $major 136 $mouse
  1166.          ;;
  1167.     mwave)
  1168.         makedev mwave     c 10 219 $mouse
  1169.         ;;
  1170.     systrace)
  1171.         makedev systrace  c 10 226 $private
  1172.         ;;
  1173.     uinput)
  1174.         mkdir -p input
  1175.         makedev input/uinput  c 10 223 $mouse
  1176.         ;;
  1177.     js)
  1178.         major=`Major Joystick 13` || continue
  1179.         for unit in 0 1 2 3
  1180.         do
  1181.             makedev js$unit c $major $unit $readable
  1182.             makedev djs$unit c $major `math $unit + 128` $readable
  1183.         done
  1184.         ;;
  1185.     fd[0-7])
  1186.         major=`Major fd 2` || continue
  1187.         base=`suffix $arg fd`
  1188.         if [ $base -ge 4 ]
  1189.         then
  1190.             base=`math $base + 124`
  1191.         fi
  1192.         makedev ${arg} b $major $base $floppy
  1193.         makedev ${arg}d360  b $major `math $base +  4` $floppy
  1194.         makedev ${arg}h1200 b $major `math $base +  8` $floppy
  1195.         makedev ${arg}u360  b $major `math $base + 12` $floppy
  1196.         makedev ${arg}u720  b $major `math $base + 16` $floppy
  1197.         makedev ${arg}h360  b $major `math $base + 20` $floppy
  1198.         makedev ${arg}h720  b $major `math $base + 24` $floppy
  1199.         makedev ${arg}u1440 b $major `math $base + 28` $floppy
  1200.         makedev ${arg}u2880 b $major `math $base + 32` $floppy
  1201.         makedev ${arg}CompaQ b $major `math $base + 36` $floppy
  1202.  
  1203.         makedev ${arg}h1440 b $major `math $base + 40` $floppy
  1204.         makedev ${arg}u1680 b $major `math $base + 44` $floppy
  1205.         makedev ${arg}h410  b $major `math $base + 48` $floppy
  1206.         makedev ${arg}u820  b $major `math $base + 52` $floppy
  1207.         makedev ${arg}h1476 b $major `math $base + 56` $floppy
  1208.         makedev ${arg}u1722 b $major `math $base + 60` $floppy
  1209.         makedev ${arg}h420  b $major `math $base + 64` $floppy
  1210.         makedev ${arg}u830  b $major `math $base + 68` $floppy
  1211.         makedev ${arg}h1494 b $major `math $base + 72` $floppy
  1212.         makedev ${arg}u1743 b $major `math $base + 76` $floppy
  1213.         makedev ${arg}h880  b $major `math $base + 80` $floppy
  1214.         makedev ${arg}u1040 b $major `math $base + 84` $floppy
  1215.         makedev ${arg}u1120 b $major `math $base + 88` $floppy
  1216.         makedev ${arg}h1600 b $major `math $base + 92` $floppy
  1217.         makedev ${arg}u1760 b $major `math $base + 96` $floppy
  1218.         makedev ${arg}u1920 b $major `math $base + 100` $floppy
  1219.         makedev ${arg}u3200 b $major `math $base + 104` $floppy
  1220.         makedev ${arg}u3520 b $major `math $base + 108` $floppy
  1221.         makedev ${arg}u3840 b $major `math $base + 112` $floppy
  1222.         makedev ${arg}u1840 b $major `math $base + 116` $floppy
  1223.         makedev ${arg}u800  b $major `math $base + 120` $floppy
  1224.         makedev ${arg}u1600 b $major `math $base + 124` $floppy
  1225.         ;;
  1226.     ed[a-b])
  1227.         major=`Major ed 36` || continue
  1228.         unit=`suffix $arg ed`
  1229.         base=`index ab $unit`
  1230.         base=`math $base \* 64`
  1231.         makedev ed$unit b $major $base $disk
  1232.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
  1233.         do
  1234.             makedev ed$unit$part b $major `math $base + $part` $disk
  1235.         done
  1236.         ;;
  1237.     hd[a-b])
  1238.         major=`Major ide0` || major=`Major hd 3` || continue
  1239.         unit=`suffix $arg hd`
  1240.         base=`index ab $unit`
  1241.         base=`math $base \* 64`
  1242.         makedev hd$unit b $major $base $disk
  1243.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1244.         do
  1245.             makedev hd$unit$part b $major `math $base + $part` $disk
  1246.         done
  1247.         ;;
  1248.     hd[c-d])
  1249.         major=`Major ide1 22` || continue
  1250.         unit=`suffix $arg hd`
  1251.         base=`index cd $unit`
  1252.         base=`math $base \* 64`
  1253.         makedev hd$unit b $major $base $disk
  1254.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1255.         do
  1256.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1257.         done
  1258.         ;;
  1259.     hd[e-f])
  1260.         major=`Major ide2 33` || continue
  1261.         unit=`suffix $arg hd`
  1262.         base=`index ef $unit`
  1263.         base=`math $base \* 64`
  1264.         makedev hd$unit b $major $base $disk
  1265.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1266.         do
  1267.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1268.         done
  1269.         ;;
  1270.     hd[g-h])
  1271.         major=`Major ide3 34` || continue
  1272.         unit=`suffix $arg hd`
  1273.         base=`index gh $unit`
  1274.         base=`math $base \* 64`
  1275.         makedev hd$unit b $major $base $disk
  1276.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1277.         do
  1278.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1279.         done
  1280.         ;;
  1281.     hd[i-j])
  1282.         major=`Major ide4 56` || continue
  1283.         unit=`suffix $arg hd`
  1284.         base=`index ij $unit`
  1285.         base=`math $base \* 64`
  1286.         makedev hd$unit b $major $base $disk
  1287.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1288.         do
  1289.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1290.         done
  1291.         ;;
  1292.     hd[k-l])
  1293.         major=`Major ide5 57` || continue
  1294.         unit=`suffix $arg hd`
  1295.         base=`index kl $unit`
  1296.         base=`math $base \* 64`
  1297.         makedev hd$unit b $major $base $disk
  1298.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1299.         do
  1300.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1301.         done
  1302.         ;;
  1303.     hd[m-n])
  1304.         major=`Major ide6 88` || continue
  1305.         unit=`suffix $arg hd`
  1306.         base=`index mn $unit`
  1307.         base=`math $base \* 64`
  1308.         makedev hd$unit b $major $base $disk
  1309.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1310.         do
  1311.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1312.         done
  1313.         ;;
  1314.     hd[o-p])
  1315.         major=`Major ide7 89` || continue
  1316.         unit=`suffix $arg hd`
  1317.         base=`index op $unit`
  1318.         base=`math $base \* 64`
  1319.         makedev hd$unit b $major $base $disk
  1320.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1321.         do
  1322.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1323.         done
  1324.         ;;
  1325.     hd[q-r])
  1326.         major=`Major ide8 90` || continue
  1327.         unit=`suffix $arg hd`
  1328.         base=`index qr $unit`
  1329.         base=`math $base \* 64`
  1330.         makedev hd$unit b $major $base $disk
  1331.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1332.         do
  1333.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1334.         done
  1335.         ;;
  1336.     hd[s-t])
  1337.         major=`Major ide9 91` || continue
  1338.         unit=`suffix $arg hd`
  1339.         base=`index st $unit`
  1340.         base=`math $base \* 64`
  1341.         makedev hd$unit b $major $base $disk
  1342.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1343.         do
  1344.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1345.         done
  1346.         ;;
  1347.     ub|uba)    
  1348.         major=180
  1349.         makedev uba b $major 0 $disk
  1350.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1351.         do
  1352.             makedev uba$part b $major $part $disk
  1353.         done
  1354.         ;;
  1355.     ht0)
  1356.         major=`Major ht0 37` || continue
  1357.         # Only one IDE tape drive is currently supported; ht0.
  1358.         makedev ht0 c $major 0 $tape
  1359.         makedev nht0 c $major 128 $tape
  1360.         ;;
  1361.     pt)
  1362.         major=`Major pt 96` || continue
  1363.         for i in 0 1 2 3
  1364.         do
  1365.             makedev pt$i c $major $i $tape
  1366.             makedev npt$i c $major `math $i + 128` $tape
  1367.         done
  1368.         ;;
  1369.     xd[a-d])
  1370.         major=`Major xd 13` || continue
  1371.         unit=`suffix $arg xd`
  1372.         base=`index abcd $unit`
  1373.         base=`math $base \* 64`
  1374.         makedev xd$unit b $major $base $disk
  1375.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
  1376.         do
  1377.             makedev xd$unit$part b $major $(( $base + $part )) $disk
  1378.         done
  1379.         ;;
  1380.     sd[a-z])
  1381.         major=`Major sd 8` || continue
  1382.         unit=`suffix $arg sd`
  1383.         base=`index abcdefghijklmnopqrstuvwxyz $unit`
  1384.         base=$(( $base * 16 ))
  1385.         if [ $base -lt 256 ]; then
  1386.             major=8
  1387.         else
  1388.             major=65
  1389.             base=$(( $base - 256 ))
  1390.         fi
  1391.         makedev sd$unit b $major $base $disk
  1392.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1393.         do
  1394.             minor=$(( $base + $part ))
  1395.             makedev sd$unit$part b $major $minor $disk
  1396.         done
  1397.         ;;
  1398.     sd[a-d][a-z])
  1399.         unit=`suffix $arg sd`
  1400.         unitmaj=`first $unit`
  1401.         unitmin=`second $unit`
  1402.         basemaj=`index Xabcd $unitmaj`
  1403.         basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
  1404.         basemaj=`math $basemaj \* 416`
  1405.         basemin=`math $basemin \* 16`
  1406.         base=`math $basemaj + $basemin`
  1407.         basemaj=`math $base / 256`
  1408.         base=`math $base % 256`
  1409.         major=`math basemaj \+ 64`
  1410.         if [ $major -gt 71 ]; then
  1411.             echo "$0: don't know how to make device \"$arg\"" >&2
  1412.             exit 0
  1413.         fi
  1414.         makedev sd$unit b $major $base $disk
  1415.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1416.         do
  1417.             minor=$(( $base + $part ))
  1418.             makedev sd$unit$part b $major $minor $disk
  1419.         done
  1420.                 ;;
  1421.     i2o.hd[a-z])
  1422.         [ -d i2o ] || {
  1423.             mkdir i2o
  1424.             chown root:root i2o
  1425.             chmod 755 i2o
  1426.                   [ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
  1427.         }
  1428.         unit=`suffix $arg i2o.hd`
  1429.         base=`index abcdefghijklmnopqrstuvwxyz $unit`
  1430.         base=$(( $base * 16 ))
  1431.         if [ $base -lt 256 ]; then
  1432.             major=80
  1433.         else
  1434.             major=81
  1435.             base=$(( $base - 256 ))
  1436.         fi
  1437.         makedev i2o/hd$unit b $major $base $disk
  1438.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1439.         do
  1440.             minor=$(( $base + $part ))
  1441.             makedev i2o/hd$unit$part b $major $minor $disk
  1442.         done
  1443.         ;;
  1444.     i2o.hd[a-d][a-z])
  1445.         [ -d i2o ] || {
  1446.             mkdir i2o
  1447.             chown root:root i2o
  1448.             chmod 755 i2o
  1449.                   [ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
  1450.         }
  1451.         unit=`suffix $arg i2o.hd`
  1452.         unitmaj=`first $unit`
  1453.         unitmin=`second $unit`
  1454.         basemaj=`index Xabcd $unitmaj`
  1455.         basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
  1456.         basemaj=`math $basemaj \* 416`
  1457.         basemin=`math $basemin \* 16`
  1458.         base=`math $basemaj + $basemin`
  1459.         basemaj=`math $base / 256`
  1460.         base=`math $base % 256`
  1461.         major=`math basemaj \+ 80`
  1462.         if [ $major -gt 87 ]; then
  1463.             echo "$0: don't know how to make device \"$arg\"" >&2
  1464.             exit 0
  1465.         fi
  1466.         makedev i2o/hd$unit b $major $base $disk
  1467.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1468.         do
  1469.             minor=$(( $base + $part ))
  1470.             makedev i2o/hd$unit$part b $major $minor $disk
  1471.         done
  1472.         ;;
  1473.     dasd[a-z])
  1474.         major=`Major dasd 94` || continue
  1475.         unit=`suffix $arg dasd`
  1476.         base=`index abcdefghijklmnopqrstuvwxyz $unit`
  1477.         base=$(( $base * 4 ))
  1478.         if [ $base -lt 256 ]; then
  1479.             major=94
  1480.         else
  1481.             major=65
  1482.             base=$(( $base - 256 ))
  1483.         fi
  1484.         makedev dasd$unit b $major $base $disk
  1485.         for part in 1 2 3
  1486.         do
  1487.             minor=$(( $base + $part ))
  1488.             makedev dasd$unit$part b $major $minor $disk
  1489.         done
  1490.         ;;
  1491.     ad[a-p])
  1492.         major=`Major ad 28` || continue
  1493.         unit=`suffix $arg ad`
  1494.         base=`index abcdefghijklmnop $unit`
  1495.         base=`math $base \* 16`
  1496.         makedev ad$unit b $major $base $disk
  1497.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1498.         do
  1499.             minor=$(( $base + $part ))
  1500.             makedev ad$unit$part b $major $minor $disk
  1501.         done
  1502.         ;;
  1503.     dac960)
  1504.         for ctr in 0 1 2 3 4 5 6 7
  1505.         do
  1506.             $0 $opts dac960.$ctr
  1507.         done
  1508.         makedev dac960_gam c 10 252 $disk
  1509.         ;;
  1510.     dac960.[0-7])
  1511.         [ -d rd ] || {
  1512.             mkdir rd
  1513.             chown root:root rd
  1514.             chmod 755 rd
  1515.         }
  1516.         unit=`suffix $arg dac960.`
  1517.             major=`math 48 + $unit`
  1518.             minor=0
  1519.             for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
  1520.                 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  1521.             do
  1522.             makedev rd/c${unit}d${ld} b $major $minor $disk
  1523.             minor=`math $minor + 1`
  1524.             for part in 1 2 3 4 5 6 7
  1525.             do
  1526.                 makedev rd/c${unit}d${ld}p$part b $major $minor $disk
  1527.                 minor=`math $minor + 1`
  1528.             done
  1529.             done
  1530.         ;;
  1531.     dpti)
  1532.         major=151
  1533.         for ld in 1 2 3 4 5 6 7
  1534.         do
  1535.            minor=`math $ld -1`
  1536.            makedev dpti${ld} c $major $minor $disk
  1537.                 done
  1538.                 ;;
  1539.     ataraid)
  1540.         for ctr in 0 1 2 # 3 4 5 6 7
  1541.         do
  1542.             $0 $opts ataraid.$ctr
  1543.         done
  1544.         ;;
  1545.     ataraid.[0-7])
  1546.         [ -d ataraid ] || {
  1547.             mkdir ataraid
  1548.             chown root:root ataraid
  1549.             chmod 755 ataraid
  1550.         }
  1551.                 unit=`suffix $arg ataraid.`
  1552.                 major=114
  1553.                 minor=`math $unit \* 16`
  1554.                 makedev ataraid/d${unit} b $major $minor $disk
  1555.                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1556.                 do
  1557.                    minor=`math $minor + 1`
  1558.                    makedev ataraid/d${unit}p$part b $major $minor $disk
  1559.                 done
  1560.          ;;
  1561.     ida)
  1562.         for ctr in 0 1 2 # 3 4 5 6 7
  1563.         do
  1564.             $0 $opts ida.$ctr
  1565.         done
  1566.         ;;
  1567.     ida.[0-7])
  1568.         [ -d ida ] || {
  1569.             mkdir ida
  1570.             chown root:root ida
  1571.             chmod 755 ida
  1572.         }
  1573.         unit=`suffix $arg ida.`
  1574.         major=`math 72 + $unit`
  1575.         minor=0
  1576.         for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1577.         do
  1578.             makedev ida/c${unit}d${ld} b $major $minor $disk
  1579.             minor=`math $minor + 1`
  1580.             for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1581.             do
  1582.             makedev ida/c${unit}d${ld}p$part b $major $minor $disk
  1583.             minor=`math $minor + 1`
  1584.             done
  1585.         done
  1586.         ;;
  1587.     cciss)
  1588.         for ctr in 0 1 2 # 3 4 5 6 7
  1589.         do
  1590.             $0 $opts cciss.$ctr
  1591.         done
  1592.         ;;
  1593.     cciss.[0-7])
  1594.         [ -d cciss ] || {
  1595.             mkdir cciss
  1596.             chown root:root cciss
  1597.             chmod 755 cciss
  1598.         }
  1599.         unit=`suffix $arg cciss.`
  1600.         major=`math 104 + $unit`
  1601.         minor=0
  1602.         for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1603.         do
  1604.             makedev cciss/c${unit}d${ld} b $major $minor $disk
  1605.             minor=`math $minor + 1`
  1606.             for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1607.             do
  1608.             makedev cciss/c${unit}d${ld}p$part b $major $minor $disk
  1609.             minor=`math $minor + 1`
  1610.             done
  1611.         done
  1612.         ;;
  1613.     rom)
  1614.         major=`Major rom 31`
  1615.         for i in 0 1 2 3 4 5 6 7
  1616.         do
  1617.             makedev rom$i    b $major $i $disk
  1618.             makedev rrom$i   b $major `math $i +8` $disk
  1619.             makedev flash$i  b $major `math $i +16` $disk
  1620.             makedev rflash$i b $major `math $i +24` $disk
  1621.         done
  1622.         ;;
  1623.     nb[0-7])
  1624.         major=`Major nbd 43` || continue
  1625.         minor=`suffix $arg nb`
  1626.         makedev nb$minor b $major $minor $disk
  1627.         ;;
  1628.     loop)
  1629.         for part in 0 1 2 3 4 5 6 7
  1630.         do
  1631.             makedev loop$part b 7 $part $disk
  1632.         done
  1633.         ;;
  1634.     loop[0-9]|loop[1-9][0-9]|loop1[0-9][0-9]|loop2[0-4][0-9]|loop25[0-5])
  1635.         minor=`suffix $arg loop`
  1636.         makedev loop$minor b 7 $minor $disk
  1637.         ;;
  1638.     md)
  1639.         major=`Major md 9` || continue
  1640.         for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
  1641.             16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  1642.         do
  1643.             makedev md$part b $major $part $disk
  1644.         done
  1645.         ;;
  1646.     st[0-7])
  1647.         major=`Major st 9`
  1648.         unit=`suffix $arg st`
  1649.         makedev st${unit}   c $major $unit $tape
  1650.         makedev nst${unit}  c $major `math 128 + $unit` $tape
  1651.  
  1652.         makedev st${unit}l  c $major `math 32 + $unit` $tape
  1653.         makedev nst${unit}l c $major `math 160 + $unit` $tape
  1654.  
  1655.         makedev st${unit}m  c $major `math 64 + $unit` $tape
  1656.         makedev nst${unit}m c $major `math 192 + $unit` $tape
  1657.  
  1658.         makedev st${unit}a  c $major `math 96 + $unit` $tape
  1659.         makedev nst${unit}a c $major `math 224 + $unit` $tape
  1660.         ;;
  1661.     qic)
  1662.         major=`Major tpqic02 12`
  1663.         makedev ntpqic11   c $major   2 $tape
  1664.         makedev tpqic11    c $major   3 $tape
  1665.         makedev ntpqic24   c $major   4 $tape
  1666.         makedev tpqic24    c $major   5 $tape
  1667.         makedev ntpqic120  c $major   6 $tape
  1668.         makedev tpqic120   c $major   7 $tape
  1669.         makedev ntpqic150  c $major   8 $tape
  1670.         makedev tpqic150   c $major   9 $tape
  1671.         makedev rmt8       c $major   6 $tape
  1672.         makedev rmt16      c $major   8 $tape
  1673.         makedev tape-d     c $major 136 $tape
  1674.         makedev tape-reset c $major 255 $tape
  1675.         $0 $opts qft
  1676.         ;;
  1677.     ftape)
  1678.         major=`Major qft 27` || continue
  1679.         for unit in 0 1 2 3
  1680.         do
  1681.             makedev qft$unit     c $major $unit $tape
  1682.             makedev nqft$unit    c $major `math $unit + 4` $tape
  1683.             makedev zqft$unit    c $major `math $unit + 16` $tape
  1684.             makedev nzqft$unit   c $major `math $unit + 20` $tape
  1685.             makedev rawqft$unit  c $major `math $unit + 32` $tape
  1686.             makedev nrawqft$unit c $major `math $unit + 36` $tape
  1687.         done
  1688.         symlink ftape qft0
  1689.         symlink nftape nqft0
  1690.         ;;
  1691.     sr|scd|scd-all)
  1692.         major=`Major sr 11` || continue
  1693.         for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  1694.         do
  1695.             makedev scd$unit b $major $unit $cdrom
  1696.             symlink sr$unit scd$unit
  1697.         done
  1698.         ;;
  1699.     pktcdvd)
  1700.         echo "pktcdvd major number is now dynamic, taking no action"
  1701.     #    major=97
  1702.     #    for unit in 0 1 2 3
  1703.     #    do
  1704.     #        makedev pktcdvd$unit b $major $unit $cdrom
  1705.     #    done
  1706.         ;;
  1707.     cfs0)
  1708.         makedev cfs0 c 67 0 $coda
  1709.         ;;
  1710.     scd[0-9]|scd[0-1][0-9])
  1711.         major=`Major sr 11` || continue
  1712.         unit=`suffix $arg scd`
  1713.         makedev scd$unit b $major $unit $cdrom
  1714.         symlink sr$unit scd$unit 
  1715.         ;;
  1716.     ttyI[0-9]|ttyI[1-5][0-9]|ttyI[6][0-3])
  1717.         major=43
  1718.         unit=`suffix $arg ttyI`
  1719.         makedev ttyI$unit c $major $unit $dialout
  1720.         ;;
  1721.     ppp)
  1722.         major=108
  1723.         makedev ppp c $major 0 $dip
  1724.         ;;
  1725.     ippp[0-9]|ippp[1-5][0-9]|ippp[6][0-3])
  1726.         major=45
  1727.         unit=`suffix $arg ippp`
  1728.         minor=`math $unit + 128`
  1729.         makedev ippp$unit c $major $minor $dialout
  1730.         ;;
  1731.     isdn[0-9]|isdn[1-5][0-9]|isdn[6][0-3])
  1732.         major=45
  1733.         unit=`suffix $arg isdn`
  1734.         minor=`math $unit + 0`
  1735.         makedev isdn$unit c $major $minor $dialout
  1736.         ;;
  1737.     isdnctrl[0-9]|isdnctrl[1-5][0-9]|isdnctrl[6][0-3])
  1738.         major=45
  1739.         unit=`suffix $arg isdnctrl`
  1740.         minor=`math $unit + 64`
  1741.         makedev isdnctrl$unit c $major $minor $dialout
  1742.         ;;
  1743.     isdninfo)
  1744.         makedev isdninfo c 45 255 $private
  1745.         ;;
  1746.     isdn-tty)
  1747.         major=43
  1748.         for unit in 0 1 2 3 4 5 6 7
  1749.         do
  1750.             makedev ttyI$unit c $major $unit $dialout
  1751.         done
  1752.         ;;
  1753.     isdn-ippp)
  1754.         major=45
  1755.         for unit in 0 1 2 3 4 5 6 7
  1756.         do
  1757.             makedev ippp$unit c $major `math $unit + 128` $dialout
  1758.         done
  1759.         ;;
  1760.     isdn-io)
  1761.         for unit in 0 1 2 3 4 5 6 7
  1762.         do
  1763.             makedev isdn$unit c 45 $unit $dialout
  1764.             makedev isdnctrl$unit c 45 `math $unit + 64` $dialout
  1765.             makedev ippp$unit c 45 `math $unit + 128` $dialout
  1766.         done
  1767.         makedev isdninfo c 45 255 $dialout
  1768.         ;;
  1769.     sonycd)
  1770.         major=`Major sonycd 15` || continue
  1771.         makedev $arg b $major 0 $cdrom
  1772.         ;;
  1773.     mcd)
  1774.         major=`Major mcd 23` || continue
  1775.         makedev $arg b $major 0 $cdrom
  1776.         ;;
  1777.     mcdx|mcdx[0-4])
  1778.         major=`Major $arg 20` || continue
  1779.         for unit in 0 1 2 3 4
  1780.         do
  1781.             makedev mcdx$unit b $major $unit $cdrom
  1782.         done
  1783.         test -r mcdx || symlink mcdx mcdx0
  1784.         ;;
  1785.     cdu535)
  1786.         makedev $arg b 24 0 $cdrom
  1787.         ;;
  1788.     lmscd)
  1789.         makedev $arg b 24 0 $cdrom
  1790.         ;;
  1791.     sbpcd|sbpcd[123])
  1792.         major=`Major $arg 25` || continue
  1793.         base=`suffix ${arg}0 sbpcd`
  1794.         for minor in 0 1 2 3
  1795.         do
  1796.             # XXX
  1797.             unit=$(substr 0123456789abcdef $(( $base * 4 + $minor + 1 )) )
  1798.             makedev sbpcd$unit b $major $minor $cdrom
  1799.         done
  1800.         [ $arg = sbpcd ] && symlink $arg ${arg}0
  1801.         ;;
  1802.     aztcd)
  1803.         major=`Major $arg 29` || continue
  1804.         makedev ${arg}0 b $major 0 $cdrom
  1805.         ;;
  1806.     cm206cd)
  1807.         major=`Major $arg 30` || continue
  1808.         makedev ${arg}0 b $major 0 $cdrom
  1809.         ;;
  1810.     gscd)
  1811.         major=`Major $arg 16` || continue
  1812.         makedev ${arg}0 b $major 0 $cdrom
  1813.         ;;
  1814.     pcd)
  1815.         for unit in 0 1 2 3 
  1816.         do
  1817.             makedev pcd$unit b 46 $unit $cdrom
  1818.         done
  1819.         ;;
  1820.     bpcd)
  1821.         makedev $arg b 41 0 $cdrom
  1822.         ;;
  1823.     optcd)
  1824.         makedev $arg b 17 0 $cdrom
  1825.         ;;
  1826.     sjcd)
  1827.         makedev $arg b 18 0 $cdrom
  1828.         ;;
  1829.     cfs|coda)
  1830.         makedev cfs0 c 67 0 $private
  1831.         ;;
  1832.     xfs|nnpfs|arla)
  1833.         makedev xfs0 c 103 0 $private
  1834.         makedev nnpfs0 c 103 0 $private
  1835.         ;;
  1836.     logiscan)
  1837.         major=`Major logiscan` || continue
  1838.         makedev $arg c $major 0 $scanner
  1839.         ;;
  1840.     toshiba)
  1841.         major=`Major $arg 10` || continue
  1842.         makedev $arg c $major 181 root root 0666
  1843.         ;;
  1844.     m105scan)
  1845.         major=`Major m105` || continue
  1846.         makedev $arg c $major 0 $scanner
  1847.         ;;
  1848.     ac4096)
  1849.         major=`Major ac4096` || continue
  1850.         makedev $arg c $major 0 $scanner
  1851.         ;;
  1852.     audio)
  1853.         major=`Major sound 14`
  1854.         makedev mixer      c $major  0 $audio
  1855.         makedev mixer1     c $major 16 $audio
  1856.         makedev mixer2     c $major 32 $audio
  1857.         makedev mixer3     c $major 48 $audio
  1858.         makedev sequencer  c $major  1 $audio
  1859.         makedev midi00     c $major  2 $audio
  1860.         makedev midi01     c $major 18 $audio
  1861.         makedev midi02     c $major 34 $audio
  1862.         makedev midi03     c $major 50 $audio
  1863.         makedev dsp        c $major  3 $audio
  1864.         makedev dsp1       c $major 19 $audio
  1865.         makedev dsp2       c $major 35 $audio
  1866.         makedev dsp3       c $major 51 $audio
  1867.         makedev audio      c $major  4 $audio
  1868.         makedev audio1     c $major 20 $audio
  1869.         makedev audio2     c $major 36 $audio
  1870.         makedev audio3     c $major 52 $audio
  1871.         makedev sndstat    c $major  6 $audio
  1872.         makedev audioctl   c $major  7 $audio
  1873.         major=31
  1874.         makedev mpu401data c $major 0  $audio
  1875.         makedev mpu401stat c $major 1  $audio
  1876.         major=35
  1877.         for i in 0 1 2 3
  1878.         do
  1879.             makedev midi$i  c $major $i $audio
  1880.             makedev rmidi$i c $major `math $i + 64` $audio
  1881.             makedev smpte$i c $major `math $i + 128` $audio
  1882.         done
  1883.         ;;
  1884.     pcaudio)
  1885.         major=`Major pcsp 13` || continue
  1886.         makedev pcmixer c $major 0 $audio
  1887.         makedev pcsp    c $major 3 $audio
  1888.         makedev pcaudio c $major 4 $audio
  1889.         ;;
  1890.     video|video4linux|v4l|radio)
  1891.         # video4linux api includes radio, teletext, etc.
  1892.         major=`Major video 81` || continue
  1893.         minor=0
  1894.         until [ $minor -gt 63 ]
  1895.         do
  1896.             makedev video$minor c $major $minor $video
  1897.             makedev radio$minor c $major `math $minor + 64` $video
  1898.             minor=`math $minor + 1`
  1899.         done
  1900.         symlink radio radio0
  1901.         minor=0
  1902.         until [ $minor -gt 31 ]
  1903.         do
  1904.             makedev vtx$minor c $major `math $minor + 192` $video
  1905.             makedev vbi$minor c $major `math $minor + 224` $video
  1906.             minor=`math $minor + 1`
  1907.         done
  1908.         symlink video video0
  1909.         symlink vbi vbi0
  1910.         major=82
  1911.         minor=0
  1912.         until [ $minor -gt 1 ]
  1913.         do
  1914.             makedev winradio$minor c $major $minor $video
  1915.             minor=`math $minor + 1`
  1916.         done
  1917.         major=83
  1918.         makedev vtx     c $major 0 $video
  1919.         makedev vttuner c $major 16 $video
  1920.         ;;
  1921.     i2c)
  1922.         # making it possible to create an arbitrary number of i2c
  1923.         # devices might be good, but 8 should suffice for now
  1924.         major=`Major i2c 89` || continue
  1925.         minor=0
  1926.         until [ $minor -gt 7 ] 
  1927.         do
  1928.             makedev i2c-$minor c $major $minor $private
  1929.             minor=`math $minor + 1`
  1930.         done
  1931.         ;;
  1932.     tlk)
  1933.         major=102
  1934.         minor=0
  1935.         until [ $minor -gt 3 ] # tell me if 3 is wrong...
  1936.         do
  1937.             makedev tlk$minor c $major $minor $video
  1938.             minor=`math $minor + 1`
  1939.         done
  1940.         ;;
  1941.     srnd)
  1942.         makedev srnd0 c 110 0 $video
  1943.         makedev srnd1 c 110 1 $video
  1944.         ;;
  1945.     fgrab)
  1946.         makedev mmetfgrab c 40 0 $video
  1947.         makedev wvisfgrab c 26 0 $video
  1948.         for i in 0 1 # more?
  1949.         do
  1950.             makedev iscc$i    c 93 $i $video
  1951.             makedev isccctl$i c 93 `math $i + 128` $video
  1952.         done
  1953.         for i in 0 1 # more?
  1954.         do
  1955.             makedev dcxx$i c 94 $i $video
  1956.         done
  1957.         ;;
  1958.     sg|sg-all)
  1959.         major=`Major sg 21`
  1960.         for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  1961.         do
  1962.             makedev sg$unit c $major $unit $scsi
  1963.         done
  1964.         ;;
  1965.     pg)
  1966.         major=`Major pg 97`
  1967.         for unit in 0 1 2 3
  1968.         do
  1969.             makedev pg$unit c $major $unit $scsi
  1970.         done
  1971.         ;;
  1972.     fd)
  1973.         # not really devices, we use the /proc filesystem
  1974.         symlink fd     $procfs/self/fd
  1975.         symlink stdin  fd/0
  1976.         symlink stdout fd/1
  1977.         symlink stderr fd/2
  1978.         ;;
  1979.     ibcs2)
  1980.         major=`Major ibcs2 30` || continue
  1981.         makedev socksys c $major 0 $ibcs2
  1982.         symlink nfsd socksys
  1983.         makedev spx     c $major 1 $ibcs2
  1984.         symlink X0R null
  1985.         ;;
  1986.     netlink)
  1987.         major=36
  1988.         makedev route c $major 0 $private
  1989.         makedev skip  c $major 1 $private
  1990.         ;;
  1991.     enskip)
  1992.         major=64
  1993.         makedev enskip c $major 0 $private
  1994.         ;;
  1995.     ipfilt*)
  1996.         major=95
  1997.         makedev ipl     c $major 0 $private
  1998.         makedev ipnat   c $major 1 $private
  1999.         makedev ipstate c $major 2 $private
  2000.         makedev ipauth  c $major 3 $private
  2001.         ;;
  2002.     qng)
  2003.         makedev qng c 77 0 $private
  2004.         ;;
  2005.     apm)
  2006.         major=`Major mouse 10` || continue
  2007.         makedev apm_bios  c $major 134 $mouse
  2008.         ;;
  2009.     dcf)
  2010.         major=`Major dcf` || continue
  2011.         makedev $arg c $major 0 $system
  2012.         ;;
  2013.     helloworld)
  2014.         major=`Major hw` || continue
  2015.         makedev helloworld c $major 0 $public
  2016.         ;;
  2017.     ipsec)
  2018.         # For the Free S/WAN (http://www.xs4all.nl/~freeswan/)
  2019.         # implementation of IPSEC
  2020.         makedev ipsec c 36 10 $ipsec
  2021.         ;;
  2022.     comedi)
  2023.         major=98
  2024.         for minor in 0 1 2 3
  2025.         do
  2026.             makedev comedi$minor c $major $minor $public
  2027.         done
  2028.         ;;
  2029.     tilp)
  2030.         for i in `seq 0 7`
  2031.         do
  2032.             makedev tipar$i c 115 $i $printer
  2033.             makedev tiser$i c 115 `math 8 + $i` $dialout
  2034.         done
  2035.         for i in `seq 0 31`
  2036.         do
  2037.             makedev tiusb$i c 115 `math 16 + $i` $dialout
  2038.         done
  2039.         ;;
  2040.     dvb)
  2041.         # check if kernel-version is >= 2.6.8, if yes, create dvb-devices with
  2042.         # major-number 212, in the other case 250
  2043.         
  2044.         kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
  2045.         kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
  2046.         kern_rev3=`uname -r | sed -e 's@^[^.]*\.[^.]*\.\([^.][0-9]*\).*@\1@'`
  2047.       
  2048.         dvb_major=250
  2049.  
  2050.         if [ $kern_rev1 -gt 2 ] || ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -gt 6 ]) \
  2051.             || ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -eq 6 ] && [ $kern_rev3 -ge 8 ])
  2052.         then 
  2053.             dvb_major=212 
  2054.         fi
  2055.  
  2056.         mkdir -p dvb
  2057.         for i in 0 1 2 3
  2058.         do
  2059.             mkdir -p dvb/adapter$i
  2060.             makedev dvb/adapter$i/video0    c $dvb_major `math 64 \* $i + 0` $video
  2061.             makedev dvb/adapter$i/audio0    c $dvb_major `math 64 \* $i + 1` $video
  2062.             makedev dvb/adapter$i/frontend0 c $dvb_major `math 64 \* $i + 3` $video
  2063.             makedev dvb/adapter$i/demux0    c $dvb_major `math 64 \* $i + 4` $video
  2064.             makedev dvb/adapter$i/dvr0      c $dvb_major `math 64 \* $i + 5` $video
  2065.             makedev dvb/adapter$i/ca0       c $dvb_major `math 64 \* $i + 6` $video
  2066.             makedev dvb/adapter$i/net0      c $dvb_major `math 64 \* $i + 7` $video
  2067.             makedev dvb/adapter$i/osd0      c $dvb_major `math 64 \* $i + 8` $video
  2068.         done
  2069.         ;;
  2070.     usb)
  2071.         mkdir -p usb
  2072.         major=180
  2073.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  2074.         do
  2075.             makedev usb/lp$i c $major $i $printer
  2076.             makedev usb/mouse$i c $major `math $i + 16` $mouse
  2077.             makedev usb/ez$i c $major `math $i + 32` $system
  2078.             makedev usb/scanner$i c $major `math $i + 48` $scanner
  2079.             makedev usb/hiddev$i c $major `math $i + 96` $system
  2080.             makedev ttyACM$i c 166 $i $dialout
  2081.             makedev ttyUSB$i c 188 $i $dialout
  2082.         done
  2083.         makedev usb/rio500 c $major 64 $audio
  2084.         makedev usb/usblcd c $major 65 $audio
  2085.         makedev usb/cpad0 c $major 66 $audio
  2086.         ;;
  2087.     bluetooth)
  2088.         major=216
  2089.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
  2090.             16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  2091.         do
  2092.             makedev rfcomm$i c $major $i $dialout
  2093.         done
  2094.         makedev vhci c 10 250 $dialout
  2095.         for i in 0 1 2 3; do
  2096.             makedev ttyUB$i c 216 $i $dialout
  2097.             makedev ccub$i c 217 $i $dialout
  2098.         done
  2099.         ;;
  2100.     paride)
  2101.                 major=45
  2102.                 for unit in a b c d
  2103.         do
  2104.                     base=`index abcd $unit`
  2105.                     base=`math $base \* 16`
  2106.                     makedev pd$unit b $major $base $disk
  2107.                     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  2108.                     do
  2109.             makedev pd$unit$part b $major $(( $base + $part )) $disk
  2110.                     done
  2111.         done
  2112.         for i in 0 1 2 3
  2113.         do
  2114.             makedev pcd$i b 46 $i $cdrom
  2115.             makedev pf$i  b 47 $i $floppy
  2116.         done
  2117.                 ;;
  2118.         lirc)
  2119.                 makedev lirc c 61 0 $lirc
  2120.                 for i in d m; do
  2121.                    makefifo lirc${i} $lirc
  2122.                 done
  2123.                 ;;
  2124.     update)
  2125.         devices=
  2126.         if [ ! -f $procfs/devices ]
  2127.         then
  2128.             echo "$0: warning: can't read $procfs/devices" >&2
  2129.         else
  2130.             exec 3<$procfs/devices
  2131.             while read major device extra <&3
  2132.             do
  2133.                 device=`echo $device | sed 's#/.*##'`
  2134.                 case "$major" in
  2135.                     Character|Block|'')
  2136.                         ;;
  2137.                     *)
  2138.                         eval "major_$device=$major"
  2139.                         devices="$devices $device"
  2140.                         ;;
  2141.                 esac
  2142.             done
  2143.             exec 3<&-
  2144.         fi
  2145.  
  2146.         if [ ! "$devices" ]
  2147.         then
  2148.             echo "$0: don't appear to have any devices" >&2
  2149.             continue
  2150.         fi
  2151.         if [ "$opt_d" ]
  2152.         then
  2153.             echo "$0: can't delete an update" >&2
  2154.             continue
  2155.         fi
  2156.         create=
  2157.         delete=
  2158.         devs="$devices"
  2159.         if [ -f DEVICES ]
  2160.         then
  2161.             exec 3<DEVICES
  2162.             while read device major <&3
  2163.             do
  2164.                 eval now=\$major_$device
  2165.                 if [ "$now" = "" ]
  2166.                 then
  2167.                     delete="$delete `cvt $device`"
  2168.                     continue
  2169.                 elif [ "$now" != $major ]
  2170.                 then
  2171.                     create="$create "`cvt $device`
  2172.                 fi
  2173.                 devs=`strip " $devs " $device`
  2174.             done
  2175.             exec 3<&-
  2176.         fi
  2177.         create="$create "`cvt $devs`
  2178.         [ "$delete" != "" ] && $0 $opts -d $delete
  2179.         [ "$create" != " " ] && $0 $opts $create
  2180.         [ "$opt_n" ] && continue
  2181.         for device in $devices
  2182.         do
  2183.             if [ "`cvt $device`" ]
  2184.             then
  2185.                 eval echo $device \$major_$device
  2186.             fi
  2187.         done > DEVICES
  2188.         ;;
  2189.     *)
  2190.         echo "$0: don't know how to make device \"$arg\"" >&2
  2191.         exit 1
  2192.         ;;
  2193.     esac
  2194. done
  2195.  
  2196. exit 0
  2197.