The Android Open Source Project | 2068259 | 2009-03-03 19:29:32 -0800 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
| 3 | KERNEL= |
| 4 | RAMDISK= |
| 5 | CMDLINE= |
| 6 | GENEXT2FS= |
| 7 | GRUBCONF= |
| 8 | TMPDIR= |
| 9 | OUTPUT= |
| 10 | |
| 11 | while [ $# -gt 0 ]; do |
| 12 | case $1 in |
| 13 | --kernel) |
| 14 | KERNEL=$2 |
| 15 | shift |
| 16 | ;; |
| 17 | |
| 18 | --ramdisk) |
| 19 | RAMDISK=$2 |
| 20 | shift |
| 21 | ;; |
| 22 | |
| 23 | --cmdline) |
| 24 | CMDLINE=$2 |
| 25 | shift |
| 26 | ;; |
| 27 | |
| 28 | --genext2fs) |
| 29 | GENEXT2FS=$2 |
| 30 | shift |
| 31 | ;; |
| 32 | |
| 33 | --tmpdir) |
| 34 | TMPDIR=$2 |
| 35 | shift |
| 36 | ;; |
| 37 | --grubconf) |
| 38 | GRUBCONF=$2 |
| 39 | shift |
| 40 | ;; |
| 41 | --output) |
| 42 | OUTPUT=$2 |
| 43 | shift |
| 44 | ;; |
| 45 | |
| 46 | --help) |
| 47 | echo "Usage: $0 OPTIONS" |
| 48 | echo "Create an ext2 image that contains everything necessary" |
| 49 | echo -e "to be the boot file system.\n" |
| 50 | echo "The following options exist:" |
| 51 | echo " --genext2fs <genext2fs> The location of genext2fs binary" |
| 52 | echo " --kernel <kernel> The kernel to boot" |
| 53 | echo " --ramdisk <ramdisk> The ramdisk to be used" |
| 54 | echo " --cmdline <cmdline> The command line to use" |
| 55 | echo " --grubconf <confile> The path to grub conf file" |
| 56 | echo " --tmpdir <tmpdir> The temporary dir where files"\ |
| 57 | "can be copied" |
| 58 | echo " --output <output> The filename of the output image" |
| 59 | echo |
| 60 | exit 0 |
| 61 | ;; |
| 62 | |
| 63 | *) |
| 64 | echo "Unknown option $1." |
| 65 | exit 1 |
| 66 | ;; |
| 67 | esac |
| 68 | shift |
| 69 | done |
| 70 | |
| 71 | if [ -z "$KERNEL" -o -z "$RAMDISK" -o -z "$GENEXT2FS" -o -z "$TMPDIR" -o \ |
| 72 | -z "$OUTPUT" ]; then |
| 73 | echo "Missing required arguments." |
| 74 | exit 1 |
| 75 | fi |
| 76 | |
| 77 | if ! [ -x "$GENEXT2FS" -a -f "$RAMDISK" -a -f "$KERNEL" ]; then |
| 78 | echo "Must provide path to a valid genext2fs binary." |
| 79 | exit 1 |
| 80 | fi |
| 81 | |
| 82 | rm -rf $TMPDIR |
| 83 | mkdir -p $TMPDIR |
| 84 | |
| 85 | echo -n "$CMDLINE" > $TMPDIR/cmdline |
| 86 | cp -f $KERNEL $TMPDIR/kernel |
| 87 | cp -f $RAMDISK $TMPDIR/ramdisk |
| 88 | |
| 89 | if [ -f "$GRUBCONF" ]; then |
| 90 | mkdir -p $TMPDIR/boot/grub |
| 91 | cp -f $GRUBCONF $TMPDIR/boot/grub/menu.lst |
| 92 | fi |
| 93 | |
| 94 | num_blocks=`du -sk $TMPDIR | tail -n1 | awk '{print $1;}'` |
| 95 | |
| 96 | # add 1% |
| 97 | extra=`expr $num_blocks / 100` |
| 98 | reserve=10 |
| 99 | [ $extra -lt $reserve ] && extra=$reserve |
| 100 | |
| 101 | num_blocks=`expr $num_blocks + $extra` |
| 102 | num_inodes=`find $TMPDIR | wc -l` |
| 103 | |
| 104 | $GENEXT2FS -d $TMPDIR -b $num_blocks -N $num_inodes -m 0 $OUTPUT |
| 105 | |
| 106 | exit 0 |