12068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project#!/bin/bash
22068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
32068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source ProjectKERNEL=
42068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source ProjectRAMDISK=
52068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source ProjectCMDLINE=
62068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source ProjectGENEXT2FS=
72068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source ProjectGRUBCONF=
82068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source ProjectTMPDIR=
92068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source ProjectOUTPUT=
102068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
112068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectwhile [ $# -gt 0 ]; do
122068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project    case $1 in
132068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project        --kernel)
142068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            KERNEL=$2
152068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            shift
162068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            ;;
172068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
182068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project        --ramdisk)
192068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            RAMDISK=$2
202068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            shift
212068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            ;;
222068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
232068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project        --cmdline)
242068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            CMDLINE=$2
252068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            shift
262068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            ;;
272068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
282068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project        --genext2fs)
292068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            GENEXT2FS=$2
302068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            shift
312068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            ;;
322068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
332068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project        --tmpdir)
342068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            TMPDIR=$2
352068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            shift
362068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            ;;
372068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project        --grubconf)
382068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            GRUBCONF=$2
392068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            shift
402068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            ;;
412068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project        --output)
422068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            OUTPUT=$2
432068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            shift
442068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            ;;
452068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
462068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project        --help)
472068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "Usage: $0 OPTIONS"
482068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "Create an ext2 image that contains everything necessary"
492068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo -e "to be the boot file system.\n"
502068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "The following options exist:"
512068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "  --genext2fs <genext2fs>   The location of genext2fs binary"
522068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "  --kernel <kernel>         The kernel to boot"
532068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "  --ramdisk <ramdisk>       The ramdisk to be used"
542068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "  --cmdline <cmdline>       The command line to use"
552068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "  --grubconf <confile>      The path to grub conf file"
562068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "  --tmpdir <tmpdir>         The temporary dir where files"\
572068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project                 "can be copied"
582068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "  --output <output>         The filename of the output image"
592068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo
602068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            exit 0
612068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            ;;
622068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
632068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project        *)
642068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            echo "Unknown option $1."
652068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            exit 1
662068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project            ;;
672068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project    esac
682068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project    shift
692068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectdone
702068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
712068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectif [ -z "$KERNEL" -o -z "$RAMDISK" -o -z "$GENEXT2FS" -o -z "$TMPDIR" -o \
722068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project     -z "$OUTPUT" ]; then
732068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project    echo "Missing required arguments."
742068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project    exit 1
752068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectfi
762068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
772068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectif ! [ -x "$GENEXT2FS" -a -f "$RAMDISK" -a -f "$KERNEL" ]; then
782068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project    echo "Must provide path to a valid genext2fs binary."
792068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project    exit 1
802068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectfi
812068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
822068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectrm -rf $TMPDIR
832068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectmkdir -p $TMPDIR
842068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
852068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectecho -n "$CMDLINE" > $TMPDIR/cmdline
862068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectcp -f $KERNEL $TMPDIR/kernel
872068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectcp -f $RAMDISK $TMPDIR/ramdisk
882068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
892068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectif [ -f "$GRUBCONF" ]; then
902068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project    mkdir -p $TMPDIR/boot/grub
912068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project    cp -f $GRUBCONF $TMPDIR/boot/grub/menu.lst
922068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectfi
932068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
942068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectnum_blocks=`du -sk $TMPDIR | tail -n1 | awk '{print $1;}'`
952068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
962068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project# add 1%
972068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectextra=`expr $num_blocks / 100`
982068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectreserve=10
992068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project[ $extra -lt $reserve ] && extra=$reserve
1002068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
1012068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectnum_blocks=`expr $num_blocks + $extra`
1022068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectnum_inodes=`find $TMPDIR | wc -l`
1032068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
1042068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project$GENEXT2FS -d $TMPDIR -b $num_blocks -N $num_inodes -m 0 $OUTPUT
1052068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Project
1062068259fff846977bdd4262fa27ea6cb81d35a78The Android Open Source Projectexit 0
107