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