#! /bin/sh - # $Id: MAKEDEV,v 1.3 1994/01/04 10:27:24 alfie Exp alfie $ # # This is my attempt at a MAKEDEV script. IMHO it cleans up many areas. # It can be used to determine the necessary info for a device without # actually creating it using the '-n' flag. # # It is based (heavily) on Jim Winstead's version and my main source of # information has been Rick Miller's Linux device list. # # It makes less individual devices and tends to make classes of devices # (eg "MAKEDEV hda" will create "hda" and the 8 partitions; "MAKEDEV ptyp" # will create the ptyp[0-f] master and ttyp[0-f] slave devices). # # The group used for the devices are changeable at the head of the script, # so you can edit these to match the groups on your system, or your whims. # # If you are aware of any glaring omissions or errors, please let me know. # # Thanks to Ian Jackson for help and encouragement. # # Nick Holloway # Last changed: 4th January 1994 # #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# # Device 'make' file. Valid arguments: # # generic create a generic subset of devices # local configuration specific devices (runs MAKEDEV.local) # std standard devices # Virtual Terminals: # console (also known as tty0) # tty{0..63} virtual consoles # Serial devices: # ttyS{0..63} serial ports and corresponding dialout device # Pseudo Terminals: # pty[p-s] banks of of master and slave pseudo terminals # Parallel ports: # par[0-3] parallel ports # lp[0-3] "" "" # Bus Mice: # busmice various bus mice # Joystick: # js joystick # Disks: # fd[0-4] floppy disks # hd[a-d] AT hard disks (1st controller) # hd1[a-d] 2nd AT controller hard disks # xd[a-d] XT hard disks # sd[a-i] SCSI hard disks # loop Loopback disk devices # Tapes: # st[0-1] SCSI tapes # qic QIC-80 tapes # ftape floppy driver tapes (QIC-117) # CD: # scd[0-1] SCSI CD players # sonycd Sony CDU-31A CD player # mcd Mitsumi CD player # cdu535 Sony CDU-535 CD player # lmscd LMS/Philips CD player (needs new major number) # sbpcd Sound Blaster CD player # Networking: # net various protocol control devices (?) # we[0-3],wd[0-3],ec[0-3],ne[0-3] # various net interfaces (?) # Audio: # audio various audio devices # pcaudio audio devices used by pcsndrv # Misc: # sg generic SCSI devices # fd file names for file descriptors # #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# # Define what group a collection of devices will be created with -- you will # probably need to edit the right hand side to to match your groups. system=sys kmem=kmem tty=tty dialout=uucp mouse=sys printer=daemon floppy=floppy disk=disk cdrom=disk tape=disk net=sys audio=sys #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# makedev () { # usage: makedev name [bcu] major minor owner:group mode rm -f $1 mknod $1 $2 $3 $4 && chown $5 $1 && chmod $6 $1 } symlink () { # usage: symlink name target rm -f $1 ln -s $2 $1 } debug= if [ _"-n" = _"$1" ] then shift debug=-n makedev () { echo "$1 = $2 $3 $4 $5 $6" } symlink () { echo "$1 -> $2" } fi for arg do case $arg in generic) sh $0 $debug std sh $0 $debug fd0 fd1 sh $0 $debug hda hdb sh $0 $debug xda xdb sh $0 $debug sda sdb sh $0 $debug ptyp ptyq ptyr ptys sh $0 $debug console tty1 tty2 tty3 tty4 tty5 tty6 tty7 tty8 sh $0 $debug ttyS0 ttyS1 ttyS2 ttyS3 sh $0 $debug busmice sh $0 $debug lp0 lp1 lp2 sh $0 $debug par0 par1 par2 ;; local) sh $0.local $debug ;; std) makedev mem c 1 1 root:$kmem 660 makedev kmem c 1 2 root:$kmem 660 makedev null c 1 3 root:$system 666 makedev port c 1 4 root:$kmem 660 makedev zero c 1 5 root:$system 666 # makedev core c 1 6 root:$kmem 660 makedev full c 1 7 root:$system 666 makedev ram b 1 1 root:$disk 660 makedev tty c 5 0 root:$tty 666 ;; console) makedev console c 4 0 root:$tty 622 ;; tty[0-9]|tty[1-5][0-9]|tty[6][0-3]) line=`expr $arg : "tty\(.*\)"` makedev tty$line c 4 $line root:$tty 622 ;; ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3]) line=`expr $arg : "ttyS\(.*\)"` minor=`expr 64 + $line` makedev ttyS$line c 4 $minor root:$tty 666 makedev cua$line c 5 $minor root:$dialout 660 ;; pty[p-s]) # Currently limited to 64 master/slave pairs. bank=`expr $arg : "pty\(.\)"` base=`expr \( pqrs : ".*$bank" - 1 \) \* 16` for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f do j=`expr 0123456789abcdef : ".*$i" - 1` makedev pty$bank$i c 4 `expr 128 + $base + $j` root:$tty 666 makedev tty$bank$i c 4 `expr 192 + $base + $j` root:$tty 666 done ;; par[0-2]) port=`expr $arg : "par\(.\)"` makedev $arg c 6 $port root:$printer 660 ;; lp[0-2]) port=`expr $arg : "lp\(.\)"` makedev $arg c 6 $port root:$printer 660 ;; busmice) makedev logibm c 10 0 root:$mouse 666 makedev psaux c 10 1 root:$mouse 666 makedev inportbm c 10 2 root:$mouse 666 makedev atibm c 10 3 root:$mouse 666 ;; js) makedev js0 c 15 0 root:$mouse 666 makedev js1 c 15 1 root:$mouse 666 ;; fd[0-4]) unit=`expr $arg : "fd\(.\)"` makedev fd$unit b 2 $unit root:$floppy 660 makedev fd${unit}d360 b 2 `expr $unit + 4` root:$floppy 660 makedev fd${unit}h1200 b 2 `expr $unit + 8` root:$floppy 660 makedev fd${unit}D360 b 2 `expr $unit + 12` root:$floppy 660 makedev fd${unit}H360 b 2 `expr $unit + 12` root:$floppy 660 makedev fd${unit}D720 b 2 `expr $unit + 16` root:$floppy 660 makedev fd${unit}H720 b 2 `expr $unit + 16` root:$floppy 660 makedev fd${unit}h360 b 2 `expr $unit + 20` root:$floppy 660 makedev fd${unit}h720 b 2 `expr $unit + 24` root:$floppy 660 makedev fd${unit}H1440 b 2 `expr $unit + 28` root:$floppy 660 ;; hd[a-d]) unit=`expr $arg : "hd\(.\)"` base=`expr \( abcd : ".*$unit" - 1 \) \* 64` makedev hd$unit b 3 $base root:$disk 660 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 do makedev hd$unit$part b 3 `expr $base + $part` root:$disk 660 done ;; hd1[a-d]) unit=`expr $arg : "hd1\(.\)"` base=`expr \( abcd : ".*$unit" - 1 \) \* 64` makedev hd1$unit b 22 $base root:$disk 660 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 do makedev hd1$unit$part b 22 `expr $base + $part` root:$disk 660 done ;; xd[a-d]) unit=`expr $arg : "xd\(.\)"` base=`expr \( abcd : ".*$unit" - 1 \) \* 64` makedev xd$unit b 13 $base root:$disk 660 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 do makedev xd$unit$part b 13 `expr $base + $part` root:$disk 660 done ;; sd[a-h]) unit=`expr $arg : "sd\(.\)"` base=`expr \( abcdefgh : ".*$unit" - 1 \) \* 16` makedev sd$unit b 8 $base root:$disk 660 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do makedev sd$unit$part b 8 `expr $base + $part` root:$disk 660 done ;; loop) for part in 0 1 2 3 4 5 6 7 do makedev loop$part b 12 $part root:$disk 660 done ;; st[0-1]) unit=`expr $arg : "st\(.\)"` makedev st$unit c 9 $unit root:$tape 660 makedev nst$unit c 9 `expr 128 + $unit` root:$tape 660 ;; qic) makedev rmt8 c 12 6 root:$tape 660 makedev rmt16 c 12 8 root:$tape 660 makedev tape-d c 12 136 root:$tape 660 makedev tape-reset c 12 255 root:$tape 660 ;; ftape) makedev ftape c 27 0 root:$tape 660 makedev nftape c 27 4 root:$tape 660 ;; scd[0-1]) unit=`expr $arg : "scd\(.\)"` makedev scd$unit b 11 $unit root:$cdrom 660 ;; sonycd) makedev $arg b 15 0 root:$cdrom 660 ;; mcd) makedev $arg b 23 0 root:$cdrom 660 ;; cdu535) makedev $arg b 24 0 root:$cdrom 660 ;; # lmscd) # makedev $arg b 24 0 root:$cdrom 660 # ;; sbpcd) makedev $arg b 25 0 root:$cdrom 660 ;; net) makedev socket c 16 0 root:$net 600 makedev arp c 16 1 root:$net 600 makedev unix c 17 0 root:$net 600 makedev inet c 18 0 root:$net 600 makedev ip c 18 1 root:$net 600 makedev icmp c 18 2 root:$net 600 makedev tcp c 18 3 root:$net 600 makedev udp c 18 4 root:$net 600 ;; we[0-3]) card=`expr $arg : "we\(.\)"` makedev $arg c 19 $card root:$net 600 ;; wd[0-3]) card=`expr $arg : "wd\(.\)"` makedev $arg c 20 $card root:$net 600 ;; ec[0-3]) card=`expr $arg : "ec\(.\)"` makedev $arg c 20 `expr 8 + $card` root:$net 600 ;; ne[0-3]) card=`expr $arg : "ne\(.\)"` makedev $arg c 20 `expr 16 + $card` root:$net 600 ;; audio) makedev mixer c 14 0 root:$audio 666 makedev sequencer c 14 1 root:$audio 666 makedev midi c 14 2 root:$audio 666 makedev dsp c 14 3 root:$audio 666 makedev audio c 14 4 root:$audio 666 makedev sndstat c 14 6 root:$audio 666 # makedev dsp1 c 14 19 root:$audio 666 # makedev audio1 c 14 20 root:$audio 666 ;; pcaudio) makedev pcmixer c 30 0 root:$audio 666 makedev pcsp c 30 3 root:$audio 666 makedev pcaudio c 30 4 root:$audio 666 ;; sg) for unit in a b c d e f g h do minor=`expr abcdefgh : ".*$unit" - 1` makedev $arg$unit c 21 $minor root:$system 660 done ;; fd) # not really devices, we use the /proc filesystem symlink fd /proc/self/fd symlink stdin fd/0 symlink stdout fd/1 symlink stderr fd/2 ;; *) echo "don't know how to make device \"$arg\"" >&2 ;; esac done exit 0