#! /bin/sh

#
# create basic devices
#



#
# create symbolic links
#
symlink () 
{
    if [ -e $1 ]; then
	rm -f $2; ln -s $1 $2;
    fi
}


#
# make devices
#
# usage: 
#         makedev name [bcu] major minor owner group mode
#
# (reuse some code from debian version of MAKEDEV)
#
makedev() {
    rm -f $1-
    if mknod $1- $2 $3 $4 &&
	chown $5:$6 $1- &&
	chmod $7 $1- &&
	mv $1- $1
	then
	:	# it worked
    else
	# Didn't work, clean up any mess...
	echo "makedev $@: failed"
	rm -f $1-
    fi
}


# user,group and permission settings
  common="  0 0  0644"
  system="  0 0  0660"
readable="  0 0  0444"
  public="  0 0  0666"
    disk="  0 0  0660"
    tty="   0 0  0666"
   kmem="   0 0  0640"
private="   0 0  0600"


# standard devices
makedev mem     c 1  1 $private
makedev kmem    c 1  2 $kmem
makedev null    c 1  3 $public
makedev console c 4  0 $system
makedev zero    c 1  5 $public
makedev random  c 1  8 $public
makedev urandom c 1  9 $readable
makedev tty     c 5  0 $tty
makedev fb0     c 29 0 $tty
makedev ptmx    c 5  2 $tty

# some console tty's
for i in 0 1 2 3 4 5 6 7 8 9; do
    makedev tty$i c 4 $i $tty
done


# for convienence
symlink  /proc/self/fd fd
symlink  fd/0 stdin
symlink  fd/1 stdout
symlink  fd/2 stderr
symlink  console tty0


# cloop device
makedev cloop b 240 0 $system

# fuse support
makedev fuse c 10 229 $public

#
makedev initrd b 1  250 $system

# ram devices
for i in 0 1 2 3 4 5 6 7 8 9; do
    if [ ! -b ram$i ]; then
	makedev ram$i b 1 $i $common
    fi
done
symlink ram1 ram


# loop devices
for i in 0 1 2 3 4 5 6 7 8 9; do
    makedev loop$i b 7 $i $private
done


# Floppy disks
for i in 0 1 2 3 4 5; do
    makedev fs$i b 2 $i $public
done

# first IDE interface (master)
makedev hda b 3 0 $disk
for i in 1 2 3 4 5 6 7 8 9; do
    makedev hda$i b 3 $i $disk
done

# first IDE interface (slave)
makedev hdb b 3 64 $disk
for i in 1 2 3 4 5 6 7 8 9; do
    minor=`expr $i + 64`
    makedev hdb$i b 3 $minor $disk
done

# second IDE interface (master)
makedev hdc b 22 0 $disk
for i in 1 2 3 4 5 6 7 8 9; do
    makedev hdc$i b 22 $i $disk
done

# second IDE interface (slave)
makedev hdd b 22 64 $disk
for i in 1 2 3 4 5 6 7 8 9; do
    minor=`expr $i + 64`
    makedev hdd$i b 22 $minor $disk
done

# on some hardware this is the cdrom drive
makedev hde b 33 0 $disk

# first SCSI disk device 
makedev sda b 8 0 $disk
for i in 1 2 3 4 5 6 7 8 9 10 11 12; do
    makedev sda$i b 8 $i $disk
done

# second SCSI disk device 
makedev sdb b 8 16 $disk
for i in 1 2 3 4 5 6 7 8 9 10 11 12; do
    minor=`expr $i + 16`
    makedev sdb$i b 8 $minor $disk
done

# third SCSI disk device 
makedev sdc b 8 32 $disk
for i in 1 2 3 4 5 6 7 8 9 10 11 12; do
    minor=`expr $i + 32`
    makedev sdc$i b 8 $minor $disk
done

# SCSI cdrom drives
makedev sg0  c 21 0 $disk
for i in 0 1 2 3 4 5 6 7 8 9; do
    makedev scd$i b 11 $i $disk
    symlink scd$i sr$i
done

# serial console
for i in 0 1 2; do
    minor=`expr $i + 64`
    makedev ttyS$i c 4 $minor $tty
done

# make subdirs
mkdir -p shm; chmod 777 shm
mkdir -p pts; chmod 755 pts
mkdir -p input; chmod 755 input

# event input devices
for i in 0 1 2; do
    minor=`expr $i + 64`
    makedev input/event$i c 13 $minor $system
done

# mouse input devices
makedev psaux c 10 1 $tty
makedev input/mice c 13 63 $tty
for i in 0 1 2; do
    minor=`expr $i + 32`
    makedev input/mouse$i c 13 $minor $tty
done








