1#! /bin/sh 2 3## @file 4# 5# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR> 6# 7# This program and the accompanying materials 8# are licensed and made available under the terms and conditions of the BSD License 9# which accompanies this distribution. The full text of the license may be found at 10# http://opensource.org/licenses/bsd-license.php 11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13# 14# 15## 16 17# Set up environment at fisrt. 18 19if [ -z "$EDK_TOOLS_PATH" ] 20then 21export BASETOOLS_DIR=$WORKSPACE/Conf/BaseToolsSource/Source/C/bin 22else 23export BASETOOLS_DIR=$EDK_TOOLS_PATH/Source/C/bin 24fi 25 26export BOOTSECTOR_BIN_DIR=$WORKSPACE/DuetPkg/BootSector/bin 27export DISK_LABEL=DUET 28export PROCESS_MARK=TRUE 29 30if [ \ 31 -z "$*" -o \ 32 "$*" = "-?" -o \ 33 "$*" = "-h" -o \ 34 "$*" = "--help" \ 35 ] 36then 37 echo "Usage: CreateBootDisk [usb|floppy|ide|file] MediaPath DevicePath [FAT12|FAT16|FAT32] [IA32|X64] [GCC44|UNIXGCC]" 38 echo "e.g. : CreateBootDisk floppy /media/floppy0 /dev/fd0 FAT12 IA32" 39 PROCESS_MARK=FALSE 40fi 41 42case "$5" in 43 IA32) 44 export PROCESSOR=IA32 45 ;; 46 X64) 47 export PROCESSOR=X64 48 ;; 49 *) 50 echo Invalid Architecture string, should be only IA32 or X64 51 return 1 52esac 53 54if [ -z "$6" ] 55then 56 TOOLCHAIN=GCC44 57else 58 TOOLCHAIN=$6 59fi 60 61export BUILD_DIR=$WORKSPACE/Build/DuetPkg$PROCESSOR/DEBUG_$TOOLCHAIN 62 63 64export EFI_BOOT_MEDIA=$2 65export EFI_BOOT_DEVICE=$3 66 67if [ "$PROCESS_MARK" = TRUE ] 68then 69 case "$1" in 70 floppy) 71 if [ "$4" = FAT12 ] 72 then 73 echo Start to create floppy boot disk ... 74 echo Format $EFI_BOOT_MEDIA ... 75 ## Format floppy disk 76 umount $EFI_BOOT_MEDIA 77 mkfs.msdos $EFI_BOOT_DEVICE 78 mount $EFI_BOOT_DEVICE $EFI_BOOT_MEDIA 79 echo Create boot sector ... 80 ## Linux version of GenBootSector has not pass build yet. 81 $BASETOOLS_DIR/GnuGenBootSector -i $EFI_BOOT_DEVICE -o FDBs.com 82 cp $BOOTSECTOR_BIN_DIR/bootsect.com FDBs-1.com 83 $BASETOOLS_DIR/BootSectImage -g FDBs.com FDBs-1.com -f 84 $BASETOOLS_DIR/GnuGenBootSector -o $EFI_BOOT_DEVICE -i FDBs-1.com 85 rm FDBs-1.com 86 cp $BUILD_DIR/FV/Efildr $EFI_BOOT_MEDIA 87 88 mkdir -p $EFI_BOOT_MEDIA/efi 89 mkdir -p $EFI_BOOT_MEDIA/efi/boot 90 if [ "$5" = IA32 ] 91 then 92 cp $WORKSPACE/ShellBinPkg/UefiShell/Ia32/Shell.efi $EFI_BOOT_MEDIA/efi/boot/boot$5.efi 93 else 94 if [ "$5" = X64 ] 95 then 96 cp $WORKSPACE/ShellBinPkg/UefiShell/X64/Shell.efi $EFI_BOOT_MEDIA/efi/boot/boot$5.efi 97 else 98 echo Wrong Arch! 99 fi 100 fi 101 echo Done. 102 else 103 echo "Wrong FAT type $4 for floppy!" 104 fi 105 ;; 106 107 file) # CreateFile 108 if [ "$4" = FAT12 ] 109 then 110 echo "Start to create file boot disk ..." 111 dd bs=512 count=2880 if=/dev/zero of=$EFI_BOOT_MEDIA 112 mkfs.msdos -F 12 $EFI_BOOT_MEDIA 113 114 mcopy -i $EFI_BOOT_MEDIA $BUILD_DIR/FV/Efildr ::/Efildr 115 mmd -i $EFI_BOOT_MEDIA ::/efi ::/efi/boot 116 if [ "$5" = IA32 ] 117 then 118 mcopy -i $EFI_BOOT_MEDIA $WORKSPACE/ShellBinPkg/UefiShell/Ia32/Shell.efi ::/efi/boot/boot$5.efi 119 elif [ "$5" = X64 ] 120 then 121 mcopy -i $EFI_BOOT_MEDIA $WORKSPACE/ShellBinPkg/UefiShell/X64/Shell.efi ::/efi/boot/boot$5.efi 122 else 123 echo Wrong Arch! 124 fi 125 mdir -i $EFI_BOOT_MEDIA -s :: 126 127 ## Linux version of GenBootSector has not pass build yet. 128 $BASETOOLS_DIR/GnuGenBootSector -i $EFI_BOOT_MEDIA -o $EFI_BOOT_MEDIA.bs0 129 cp $BOOTSECTOR_BIN_DIR/bootsect.com $EFI_BOOT_MEDIA.bs1 130 $BASETOOLS_DIR/BootSectImage -g $EFI_BOOT_MEDIA.bs0 $EFI_BOOT_MEDIA.bs1 131 $BASETOOLS_DIR/GnuGenBootSector -o $EFI_BOOT_MEDIA -i $EFI_BOOT_MEDIA.bs1 132 rm $EFI_BOOT_MEDIA.bs[0-1] 133 echo Done. 134 else 135 echo "Wrong FAT type" $4 "for floppy!" 136 fi 137 ;; 138 139 usb) # CreateUsb 140 141 if [ "$4" = FAT16 ] 142 then 143 if [ "$6" = step2 ] 144 then 145 cp $BUILD_DIR/FV/Efildr16 $EFI_BOOT_MEDIA 146 mkdir $EFI_BOOT_MEDIA/efi/boot 147 if [ "$5" = IA32 ] 148 then 149 cp $WORKSPACE/ShellBinPkg/UefiShell/Ia32/Shell.efi $EFI_BOOT_MEDIA/efi/boot/boot$5.efi 150 else 151 if [ "$5" = X64 ] 152 then 153 cp $WORKSPACE/ShellBinPkg/UefiShell/X64/Shell.efi $EFI_BOOT_MEDIA/efi/boot/boot$5.efi 154 else 155 echo Wrong Arch! 156 fi 157 fi 158 echo "step2 Done!" 159 else 160 echo Format $EFI_BOOT_DEVICE ... 161 #Do format command. 162 echo Create boot sector ... 163 ## Linux version of GenBootSector & Bootsectimage has not pass build yet. 164 $BASETOOLS_DIR/GnuGenBootSector -i $EFI_BOOT_DEVICE -o UsbBs16.com 165 cp $BOOTSECTOR_BIN_DIR/bs16.com Bs16-1.com 166 $BASETOOLS_DIR/BootSectImage -g UsbBs16.com Bs16-1.com -f 167 $BASETOOLS_DIR/GnuGenBootSector -o $EFI_BOOT_DEVICE -i Bs16-1.com 168 rm Bs16-1.com 169 $BASETOOLS_DIR/GnuGenBootSector -m -o $EFI_BOOT_DEVICE -i $BOOTSECTOR_BIN_DIR/Mbr.com 170 echo Done. 171 echo PLEASE UNPLUG USB, THEN PLUG IT AGAIN TO DO STEP2! 172 fi 173 elif [ "$4" = FAT32 ] 174 then 175 if [ "$6" = step2 ] 176 then 177 cp $BUILD_DIR/FV/Efildr20 $EFI_BOOT_MEDIA 178 mkdir $EFI_BOOT_MEDIA/efi/boot 179 if [ "$5" = IA32 ] 180 then 181 cp $WORKSPACE/ShellBinPkg/UefiShell/Ia32/Shell.efi $EFI_BOOT_MEDIA/efi/boot/boot$5.efi 182 else 183 if [ "$5" = X64 ] 184 then 185 cp $WORKSPACE/ShellBinPkg/UefiShell/X64/Shell.efi $EFI_BOOT_MEDIA/efi/boot/boot$5.efi 186 else 187 echo Wrong Arch! 188 fi 189 fi 190 echo "step2 Done!" 191 else 192 echo Format $EFI_BOOT_DEVICE ... 193 #Do format command. 194 echo Create boot sector ... 195 ## Linux version of GenBootSector & Bootsectimage has not pass build yet. 196 $BASETOOLS_DIR/GnuGenBootSector -i $EFI_BOOT_DEVICE -o UsbBs32.com 197 cp $BOOTSECTOR_BIN_DIR/bs32.com Bs32-1.com 198 $BASETOOLS_DIR/BootSectImage -g UsbBs32.com Bs32-1.com -f 199 $BASETOOLS_DIR/GnuGenBootSector -o $EFI_BOOT_DEVICE -i Bs32-1.com 200 rm Bs32-1.com 201 $BASETOOLS_DIR/GnuGenBootSector -m -o $EFI_BOOT_DEVICE -i $BOOTSECTOR_BIN_DIR/Mbr.com 202 echo Done. 203 echo PLEASE UNPLUG USB, THEN PLUG IT AGAIN TO DO STEP2! 204 fi 205 else 206 echo "Wrong FAT type $1 for floppy!" 207 fi 208 209 ;; 210 211 ide) # CreateIde 212 echo "Not support yet!" 213 ;; 214 *) 215 echo "Arg1 should be [floppy | file | usb | ide] !" 216 217 esac 218fi 219