#!/bin/sh

usage ()
{
    prog=`basename $0`
    echo  "Usage: $prog [-d <ELDKROOT>] [-a arch] [-h]"
    exit 1
}


while getopts "a:d:vh" opt
do
  case "$opt" in
      h)      usage ;;
      a)      arch="$OPTARG" ;;
      d)      ELDKROOT="$OPTARG" ;;
      *)      echo "$0: Invalid option '$opt'" >&2 ; usage ;;
  esac
done

if [ $# != 0 -a $OPTIND = 1 ]; then
  usage
fi

shift `expr $OPTIND - 1`

if [ `id -u` -ne 0 ]; then
 echo "Should be executed as root!"
 exit 1
fi

if [ -z $ELDKROOT ]; then
    ELDKROOT=`pwd`
else
    cd $ELDKROOT
    ELDKROOT=`pwd`
    cd -
fi

# Sanity check
if [ $ELDKROOT = "/" ]; then
    echo "Will not work with ELDKROOT set to system root"
    exit 1
fi

# Check if we in "/dev" (for compatibility with the old version)
echo $ELDKROOT | egrep -qs "dev$"
indev=$?

if [ $indev = 0 ]; then
    arch=`cd $ELDKROOT/..;pwd;cd -`
    arch=`basename $arch`
    ELDKROOT=$ELDKROOT/../..
fi

if [ ! -f $ELDKROOT/version ]; then
    echo "No \"version\" file at \"$ELDKROOT\"."
    exit 1
fi

if [ -e $arch ]; then
    targetlist=`cat $ELDKROOT/version | grep -v ELDK | awk -F : '{print $1}'`
else
    targetlist=$arch
fi

trap "exit 1" 1 2 3 15
for t in $targetlist
do
  if [ ! -d $ELDKROOT/$t/dev ]; then
    mkdir -p $ELDKROOT/$t/dev || exit 1;
  fi
  cd $ELDKROOT/$t/dev
  echo "Working in" `pwd`
  if [ -e console ]; then
      echo "Directory seems already populated, skipping..."
      continue
  fi
  mkfifo initctl

  mknod console		c  5  1
  mknod fb0		c 29  0
  mknod full		c  1  7
  mknod hda		b  3  0
  mknod hda1		b  3  1
  mknod hda2		b  3  2
  mknod hda3		b  3  3
  mknod hda4		b  3  4
  mknod hda5		b  3  5
  mknod hda6		b  3  6
  mknod hda7		b  3  7
  mknod hda8		b  3  8
  mknod hda9		b  3  9
  mknod hda10		b  3 10
  mknod hda11		b  3 11
  mknod hda12		b  3 12
  mknod hda13		b  3 13
  mknod hda14		b  3 14
  mknod hda15		b  3 15
  mknod hda16		b  3 16
  mknod hdb		b  3 64
  mknod hdb1		b  3 65
  mknod hdb2		b  3 66
  mknod hdb3		b  3 67
  mknod hdb4		b  3 68
  mknod hdb5		b  3 69
  mknod hdb6		b  3 70
  mknod hdb7		b  3 71
  mknod hdb8		b  3 72
  mknod hdb9		b  3 73
  mknod hdb10		b  3 74
  mknod hdb11		b  3 75
  mknod hdb12		b  3 76
  mknod hdb13		b  3 77
  mknod hdb14		b  3 78
  mknod hdb15		b  3 79
  mknod hdb16		b  3 80
  mknod kmem		c  1  2
  mknod mem		c  1  1
  mknod mtd0		c 90  0
  mknod mtd1		c 90  2
  mknod mtd2		c 90  4
  mknod mtd3		c 90  6
  mknod mtd4		c 90  8
  mknod mtd5		c 90 10
  mknod mtd6		c 90 12
  mknod mtd7		c 90 14
  mknod mtd8		c 90 16
  mknod mtd9		c 90 18
  mknod mtd10		c 90 20
  mknod mtd11		c 90 22
  mknod mtd12		c 90 24
  mknod mtd13		c 90 26
  mknod mtd14		c 90 28
  mknod mtd15		c 90 30
  mknod mtd16		c 90 32
  mknod mtdblock0	b 31  0
  mknod mtdblock1	b 31  1
  mknod mtdblock2	b 31  2
  mknod mtdblock3	b 31  3
  mknod mtdblock4	b 31  4
  mknod mtdblock5	b 31  5
  mknod mtdblock6	b 31  6
  mknod mtdblock7	b 31  7
  mknod mtdblock8	b 31  8
  mknod mtdblock9	b 31  9
  mknod mtdblock10	b 31 10
  mknod mtdblock11	b 31 11
  mknod mtdblock12	b 31 12
  mknod mtdblock13	b 31 13
  mknod mtdblock14	b 31 14
  mknod mtdblock15	b 31 15
  mknod mtdblock16	b 31 16
  mknod mtdchar0		c 90  0
  mknod mtdchar1		c 90  1
  mknod mtdchar2		c 90  2
  mknod mtdchar3		c 90  3
  mknod mtdchar4		c 90  4
  mknod mtdchar5		c 90  5
  mknod mtdchar6		c 90  6
  mknod mtdchar7		c 90  7
  mknod mtdr0		c 90  1
  mknod mtdr1		c 90  3
  mknod mtdr2		c 90  5
  mknod mtdr3		c 90  7
  mknod mtdr4		c 90  9
  mknod mtdr5		c 90 11
  mknod mtdr6		c 90 13
  mknod mtdr7		c 90 15
  mknod mtdr8		c 90 17
  mknod mtdr9		c 90 19
  mknod mtdr10		c 90 21
  mknod mtdr11		c 90 23
  mknod mtdr12		c 90 25
  mknod mtdr13		c 90 27
  mknod mtdr14		c 90 29
  mknod mtdr15		c 90 31
  mknod mtdr16		c 90 33
  mknod nftla		b 93  0
  mknod nftla1		b 93  1
  mknod nftla2		b 93  2
  mknod nftla3		b 93  3
  mknod nftla4		b 93  4
  mknod nftla5		b 93  5
  mknod nftla6		b 93  6
  mknod nftla7		b 93  7
  mknod nftlb		b 93 16
  mknod nftlb1		b 93 17
  mknod nftlb2		b 93 18
  mknod nftlb3		b 93 19
  mknod nftlb4		b 93 20
  mknod null		c  1  3
  mknod psaux		c 10  1
  mknod ptyp0		c  2  0
  mknod ptyp1		c  2  1
  mknod ptyp2		c  2  2
  mknod ptyp3		c  2  3
  mknod ptyp4		c  2  4
  mknod ptyp5		c  2  5
  mknod ptyp6		c  2  6
  mknod ptyp7		c  2  7
  mknod ptyp8		c  2  8
  mknod ptyp9		c  2  9
  mknod ptypa		c  2 10
  mknod ptypb		c  2 11
  mknod ptypc		c  2 12
  mknod ptypd		c  2 13
  mknod ptype		c  2 14
  mknod ptypf		c  2 15
  mknod ram		b  1  1
  mknod ram0		b  1  0
  mknod ram1		b  1  1
  mknod tty		c  5  0
  mknod tty0		c  4  0
  mknod tty1		c  4  1
  mknod tty2		c  4  2
  mknod tty3		c  4  3
  mknod ttyS0		c  4 64
  mknod ttyS1		c  4 65
  mknod ttyS2		c  4 66
  mknod ttyS3		c  4 67
  mknod ttyS4		c  4 68
  mknod ttyS5		c  4 69
  mknod ttyS6		c  4 70
  mknod ttyS7		c  4 71
  mknod ttyCPM0		c  204 46
  mknod ttyCPM1		c  204 47
  mknod ttyCPM2		c  204 48
  mknod ttyCPM3		c  204 49
  mknod ttyCPM4		c  204 50
  mknod ttyCPM5		c  204 51
  mknod ttyp0		c  3  0
  mknod ttyp1		c  3  1
  mknod ttyp2		c  3  2
  mknod ttyp3		c  3  3
  mknod ttyp4		c  3  4
  mknod ttyp5		c  3  5
  mknod ttyp6		c  3  6
  mknod ttyp7		c  3  7
  mknod ttyp8		c  3  8
  mknod ttyp9		c  3  9
  mknod ttypa		c  3 10
  mknod ttypb		c  3 11
  mknod ttypc		c  3 12
  mknod ttypd		c  3 13
  mknod ttype		c  3 14
  mknod ttypf		c  3 15
  mknod zero		c  1  5
  mknod rtc		c 254 0
  mknod random		c  1  8
  mknod urandom		c  1  9
  ln -s fb0 fb
  ln -s null mouse
  chmod 0620 console
  chmod 0600 fb0
  chmod 0666 full
  chmod 0644 rtc
  chmod 0660 hda
  chmod 0660 hda1
  chmod 0660 hda10
  chmod 0660 hda11
  chmod 0660 hda12
  chmod 0660 hda13
  chmod 0660 hda14
  chmod 0660 hda15
  chmod 0660 hda16
  chmod 0660 hda2
  chmod 0660 hda3
  chmod 0660 hda4
  chmod 0660 hda5
  chmod 0660 hda6
  chmod 0660 hda7
  chmod 0660 hda8
  chmod 0660 hda9
  chmod 0640 kmem
  chmod 0640 mem
  chmod 0664 mtd0
  chmod 0664 mtd1
  chmod 0664 mtd10
  chmod 0664 mtd11
  chmod 0664 mtd12
  chmod 0664 mtd13
  chmod 0664 mtd14
  chmod 0664 mtd15
  chmod 0664 mtd16
  chmod 0664 mtd2
  chmod 0664 mtd3
  chmod 0664 mtd4
  chmod 0664 mtd5
  chmod 0664 mtd6
  chmod 0664 mtd7
  chmod 0664 mtd8
  chmod 0664 mtd9
  chmod 0664 mtdblock0
  chmod 0664 mtdblock1
  chmod 0664 mtdblock10
  chmod 0664 mtdblock11
  chmod 0664 mtdblock12
  chmod 0664 mtdblock13
  chmod 0664 mtdblock14
  chmod 0664 mtdblock15
  chmod 0664 mtdblock16
  chmod 0664 mtdblock2
  chmod 0664 mtdblock3
  chmod 0664 mtdblock4
  chmod 0664 mtdblock5
  chmod 0664 mtdblock6
  chmod 0664 mtdblock7
  chmod 0664 mtdblock8
  chmod 0664 mtdblock9
  chmod 0664 mtdr0
  chmod 0664 mtdr1
  chmod 0664 mtdr10
  chmod 0664 mtdr11
  chmod 0664 mtdr12
  chmod 0664 mtdr13
  chmod 0664 mtdr14
  chmod 0664 mtdr15
  chmod 0664 mtdr16
  chmod 0664 mtdr2
  chmod 0664 mtdr3
  chmod 0664 mtdr4
  chmod 0664 mtdr5
  chmod 0664 mtdr6
  chmod 0664 mtdr7
  chmod 0664 mtdr8
  chmod 0664 mtdr9
  chmod 0666 null
  chmod 0600 psaux
  chmod 0666 ptyp0
  chmod 0666 ptyp1
  chmod 0666 ptyp2
  chmod 0666 ptyp3
  chmod 0666 ptyp4
  chmod 0666 ptyp5
  chmod 0666 ptyp6
  chmod 0666 ptyp7
  chmod 0640 ram
  chmod 0660 ram0
  chmod 0660 ram1
  chmod 0666 tty
  chmod 0620 tty0
  chmod 0620 tty1
  chmod 0620 tty2
  chmod 0620 tty3
  chmod 0660 ttyS0
  chmod 0660 ttyS1
  chmod 0660 ttyS2
  chmod 0660 ttyS3
  chmod 0660 ttyS4
  chmod 0660 ttyS5
  chmod 0620 ttyp0
  chmod 0620 ttyp1
  chmod 0620 ttyp2
  chmod 0620 ttyp3
  chmod 0620 ttyp4
  chmod 0620 ttyp5
  chmod 0620 ttyp6
  chmod 0620 ttyp7
  chmod 0666 zero
  chmod 0644 random
  chmod 0644 urandom
  chmod 400 initctl

# Xenomai RT devices
  for n in `seq 0 31` ; do
    mknod -m 666 rtp$n c 150 $n
  done
  mknod -m 666 rtheap c 10 254
done
