1*1800ed4dSAndrew Jeffery#!/bin/sh
2*1800ed4dSAndrew Jeffery
3*1800ed4dSAndrew Jefferyset -eu
4*1800ed4dSAndrew Jeffery
5*1800ed4dSAndrew Jefferyprint_help() {
6*1800ed4dSAndrew Jeffery    script_name=$(basename $0)
7*1800ed4dSAndrew Jeffery    echo NAME
8*1800ed4dSAndrew Jeffery    echo '\t'$script_name: Assemble an OpenBMC eMMC image that can be booted under QEMU
9*1800ed4dSAndrew Jeffery    echo
10*1800ed4dSAndrew Jeffery    echo SYNOPSYS
11*1800ed4dSAndrew Jeffery    echo '\t'$script_name '<TARGET>' '<BUILDDIR>' '[IMAGESIZE]'
12*1800ed4dSAndrew Jeffery    echo
13*1800ed4dSAndrew Jeffery    echo DESCRIPTION
14*1800ed4dSAndrew Jeffery    echo '\t''TARGET':'\t\t'The name of the target machine, used to locate the required images.
15*1800ed4dSAndrew Jeffery    echo '\t''BUILDDIR':'\t'The path to the OpenBMC build directory.
16*1800ed4dSAndrew Jeffery    echo '\t''IMAGESIZE':'\t'The output image size, may be specified with units. Defaults to 16G.
17*1800ed4dSAndrew Jeffery    echo
18*1800ed4dSAndrew Jeffery    echo EXAMPLE:
19*1800ed4dSAndrew Jeffery    echo '\t'$script_name 'p10bmc' '~/src/openbmc/openbmc/build/p10bmc'
20*1800ed4dSAndrew Jeffery}
21*1800ed4dSAndrew Jeffery
22*1800ed4dSAndrew Jefferyif [ $# -eq 0 ]
23*1800ed4dSAndrew Jefferythen
24*1800ed4dSAndrew Jeffery    print_help
25*1800ed4dSAndrew Jeffery    exit 1
26*1800ed4dSAndrew Jefferyfi
27*1800ed4dSAndrew Jeffery
28*1800ed4dSAndrew Jefferyif [ "$1" = "-h" -o "$1" = "--help" ]
29*1800ed4dSAndrew Jefferythen
30*1800ed4dSAndrew Jeffery    print_help
31*1800ed4dSAndrew Jeffery    exit 0
32*1800ed4dSAndrew Jefferyfi
33*1800ed4dSAndrew Jeffery
34*1800ed4dSAndrew Jefferyif [ $# -lt 2 ]
35*1800ed4dSAndrew Jefferythen
36*1800ed4dSAndrew Jeffery    print_help
37*1800ed4dSAndrew Jeffery    exit 1
38*1800ed4dSAndrew Jefferyfi
39*1800ed4dSAndrew Jeffery
40*1800ed4dSAndrew Jefferyset -x
41*1800ed4dSAndrew Jeffery
42*1800ed4dSAndrew Jefferytarget="$1"
43*1800ed4dSAndrew Jefferybuild_dir="$2"
44*1800ed4dSAndrew Jefferyimage_size=${3:-16G}
45*1800ed4dSAndrew Jeffery
46*1800ed4dSAndrew Jefferyfw_dir=${build_dir}/tmp/deploy/images/${target}
47*1800ed4dSAndrew Jefferywicxz="${fw_dir}/obmc-phosphor-image-${target}.wic.xz"
48*1800ed4dSAndrew Jefferymmc="mmc-${target}.img"
49*1800ed4dSAndrew Jeffery
50*1800ed4dSAndrew Jefferydd of=$mmc if=/dev/zero bs=1M count=128
51*1800ed4dSAndrew Jefferydd of=$mmc if=${fw_dir}/u-boot-spl.bin conv=notrunc
52*1800ed4dSAndrew Jefferydd of=$mmc if=${fw_dir}/u-boot.bin conv=notrunc bs=1K seek=64
53*1800ed4dSAndrew Jefferyxzdec $wicxz | dd of=$mmc conv=notrunc bs=1M seek=2
54*1800ed4dSAndrew Jefferytruncate --size ${image_size} $mmc
55*1800ed4dSAndrew Jeffery
56*1800ed4dSAndrew Jefferyset +x
57*1800ed4dSAndrew Jeffery
58*1800ed4dSAndrew Jefferyecho
59*1800ed4dSAndrew Jefferyecho For an AST2600-based machine, invoke QEMU with the following parameters:
60*1800ed4dSAndrew Jefferyecho
61*1800ed4dSAndrew Jefferyecho '\t'-drive file=$(realpath ${mmc}),if=sd,format=raw,index=2
62