Magellan Linux

Annotation of /trunk/mkinitrd/lib/MAKEDEV.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 399 - (hide annotations) (download) (as text)
Fri Nov 24 17:26:45 2006 UTC (17 years, 5 months ago) by niro
File MIME type: application/x-sh
File size: 33114 byte(s)
MAKEDEV-1.7 new file, creates a static /dev

1 niro 399 #!/bin/bash
2    
3     MAKEDEV_VERSION=1.7
4    
5     # This script is originally taken from Slackware 7.1 and modified for
6     # the Linux From Scratch Project (http://www.linuxfromscratch.org/) by
7     # Marc Heerdink <marc_heerdink@softhome.net>
8     #
9     # Versions 1.1 onwards modified for LFS by Mark Hymers
10     # <markh@linuxfromscratch.org>
11    
12     #
13     # Changelog
14     #
15    
16     # Version 1.1
17     # -- Modified script so sg devices were created properly. They were
18     # being created as block devices instead of the proper character
19     # ones.
20    
21     # Version 1.2
22     # -- Added new generic-nopty option for those using /dev/pts to
23     # avoid creating pty[p-za-e][0-9a-f] and tty[p-za-e][0-9a-f]
24     # -- Changed generic option to create hda-hdh instead of just
25     # hda-hdd
26     # -- Changed MAXVT to only create 32 VTs by default instead of 63
27    
28     # Version 1.3
29     # -- Changed creation of framebuffer devices (fb0-fb7) to 29,[0-7]
30     # instead of the old 0,32,etc. sequence. Support for the old
31     # sequence will be removed in the 2.5 series.
32     # -- Fixed typo in smpte* device creation (they were being created
33     # as smtpe instead of smpte...)
34    
35     # Version 1.4
36     # -- Applied Matthias Benkmann's new patch to allow MAKEDEV to be used
37     # even when glibc isn't installed by manually resolving
38     # user and group names to ids if chown name.group doesn't work.
39    
40     # Version 1.5
41     # -- Changed the symlink /dev/ram --> /dev/ram1 to /dev/ram --> /dev/ram0
42    
43     # Version 1.6
44     # -- Removed the "update" target as we don't use it and it means
45     # that MAKEDEV doesn't need proc mounted to work.
46     # -- Make the -V option work properly
47     # -- Add long (GNU-style) options and add the -h|--help option.
48     # -- When we fallback to parsing /etc/{passwd,group}, make sure the
49     # files actually exist first!
50     # -- Change !#/bin/sh to #!/bin/bash as it doesn't run on all shells which
51     # may be installed as /bin/sh
52    
53     # Version 1.7
54     # -- Give vcs a fallback major number (7) as the /proc processing code
55     # has been removed.
56    
57    
58     # Kernel version 2.4.9 (2.4.x series)
59    
60     # These are the device classes. Each device falls in it's own class. The
61     # parameters to the chmod and chown commands for a specific class are
62     # defined here. The permissions will be changed immediately after the
63     # device is created.
64    
65     public="root root 0666"
66     private="root root 0600"
67     system="root sys 0660"
68     kmem="root kmem 0640"
69     tty="root tty 0666"
70     cons="root tty 0622"
71     vcs="root root 0600"
72     dialout="root dialout 0660"
73     mouse="root root 0660"
74     printer="root lp 0660"
75     floppy="root floppy 0660"
76     disk="root disk 0660"
77     scsi="root disk 0660"
78     cdrom="root disk 0660"
79     tape="root tape 0660"
80     audio="root audio 0660"
81     video="root root 0660"
82     ibcs2="root root 0666"
83     scanner="root root 0666"
84     coda="root root 0600"
85     ipsec="root root 0200"
86     readable="root root 0444"
87    
88     # Maximum number of Virtual Terminals to create.
89     MAXVT=32
90    
91     # Default major numbers.
92     major_ide0=3
93     major_ide1=22
94     major_ide2=33
95     major_ide3=34
96    
97     major_sd=8
98     major_sr=11
99     major_sg=21
100    
101     major_lp=6
102     major_loop=7
103    
104     procfs=/proc
105    
106     opt_v=
107     opt_d=
108     opt_n=
109     opt_H=
110     opt_V=
111    
112     while [ "$#" -ge "1" ]; do
113     case $1 in
114     --) shift; break ;;
115     -v|--verbose) shift; opt_v=1 ;;
116     -d|--delete) shift; opt_d=1 ;;
117     -n|--null) shift; opt_n=1; opt_v=1 ;;
118     -V|--version) shift; opt_V=1 ;;
119     -h|--help) shift; opt_h=1 ;;
120     -*) echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
121     *) break ;;
122     esac
123     done
124    
125     if [ "$opt_V" ]; then
126     echo "MAKEDEV-$MAKEDEV_VERSION"
127     echo
128     echo "Based on the MAKEDEV script from Slackware 7.1"
129     echo "Originally modified for the LinuxFromScratch Project"
130     echo "(http://www.linuxfromscratch.org/)"
131     echo "by Marc Heerdink <marc_heerdink@softhome.net>"
132     echo
133     echo "Maintained for LinuxFromScratch from Version 1.1 onwards"
134     echo "by Mark Hymers <markh@linuxfromscratch.org>"
135     echo
136     echo "Please report all problems to the maintainer"
137     exit 0
138     fi
139    
140     if [ "$opt_h" ]; then
141     echo "Usage: MAKEDEV [OPTION] DEVICE|DEVICE-GROUP"
142     echo "Create device files for use in Linux"
143     echo
144    
145     echo "-d, --delete delete specified devices"
146     echo "-h, --help display this help and exit"
147     echo "-n, --null don't perform the action, just print what would be done"
148     echo "-V, --version display version information and exit"
149     echo "-v, --verbose be more verbose in the output "
150     echo
151    
152     echo "Devices can be specified individually or as a group. Examples:"
153     echo "generic creates most generally required devices"
154     echo "generic-nopty as generic but no pty's created (for use with devpts"
155     echo
156     echo "Please report bugs to the maintainer (see --version option)"
157     exit 0
158     fi
159    
160     opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
161    
162     #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
163    
164     # Test if groups and users are resolved automatically and install functions to
165     # resolve manually if not - By Matthias Benkmann
166    
167     if [ "`id -gn root 2>/dev/null`" != "root" ]; then
168     echo 1>&2 'NOTICE: Resolving user/group names manually using /etc/group and /etc/passwd'
169    
170     if [ -f /etc/passwd ]; then
171     getuser()
172     {
173     line=`grep ^$1: /etc/passwd` || { echo $1 ; return 1 ;}
174     echo "$line" | cut -f 3 -d :
175     }
176     else
177     echo "/etc/passwd does not exist - please create it!"
178     exit 1
179     fi
180    
181     if [ -f /etc/group ]; then
182     getgid()
183     {
184     line=`grep ^$1: /etc/group` || { echo $1 ; return 1 ;}
185     echo "$line" | cut -f 3 -d :
186     }
187     else
188     echo "/etc/group does not exist - please create it!"
189     exit 1
190     fi
191     else
192     getuser() { echo $1 ;}
193     getgid() { echo $1 ;}
194     fi
195    
196     makedev () {
197     if [ "$opt_v" ]; then
198     if [ "$opt_d" ]; then
199     echo "delete $1"
200     else
201     echo "create $1 $2 $3 $4 $5:$6 $7"
202     fi
203     fi
204     if [ ! "$opt_n" ]; then
205     if [ "$opt_d" ]; then
206     rm -f $1
207     else
208     rm -f $1-
209     mknod $1- $2 $3 $4 &&
210     chown `getuser $5`:`getgid $6` $1- &&
211     chmod $7 $1- &&
212     mv $1- $1
213     fi
214     fi
215     }
216    
217     symlink () {
218     if [ "$opt_v" ]; then
219     if [ "$opt_d" ]; then
220     echo "delete $1"
221     else
222     echo "create $1 -> $2"
223     fi
224     fi
225     [ ! "$opt_n" ] && rm -f $1 &&
226     [ ! "$opt_d" ] && ln -s $2 $1
227     }
228    
229     math () {
230     eval echo "\$(($*))"
231     }
232    
233     index () {
234     eval "I=\${1%$2*}"
235     eval echo "\${#I}"
236     }
237    
238     suffix () {
239     eval echo "\${1#$2}"
240     }
241    
242     strip () {
243     eval echo "\${1% $2 *} \${1#* $2 }"
244     }
245    
246     first () {
247     eval echo "\${1:0:1}"
248     }
249    
250     second () {
251     eval echo "\${1:1:1}"
252     }
253    
254     #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
255    
256     Major () {
257     device=$2
258     if [ "$opt_d" ]; then
259     echo -1
260     else
261     eval echo \${major_$1:-\${device:?\"unknown major number for $1\"}}
262     fi
263     }
264    
265     cvt () {
266     while [ "$#" -ne "0" ]; do
267     case "$1" in
268     mem|tty|ttyp|cua|cub) ;;
269     hd) (for d in a b c d e f g h ; do
270     echo -n hd$d " "
271     done) ; echo
272     ;;
273     ide0) echo hda hdb ;;
274     ide1) echo hdc hdd ;;
275     ide2) echo hde hdf ;;
276     ide3) echo hdg hdh ;;
277     sd) echo sda sdb sdc sdd ;;
278     sg) echo sg ;;
279     sr) echo scd0 ;;
280     st) echo st0 ;;
281     xd) echo xda xdb ;;
282     ad) echo ada adb ;;
283     fd) echo fd0 fd1 ;;
284     lp) echo lp ;;
285     mt) echo ftape ;;
286     loop) echo loop ;;
287     md) echo md ;;
288     ibcs2) echo ibcs2 ;;
289     tpqic02) echo qic ;;
290     sound) echo audio ;;
291     logiscan) echo logiscan ;;
292     ac4096) echo ac4096 ;;
293     hw) echo helloworld ;;
294     sbpcd | sbpcd[123]) echo $1 ;;
295     joystick) echo js ;;
296     apm_bios) echo apm ;;
297     dcf) echo dcf ;;
298     aztcd) echo aztcd ;;
299     pcmcia) ;; # taken care of by its own driver
300     ttyC) echo cyclades ;;
301     isdn) echo isdnmodem isdnbri dcbri ;;
302     vcs) ;;
303     pty) echo pty ;;
304     misc) echo misc ;;
305     fb) echo fb ;;
306     netlink) echo netlink ;;
307     hamradio) echo hamradio ;;
308     snd) ;;
309     ptm) ;;
310     pts) ;;
311     ttyS) echo ttyS0 ttyS1 ttyS2 ttyS3 ;;
312     *) echo "$0: don't know what \"$1\" is" >&2 ;;
313     esac
314     shift
315     done
316     }
317    
318     for arg; do
319     case $arg in
320     generic|generic-nopty)
321     $0 $opts std
322     $0 $opts fd
323     if [ $arg = "generic" ]; then $0 $opts pty; fi;
324     if [ $arg = "generic-nopty" ]; then $0 $opts ptmx; fi;
325     $0 $opts console
326     $0 $opts ttyS0 ttyS1 ttyS2 ttyS3
327     $0 $opts lp
328     $0 $opts parport
329     $0 $opts busmice
330     $0 $opts fb
331     $0 $opts ram
332     $0 $opts loop
333     $0 $opts fd0 fd1
334     $0 $opts hda hdb hdc hdd hde hdf hdg hdh
335     $0 $opts sda sdb sdc sdd
336     $0 $opts sg0 sg1 sg2 sg3
337     $0 $opts scd0 scd1 scd2 scd3
338     $0 $opts audio
339     $0 $opts rtc
340     $0 $opts ppp
341     ;;
342     std)
343     makedev mem c 1 1 $kmem
344     makedev kmem c 1 2 $kmem
345     makedev null c 1 3 $public
346     makedev port c 1 4 $kmem
347     makedev zero c 1 5 $public
348     symlink core $procfs/kcore
349     makedev full c 1 7 $public
350     makedev random c 1 8 $readable
351     makedev urandom c 1 9 $readable
352     makedev aio c 1 10 $readable
353     makedev tty c 5 0 $tty
354     ;;
355     ram)
356     for i in 0 1 2 3; do
357     makedev ram$i b 1 $i $disk
358     done
359     ln -sf ram0 ram
360     ;;
361     console)
362     major=`Major vcs 7`
363     makedev tty0 c 4 0 $cons
364     makedev console c 5 1 $cons
365     [ "$major" ] && makedev vcs0 c $major 0 $vcs
366     [ "$major" ] && makedev vcsa c $major 128 $vcs
367    
368     line=1
369     while [ $line -le $MAXVT -a $line -le 63 ]; do
370     makedev tty$line c 4 $line $tty
371     [ "$major" ] && makedev vcs$line c $major $line $vcs
372     [ "$major" ] && makedev vcsa$line c $major `math $line + 128` $vcs
373     line=`math $line + 1`
374     done
375     ;;
376     fd)
377     symlink fd $procfs/self/fd
378     symlink stdin fd/0
379     symlink stdout fd/1
380     symlink stderr fd/2
381     ;;
382     fd[0-7])
383     major=`Major fd 2` || continue
384     base=`suffix $arg fd`
385     if [ $base -ge 4 ]
386     then
387     base=`math $base + 124`
388     fi
389     makedev ${arg} b $major $base $floppy
390     makedev ${arg}d360 b $major `math $base + 4` $floppy
391     makedev ${arg}h1200 b $major `math $base + 8` $floppy
392     makedev ${arg}u360 b $major `math $base + 12` $floppy
393     makedev ${arg}u720 b $major `math $base + 16` $floppy
394     makedev ${arg}h360 b $major `math $base + 20` $floppy
395     makedev ${arg}h720 b $major `math $base + 24` $floppy
396     makedev ${arg}u1440 b $major `math $base + 28` $floppy
397     makedev ${arg}u2880 b $major `math $base + 32` $floppy
398     makedev ${arg}CompaQ b $major `math $base + 36` $floppy
399     makedev ${arg}h1440 b $major `math $base + 40` $floppy
400     makedev ${arg}u1680 b $major `math $base + 44` $floppy
401     makedev ${arg}h410 b $major `math $base + 48` $floppy
402     makedev ${arg}u820 b $major `math $base + 52` $floppy
403     makedev ${arg}h1476 b $major `math $base + 56` $floppy
404     makedev ${arg}u1722 b $major `math $base + 60` $floppy
405     makedev ${arg}h420 b $major `math $base + 64` $floppy
406     makedev ${arg}u830 b $major `math $base + 68` $floppy
407     makedev ${arg}h1494 b $major `math $base + 72` $floppy
408     makedev ${arg}u1743 b $major `math $base + 76` $floppy
409     makedev ${arg}h880 b $major `math $base + 80` $floppy
410     makedev ${arg}u1040 b $major `math $base + 84` $floppy
411     makedev ${arg}u1120 b $major `math $base + 88` $floppy
412     makedev ${arg}h1600 b $major `math $base + 92` $floppy
413     makedev ${arg}u1760 b $major `math $base + 96` $floppy
414     makedev ${arg}u1920 b $major `math $base + 100` $floppy
415     makedev ${arg}u3200 b $major `math $base + 104` $floppy
416     makedev ${arg}u3520 b $major `math $base + 108` $floppy
417     makedev ${arg}u3840 b $major `math $base + 112` $floppy
418     makedev ${arg}u1840 b $major `math $base + 116` $floppy
419     makedev ${arg}u800 b $major `math $base + 120` $floppy
420     makedev ${arg}u1600 b $major `math $base + 124` $floppy
421     ;;
422     hamradio)
423     $0 scc
424     $0 bc
425     ;;
426     scc)
427     for unit in 0 1 2 3 4 5 6 7
428     do
429     makedev scc$unit c 34 $unit $system
430     done
431     ;;
432     bc)
433     for unit in 0 1 2 3
434     do
435     makedev bc$unit c 51 $unit $system
436     done
437     ;;
438     nvram)
439     makedev nvram c 10 144 $kmem
440     ;;
441     tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
442     line=`suffix $arg tty`
443     makedev tty$line c 4 $line $tty
444     ;;
445     ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
446     line=`suffix $arg ttyS`
447     minor=`math 64 + $line`
448     makedev ttyS$line c 4 $minor $dialout
449     ;;
450     pty[a-ep-z])
451     bank=`suffix $arg pty`
452     base=`index pqrstuvwxyzabcde $bank`
453     base=`math $base \* 16`
454     for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
455     do
456     j=`index 0123456789abcdef $i`
457     makedev pty$bank$i c 2 `math $base + $j` $tty
458     makedev tty$bank$i c 3 `math $base + $j` $tty
459     done
460     ;;
461     pty)
462     ptysufs=""
463     for i in p q r s t u v w x y z a b c d e
464     do
465     ptysufs="$ptysufs pty$i"
466     done
467     $0 $opts $ptysufs ptmx
468     ;;
469     ptmx)
470     # master pty multiplexer for 2.1 kernels
471     makedev ptmx c 5 2 $tty
472     ;;
473     cyclades|ttyC)
474     major1=`Major ttyC 19` || continue
475     #major2=`Major cub 20` || continue
476     for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
477     16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
478     do
479     makedev ttyC$i c $major1 $i $tty
480     #makedev cub$i c $major2 $i $dialout
481     done
482     ;;
483     stallion|ttyE)
484     major1=`Major ttyE 24` || continue
485     #major2=`Major cue 25` || continue
486     majorc=28
487     minor=0
488     until [ $minor -gt 256 ]
489     do
490     makedev ttyE$minor c $major1 $minor $dialout
491     #makedev cue$minor c $major2 $minor $dialout
492     minor=`math minor + 1`
493     done
494     for i in 0 1 2 3
495     do
496     makedev staliomem$i c $majorc $i $private
497     done
498     ;;
499     chase|ttyH)
500     major1=`Major ttyH 17` || continue
501     #major2=`Major cuh 18` || continue
502     minor=0
503     until [ $minor -gt 16 ] # tell me if 16 is wrong
504     do
505     makedev ttyH$minor c $major1 $minor $dialout
506     #makedev cuh$minor c $major2 $minor $dialout
507     minor=`math minor + 1`
508     done
509     ;;
510     rocketport|ttyR)
511     major1=`Major ttyR 46` || continue
512     #major2=`Major cur 47` || continue
513     minor=0
514     until [ $minor -gt 64 ] # tell me if 64 is wrong
515     do
516     makedev ttyR$minor c $major1 $minor $dialout
517     #makedev cur$minor c $major2 $minor $dialout
518     minor=`math minor + 1`
519     done
520     ;;
521     ttyV)
522     major1=`Major ttyV 105` || continue
523     #major2=`Major cuv 106` || continue
524     minor=0
525     until [ $minor -gt 16 ] # tell me if 16 is wrong
526     do
527     makedev ttyV$minor c $major1 $minor $dialout
528     #makedev cuv$minor c $major2 $minor $dialout
529     minor=`math minor + 1`
530     done
531     ;;
532     digi|ttyD)
533     major1=`Major ttyD 22` || continue
534     #major2=`Major cud 23` || continue
535     minor=0
536     until [ $minor -gt 16 ] # tell me if 16 is wrong
537     do
538     makedev ttyD$minor c $major1 $minor $dialout
539     #makedev cud$minor c $major2 $minor $dialout
540     minor=`math minor + 1`
541     done
542     ;;
543     specialix|ttyX)
544     major1=`Major ttyX 32` || continue
545     #major2=`Major cux 33` || continue
546     minor=0
547     until [ $minor -gt 16 ] # tell me if 16 is wrong
548     do
549     makedev ttyX$minor c $major1 $minor $dialout
550     #makedev cux$minor c $major2 $minor $dialout
551     minor=`math minor + 1`
552     done
553     ;;
554     specialixIO8|ttyW)
555     major1=`Major ttyW 75` || continue
556     #major2=`Major cuw 76` || continue
557     minor=0
558     until [ $minor -gt 16 ] # tell me if 16 is wrong
559     do
560     makedev ttyW$minor c $major1 $minor $dialout
561     #makedev cuw$minor c $major2 $minor $dialout
562     minor=`math minor + 1`
563     done
564     ;;
565     PAM|ttyM)
566     major1=`Major ttyM 79` || continue
567     #major2=`Major cum 80` || continue
568     minor=0
569     until [ $minor -gt 16 ] # tell me if 16 is wrong
570     do
571     makedev ttyM$minor c $major1 $minor $dialout
572     #makedev cum$minor c $major2 $minor $dialout
573     minor=`math minor + 1`
574     done
575     ;;
576     riscom|ttyL)
577     major=`Major ttyL 48` || continue
578     minor=0
579     until [ $minor -gt 16 ] # tell me if 16 is wrong
580     do
581     makedev ttyL$minor c $major $minor $dialout
582     minor=`math minor + 1`
583     done
584     ;;
585     computone|ttyF)
586     major=`Major ttyF 71` || continue
587     #major2=`Major cuf 72` || continue
588     minor=0
589     until [ $minor -gt 255 ]
590     do
591     makedev ttyF$minor c $major $minor $dialout
592     #makedev cuf$minor c $major2 $minor $dialout
593     minor=`math minor + 1`
594     done
595     major=73
596     for i in 0 4 8 12
597     do
598     makedev ip2ipl$i c $major $i $private
599     makedev ip2stat$i c $major `math $i + 1` $private
600     done
601     ;;
602     ESP|ttyP)
603     major=`Major ttyP 57` || continue
604     #major2=`Major cup 58` || continue
605     minor=0
606     until [ $minor -gt 4 ] # tell me if 4 is wrong
607     do
608     makedev ttyP$minor c $major $minor $dialout
609     #makedev cup$minor c $major2 $minor $dialout
610     minor=`math minor + 1`
611     done
612     ;;
613     COMX|comx)
614     major=`Major comx 88` || continue
615     minor=0
616     until [ $minor -gt 4 ] # tell me if 4 is wrong
617     do
618     makedev comx$minor c $major $minor $private
619     minor=`math minor + 1`
620     done
621     ;;
622     isdnmodem|ttyI)
623     major1=`Major ttyI 43` || continue
624     #major2=`Major cui 44` || continue
625     minor=0
626     until [ $minor -gt 63 ]
627     do
628     makedev ttyI$minor c $major1 $minor $dialout
629     #makedev cui$minor c $major2 $minor $dialout
630     minor=`math minor + 1`
631     done
632     ;;
633     isdnbri)
634     major=45
635     minor=0
636     until [ $minor -gt 63 ]
637     do
638     makedev isdn$minor c $major $minor $private
639     makedev isdnctrl$minor c $major `math $minor + 64` $private
640     makedev ippp$minor c $major `math $minor + 128` $private
641     minor=`math minor + 1`
642     done
643     makedev isdninfo c $major 255 $private
644     ;;
645     dcbri)
646     major=52
647     for i in 0 1 2 3
648     do
649     makedev dcbri$i c $major $i $private
650     done
651     ;;
652     capi)
653     major=68
654     makedev capi20 c $major 0 $private
655     for i in 0 1 2 3 4 5 6 7 8 9
656     do
657     makedev capi20.0$i c $major `math $i + 1` $private
658     done
659     for i in 10 11 12 13 14 15 16 17 18 19
660     do
661     makedev capi20.$i c $major `math $i + 1` $private
662     done
663     ;;
664     fb)
665     for i in 0 1 2 3 4 5 6 7
666     do
667     makedev fb$i c 29 $i $cons
668     done
669     ;;
670     netlink)
671     makedev route c 36 0 $coda
672     makedev skip c 36 1 $coda
673     makedev fwmonitor c 36 3 $coda
674     ;;
675     lp|par)
676     major=`Major lp 6` || continue
677     makedev lp0 c $major 0 $printer
678     makedev lp1 c $major 1 $printer
679     makedev lp2 c $major 2 $printer
680     makedev lp3 c $major 3 $printer
681     ;;
682     parport)
683     major=`Major parport 99` || continue
684     makedev ${arg}0 c $major 0 $printer
685     makedev ${arg}1 c $major 1 $printer
686     makedev ${arg}2 c $major 2 $printer
687     makedev ${arg}3 c $major 3 $printer
688     ;;
689     slm)
690     major=`Major slm 28` || continue
691     for i in 0 1 2 3
692     do
693     makedev slm c $major $i $printer
694     done
695     ;;
696     busmice)
697     major=`Major mouse 10` || continue
698     makedev logibm c $major 0 $mouse
699     makedev psaux c $major 1 $mouse
700     makedev inportbm c $major 2 $mouse
701     makedev atibm c $major 3 $mouse
702     makedev jbm c $major 4 $mouse
703     ;;
704     misc)
705     major=`Major mouse 10` || continue
706     makedev logibm c $major 0 $mouse
707     makedev psaux c $major 1 $mouse
708     makedev inportbm c $major 2 $mouse
709     makedev atibm c $major 3 $mouse
710     makedev jbm c $major 4 $mouse
711     makedev amigamouse c $major 4 $mouse
712     makedev atarimouse c $major 5 $mouse
713     makedev sunmouse c $major 6 $mouse
714     makedev amigamouse1 c $major 7 $mouse
715     makedev smouse c $major 8 $mouse
716     makedev pc110pad c $major 9 $mouse
717     makedev adbmouse c $major 10 $mouse
718     makedev beep c $major 128 $mouse
719     makedev modreq c $major 129 $mouse
720     makedev watchdog c $major 130 $mouse
721     makedev temperature c $major 131 $mouse
722     makedev hwtrap c $major 132 $mouse
723     makedev exttrp c $major 133 $mouse
724     makedev apm_bios c $major 134 $mouse
725     makedev rtc c $major 135 $mouse
726     makedev openprom c $major 139 $mouse
727     makedev relay8 c $major 140 $mouse
728     makedev relay16 c $major 141 $mouse
729     makedev msr c $major 142 $mouse
730     makedev pciconf c $major 143 $mouse
731     makedev nvram c $major 144 $mouse
732     makedev hfmodem c $major 145 $mouse
733     makedev led c $major 151 $mouse
734     makedev mergemem c $major 153 $mouse
735     makedev pmu c $major 154 $mouse
736     ;;
737     rtc)
738     major=`Major mouse 10` || continue
739     makedev rtc c $major 135 $mouse
740     ;;
741     joystick)
742     major=`Major Joystick` || continue
743     makedev js0 c 15 0 $mouse
744     makedev js1 c 15 1 $mouse
745     makedev djs0 c 15 128 $mouse
746     makedev djs1 c 15 129 $mouse
747     ;;
748     ed[a-b])
749     major=`Major ed 36` || continue
750     unit=`suffix $arg ed`
751     base=`index ab $unit`
752     base=`math $base \* 64`
753     makedev ed$unit b $major $base $disk
754     for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
755     do
756     makedev ed$unit$part b $major `math $base + $part` $disk
757     done
758     ;;
759     hd[a-b])
760     major=`Major ide0 3`
761     unit=`suffix $arg hd`
762     base=`index ab $unit`
763     base=`math $base \* 64`
764     makedev hd$unit b $major $base $disk
765     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
766     do
767     makedev hd$unit$part b $major `math $base + $part` $disk
768     done
769     ;;
770     hd[c-d])
771     major=`Major ide1 22` || continue
772     unit=`suffix $arg hd`
773     base=`index cd $unit`
774     base=`math $base \* 64`
775     makedev hd$unit b $major $base $disk
776     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
777     do
778     makedev hd$unit$part b $major `expr $base + $part` $disk
779     done
780     ;;
781     hd[e-f])
782     major=`Major ide2 33` || continue
783     unit=`suffix $arg hd`
784     base=`index ef $unit`
785     base=`math $base \* 64`
786     makedev hd$unit b $major $base $disk
787     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
788     do
789     makedev hd$unit$part b $major `expr $base + $part` $disk
790     done
791     ;;
792     hd[g-h])
793     major=`Major ide3 34` || continue
794     unit=`suffix $arg hd`
795     base=`index gh $unit`
796     base=`math $base \* 64`
797     makedev hd$unit b $major $base $disk
798     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
799     do
800     makedev hd$unit$part b $major `expr $base + $part` $disk
801     done
802     ;;
803     hd[i-j])
804     major=`Major ide4 56` || continue
805     unit=`suffix $arg hd`
806     base=`index gh $unit`
807     base=`math $base \* 64`
808     makedev hd$unit b $major $base $disk
809     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
810     do
811     makedev hd$unit$part b $major `expr $base + $part` $disk
812     done
813     ;;
814     hd[k-l])
815     major=`Major ide4 57` || continue
816     unit=`suffix $arg hd`
817     base=`index gh $unit`
818     base=`math $base \* 64`
819     makedev hd$unit b $major $base $disk
820     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
821     do
822     makedev hd$unit$part b $major `expr $base + $part` $disk
823     done
824     ;;
825     ht)
826     major=`Major ht0 37` || continue
827     makedev ht0 c $major 0 $tape
828     makedev ht1 c $major 1 $tape
829     makedev nht0 c $major 128 $tape
830     makedev nht1 c $major 129 $tape
831     ;;
832     pt)
833     major=`Major pt 96` || continue
834     for i in 0 1 2 3
835     do
836     makedev pt$i c $major $i $tape
837     makedev npt$i c $major `math $i + 128` $tape
838     done
839     ;;
840     xd[a-d])
841     major=`Major xd 13` || continue
842     unit=`suffix $arg xd`
843     base=`index abcd $unit`
844     base=`math $base \* 64`
845     makedev xd$unit b $major $base $disk
846     for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
847     do
848     makedev xd$unit$part b $major `expr $base + $part` $disk
849     done
850     ;;
851     sd[a-z])
852     major=`Major sd 8` || continue
853     unit=`suffix $arg sd`
854     base=`index abcdefghijklmnopqrstuvwxyz $unit`
855     base=`math $base \* 16`
856     if [ $base -lt 256 ]; then
857     major=8
858     else
859     major=65
860     base=`math $base \- 256`
861     fi
862     makedev sd$unit b $major $base $disk
863     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
864     do
865     minor=`expr $base + $part`
866     makedev sd$unit$part b $major $minor $disk
867     done
868     ;;
869     sd[a-d][a-z])
870     unit=`suffix $arg sd`
871     unitmaj=`first $unit`
872     unitmin=`second $unit`
873     basemaj=`index Xabcd $unitmaj`
874     basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
875     basemaj=`math $basemaj \* 416`
876     basemin=`math $basemin \* 16`
877     base=`math $basemaj + $basemin`
878     basemaj=`math $base / 256`
879     base=`math $base % 256`
880     major=`math basemaj \+ 64`
881     if [ $major -gt 71 ]; then
882     echo "$0: don't know how to make device \"$arg\"" >&2
883     exit 0
884     fi
885     makedev sd$unit b $major $base $disk
886     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
887     do
888     minor=`expr $base + $part`
889     makedev sd$unit$part b $major $minor $disk
890     done
891     ;;
892     ad[a-p])
893     major=`Major ad 28` || continue
894     unit=`suffix $arg ad`
895     base=`index abcdefghijklmnop $unit`
896     base=`math $base \* 16`
897     makedev ad$unit b $major $base $disk
898     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
899     do
900     minor=`expr $base + $part`
901     makedev ad$unit$part b $major $minor $disk
902     done
903     ;;
904     dac960)
905     [ -d rd ] || {
906     mkdir rd
907     chown root.root rd
908     chmod 755 rd
909     }
910     for ctr in 0 1 2 3 4 5 6 7
911     do
912     major=`math 48 + $ctr`
913     minor=0
914     for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
915     17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
916     do
917     makedev rd/c${ctr}d${ld} b $major $minor $disk
918     minor=`math minor + 1`
919     for part in 1 2 3 4 5 6 7
920     do
921     makedev rd/c${ctr}d${ld}p$part b $major $minor $disk
922     minor=`math minor + 1`
923     done
924     done
925     done
926     ;;
927     ida)
928     [ -d ida ] || {
929     mkdir ida
930     chown root.root ida
931     chmod 755 ida
932     }
933     for ctr in 0 1 2 # 3 4 5 6 7
934     do
935     major=`math 72 + $ctr`
936     minor=0
937     for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
938     do
939     makedev ida/c${ctr}d${ld} b $major $minor $disk
940     minor=`math minor + 1`
941     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
942     do
943     makedev ida/c${ctr}d${ld}p$part b $major $minor $disk
944     minor=`math minor + 1`
945     done
946     done
947     done
948     ;;
949     rom)
950     major=`Major rom 31`
951     for i in 0 1 2 3 4 5 6 7
952     do
953     makedev rom$i b $major $i $disk
954     makedev rrom$i b $major `math $i +8` $disk
955     makedev flash$i b $major `math $i +16` $disk
956     makedev rflash$i b $major `math $i +24` $disk
957     done
958     ;;
959     nb)
960     major=`Major nbd 43` || continue
961     minor=0
962     while [ $minor -lt 128 ] ; do
963     makedev nb$minor b $major $minor $disk
964     minor=`math $minor + 1`
965     done
966     ;;
967     loop)
968     major=`Major loop` || continue
969     for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
970     do
971     makedev loop$part b $major $part $disk
972     done
973     ;;
974     md)
975     major=`Major md` || continue
976     for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
977     do
978     makedev md$part b $major $part $disk
979     done
980     ;;
981     st[0-7])
982     major=`Major st 9`
983     unit=`suffix $arg st`
984     makedev st${unit} c $major $unit $tape
985     makedev nst${unit} c $major `math 128 + $unit` $tape
986    
987     makedev st${unit}l c $major `math 32 + $unit` $tape
988     makedev nst${unit}l c $major `math 160 + $unit` $tape
989    
990     makedev st${unit}m c $major `math 64 + $unit` $tape
991     makedev nst${unit}m c $major `math 192 + $unit` $tape
992    
993     makedev st${unit}a c $major `math 96 + $unit` $tape
994     makedev nst${unit}a c $major `math 224 + $unit` $tape
995     ;;
996     qic)
997     major=`Major tpqic02 12`
998     makedev ntpqic11 c $major 2 $tape
999     makedev tpqic11 c $major 3 $tape
1000     makedev ntpqic24 c $major 4 $tape
1001     makedev tpqic24 c $major 5 $tape
1002     makedev ntpqic120 c $major 6 $tape
1003     makedev tpqic120 c $major 7 $tape
1004     makedev ntpqic150 c $major 8 $tape
1005     makedev tpqic150 c $major 9 $tape
1006     makedev rmt8 c $major 6 $tape
1007     makedev rmt16 c $major 8 $tape
1008     makedev tape-d c $major 136 $tape
1009     makedev tape-reset c $major 255 $tape
1010     major=`Major qft 27`
1011     for i in 0 1 2 3
1012     do
1013     makedev qft$i c $major $i $tape
1014     makedev nqft$i c $major `math $i + 4` $tape
1015     makedev zqft$i c $major `math $i + 16` $tape
1016     makedev nzqft$i c $major `math $i + 20` $tape
1017     makedev rawqft$i c $major `math $i + 32` $tape
1018     makedev nrawqft$i c $major `math $i + 36` $tape
1019     done
1020     ;;
1021     ftape)
1022     major=`Major mt 27` || continue
1023     for unit in 0 1 2 3
1024     do
1025     makedev rft$unit c $major $unit $tape
1026     makedev nrft$unit c $major `math $unit + 4` $tape
1027     done
1028     symlink ftape rft0
1029     symlink nftape nrft0
1030     ;;
1031     scd|scd-all)
1032     major=`Major sr 11` || continue
1033     for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1034     do
1035     makedev scd$unit b $major $unit $cdrom
1036     done
1037     ;;
1038     cfs0)
1039     makedev cfs0 c 67 0 $coda
1040     ;;
1041     scd[0-9]|scd[0-1][0-9])
1042     major=`Major sr 11` || continue
1043     unit=`suffix $arg scd`
1044     makedev scd$unit b $major $unit $cdrom
1045     ;;
1046     ttyI[0-9]|ttyI[1-5][0-9]|ttyI[6][0-3])
1047     major=43
1048     unit=`suffix $arg ttyI`
1049     makedev ttyI$unit c $major $unit $dialout
1050     ;;
1051     ippp[0-9]|ippp[1-5][0-9]|ippp[6][0-3])
1052     major=45
1053     unit=`suffix $arg ippp`
1054     minor=`math $unit + 128`
1055     makedev ippp$unit c $major $minor $dialout
1056     ;;
1057     isdn[0-9]|isdn[1-5][0-9]|isdn[6][0-3])
1058     major=45
1059     unit=`suffix $arg isdn`
1060     minor=`math $unit + 0`
1061     makedev isdn$unit c $major $minor $dialout
1062     ;;
1063     isdnctrl[0-9]|isdnctrl[1-5][0-9]|isdnctrl[6][0-3])
1064     major=45
1065     unit=`suffix $arg isdnctrl`
1066     minor=`math $unit + 64`
1067     makedev isdnctrl$unit c $major $minor $dialout
1068     ;;
1069     isdninfo)
1070     makedev isdninfo c 45 255 $dialout
1071     ;;
1072     isdn-tty)
1073     major=43
1074     for unit in 0 1 2 3 4 5 6 7
1075     do
1076     makedev ttyI$unit c $major $unit $dialout
1077     done
1078     ;;
1079     isdn-ippp)
1080     major=45
1081     for unit in 0 1 2 3 4 5 6 7
1082     do
1083     makedev ippp$unit c $major `math $unit + 128` $dialout
1084     done
1085     ;;
1086     isdn-io)
1087     for unit in 0 1 2 3 4 5 6 7
1088     do
1089     makedev isdn$unit c 45 $unit $dialout
1090     makedev isdnctrl$unit c 45 `math $unit + 64` $dialout
1091     makedev ippp$unit c 45 `math $unit + 128` $dialout
1092     done
1093     makedev isdninfo c 45 255 $dialout
1094     ;;
1095     sonycd)
1096     major=`Major cdu31a` || continue
1097     makedev $arg b $major 0 $cdrom
1098     ;;
1099     mcd)
1100     major=`Major mcd 23` || continue
1101     makedev $arg b $major 0 $cdrom
1102     ;;
1103     mcdx)
1104     major=`Major mcdx 20` || continue
1105     makedev $arg b $major 0 $cdrom
1106     ;;
1107     cdu535)
1108     makedev $arg b 24 0 $cdrom
1109     ;;
1110     lmscd)
1111     makedev $arg b 24 0 $cdrom
1112     ;;
1113     sbpcd|sbpcd[123])
1114     major=`Major $arg` || continue
1115     base=`suffix ${arg}0 sbpcd`
1116     # base=`expr ${arg}0 : "sbpcd\(.\)"`
1117     for minor in 0 1 2 3
1118     do
1119     # XXX
1120     unit=`expr substr 0123456789abcdef \( $base \* 4 + $minor + 1 \) 1`
1121     makedev sbpcd$unit b $major $minor $cdrom
1122     done
1123     [ $arg = sbpcd ] && symlink $arg ${arg}0
1124     ;;
1125     aztcd)
1126     major=`Major $arg` || continue
1127     makedev ${arg}0 b $major 0 $cdrom
1128     ;;
1129     bpcd)
1130     makedev $arg b 41 0 $cdrom
1131     ;;
1132     optcd)
1133     makedev $arg b 17 0 $cdrom
1134     ;;
1135     sjcd)
1136     makedev $arg b 18 0 $cdrom
1137     ;;
1138     cfs|coda)
1139     makedev cfs0 c 67 0 $private
1140     ;;
1141     xfs|arla)
1142     makedev xfs0 c 103 0 $private
1143     ;;
1144     logiscan)
1145     major=`Major logiscan` || continue
1146     makedev $arg c $major 0 $scanner
1147     ;;
1148     m105scan)
1149     major=`Major m105` || continue
1150     makedev $arg c $major 0 $scanner
1151     ;;
1152     ac4096)
1153     major=`Major ac4096` || continue
1154     makedev $arg c $major 0 $scanner
1155     ;;
1156     audio)
1157     major=`Major sound 14`
1158     makedev mixer c $major 0 $audio
1159     makedev sequencer c $major 1 $audio
1160     makedev midi00 c $major 2 $audio
1161     makedev dsp c $major 3 $audio
1162     makedev audio c $major 4 $audio
1163     makedev sndstat c $major 6 $audio
1164     makedev sequencer2 c $major 8 $audio
1165     makedev mixer1 c $major 16 $audio
1166     makedev patmgr0 c $major 17 $audio
1167     makedev midi01 c $major 18 $audio
1168     makedev dsp1 c $major 19 $audio
1169     makedev audio1 c $major 20 $audio
1170     makedev patmgr1 c $major 33 $audio
1171     makedev midi02 c $major 34 $audio
1172     makedev midi03 c $major 50 $audio
1173     major=31
1174     makedev mpu401data c $major 0 $audio
1175     makedev mpu401stat c $major 1 $audio
1176     major=35
1177     for i in 0 1 2 3
1178     do
1179     makedev midi$i c $major $i $audio
1180     makedev rmidi$i c $major `math $i + 64` $audio
1181     makedev smpte$i c $major `math $i + 128` $audio
1182     done
1183     ;;
1184     pcaudio)
1185     major=`Major pcsp` || continue
1186     makedev pcmixer c $major 0 $audio
1187     makedev pcsp c $major 3 $audio
1188     makedev pcaudio c $major 4 $audio
1189     ;;
1190     video|video4linux|v4l|radio)
1191     # video4linux api includes radio, teletext, etc.
1192     major=`Major video 81` || continue
1193     minor=0
1194     until [ $minor -gt 63 ]
1195     do
1196     makedev video$minor c $major $minor $video
1197     makedev radio$minor c $major `math $minor + 64` $video
1198     minor=`math $minor + 1`
1199     done
1200     minor=0
1201     until [ $minor -gt 31 ]
1202     do
1203     makedev vtx$minor c $major `math $minor + 192` $video
1204     makedev vbi$minor c $major `math $minor + 224` $video
1205     minor=`math $minor + 1`
1206     done
1207     symlink video video0
1208     major=82
1209     minor=0
1210     until [ $minor -gt 1 ]
1211     do
1212     makedev winradio$minor c $major $minor $video
1213     minor=`math $minor + 1`
1214     done
1215     major=83
1216     makedev vtx c $major 0 $video
1217     makedev vttuner c $major 16 $video
1218     ;;
1219     i2c)
1220     major=`Major i2c 89` || continue
1221     minor=0
1222     until [ $minor -gt 1 ]; do
1223     makedev i2c-$minor c $major $minor $private
1224     minor=`math $minor + 1`
1225     done
1226     ;;
1227     tlk)
1228     major=102
1229     minor=0
1230     until [ $minor -gt 3 ] # tell me if 3 is wrong...
1231     do
1232     makedev tlk$minor c $major $minor $video
1233     minor=`math $minor + 1`
1234     done
1235     ;;
1236     srnd)
1237     makedev srnd0 c 110 0 $video
1238     makedev srnd1 c 110 1 $video
1239     ;;
1240     fgrab)
1241     makedev mmetfgrab c 40 0 $video
1242     makedev wvisfgrab c 26 0 $video
1243     for i in 0 1 # more?
1244     do
1245     makedev iscc$i c 93 $i $video
1246     makedev isccctl$i c 93 `math $i + 128` $video
1247     done
1248     for i in 0 1 # more?
1249     do
1250     makedev dcxx$i c 94 $i $video
1251     done
1252     ;;
1253     sg|sg-all)
1254     major=`Major sg 21`
1255     for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1256     do
1257     makedev sg$unit c $major $unit $scsi
1258     done
1259     ;;
1260     sg[0-9]|sg[0-1][0-9])
1261     major=`Major sg 11` || continue
1262     unit=`suffix $arg sg`
1263     makedev sg$unit c $major $unit $cdrom
1264     ;;
1265     pg)
1266     major=`Major pg 97`
1267     for unit in 0 1 2 3
1268     do
1269     makedev pg$unit c $major $unit $scsi
1270     done
1271     ;;
1272     ibcs2)
1273     major=`Major ibcs2` || continue
1274     makedev socksys c $major 0 $ibcs2
1275     symlink nfsd socksys
1276     makedev spx c $major 1 $ibcs2
1277     symlink X0R null
1278     ;;
1279     enskip)
1280     major=64
1281     makedev enskip c $major 0 $private
1282     ;;
1283     ipfilt*)
1284     major=95
1285     makedev ipl c $major 0 $private
1286     makedev ipnat c $major 1 $private
1287     makedev ipstate c $major 2 $private
1288     makedev ipauth c $major 3 $private
1289     ;;
1290     qng)
1291     makedev qng c 77 0 $private
1292     ;;
1293     apm)
1294     makedev apm_bios c 10 134 $system
1295     ;;
1296     dcf)
1297     major=`Major dcf` || continue
1298     makedev $arg c $major 0 $system
1299     ;;
1300     helloworld)
1301     major=`Major hw` || continue
1302     makedev helloworld c $major 0 $public
1303     ;;
1304     ipsec)
1305     # For the Free S/WAN (http://www.xs4all.nl/~freeswan/)
1306     # implementation of IPSEC
1307     makedev ipsec c 36 10 $ipsec
1308     ;;
1309     ppp)
1310     makedev ppp c 108 0 $dialout
1311     ;;
1312     *)
1313     echo "$0: don't know how to make device \"$arg\"" >&2
1314     exit 1
1315     ;;
1316     esac
1317     done
1318    
1319     exit 0