blob: fd2b14f3afe8f49741d1ceea32761c5b42c2d8d0 [file] [log] [blame]
#!/bin/sh
set -eu
print_help() {
script_name=$(basename $0)
echo NAME
echo '\t'$script_name: Assemble an OpenBMC eMMC image that can be booted under QEMU
echo
echo SYNOPSYS
echo '\t'$script_name '<TARGET>' '<BUILDDIR>' '[IMAGESIZE]'
echo
echo DESCRIPTION
echo '\t''TARGET':'\t\t'The name of the target machine, used to locate the required images.
echo '\t''BUILDDIR':'\t'The path to the OpenBMC build directory.
echo '\t''IMAGESIZE':'\t'The output image size, may be specified with units. Defaults to 16G.
echo
echo EXAMPLE:
echo '\t'$script_name 'p10bmc' '~/src/openbmc/openbmc/build/p10bmc'
}
detect_xzdec() {
if command -v xz >/dev/null
then
echo xz -dc
elif command -v xzdec >/dev/null
then
echo xzdec
fi
}
if [ $# -eq 0 ]
then
print_help
exit 1
fi
if [ "$1" = "-h" -o "$1" = "--help" ]
then
print_help
exit 0
fi
if [ $# -lt 2 ]
then
print_help
exit 1
fi
XZDEC=$(detect_xzdec)
if [ -z "$XZDEC" ]; then
echo >&2 "XZ decompress is not available (xz or xzdec). Stopping."
exit 1
fi
set -x
target="$1"
build_dir="$2"
image_size=${3:-16G}
fw_dir=${build_dir}/tmp/deploy/images/${target}
wicxz="${fw_dir}/obmc-phosphor-image-${target}.wic.xz"
mmc="mmc-${target}.img"
dd of=$mmc if=/dev/zero bs=1M count=128
dd of=$mmc if=${fw_dir}/u-boot-spl.bin conv=notrunc
dd of=$mmc if=${fw_dir}/u-boot.bin conv=notrunc bs=1K seek=64
${XZDEC} $wicxz | dd of=$mmc conv=notrunc bs=1M seek=2
truncate --size ${image_size} $mmc
set +x
echo
echo For an AST2600-based machine, invoke QEMU with the following parameters:
echo
echo '\t'-drive file=$(realpath ${mmc}),if=sd,format=raw,index=2