blob: fd2b14f3afe8f49741d1ceea32761c5b42c2d8d0 [file] [log] [blame]
Andrew Jeffery1800ed42021-09-27 10:24:33 +09301#!/bin/sh
2
3set -eu
4
5print_help() {
6 script_name=$(basename $0)
7 echo NAME
8 echo '\t'$script_name: Assemble an OpenBMC eMMC image that can be booted under QEMU
9 echo
10 echo SYNOPSYS
11 echo '\t'$script_name '<TARGET>' '<BUILDDIR>' '[IMAGESIZE]'
12 echo
13 echo DESCRIPTION
14 echo '\t''TARGET':'\t\t'The name of the target machine, used to locate the required images.
15 echo '\t''BUILDDIR':'\t'The path to the OpenBMC build directory.
16 echo '\t''IMAGESIZE':'\t'The output image size, may be specified with units. Defaults to 16G.
17 echo
18 echo EXAMPLE:
19 echo '\t'$script_name 'p10bmc' '~/src/openbmc/openbmc/build/p10bmc'
20}
21
Joseph Reynolds9949cc72021-12-17 11:40:40 -060022detect_xzdec() {
23 if command -v xz >/dev/null
24 then
25 echo xz -dc
26 elif command -v xzdec >/dev/null
27 then
28 echo xzdec
29 fi
30}
31
Andrew Jeffery1800ed42021-09-27 10:24:33 +093032if [ $# -eq 0 ]
33then
34 print_help
35 exit 1
36fi
37
38if [ "$1" = "-h" -o "$1" = "--help" ]
39then
40 print_help
41 exit 0
42fi
43
44if [ $# -lt 2 ]
45then
46 print_help
47 exit 1
48fi
49
Joseph Reynolds9949cc72021-12-17 11:40:40 -060050
51XZDEC=$(detect_xzdec)
52if [ -z "$XZDEC" ]; then
53 echo >&2 "XZ decompress is not available (xz or xzdec). Stopping."
54 exit 1
55fi
Konstantin Aladyshev5ec62082021-12-14 11:27:43 +030056
Andrew Jeffery1800ed42021-09-27 10:24:33 +093057set -x
58
59target="$1"
60build_dir="$2"
61image_size=${3:-16G}
62
63fw_dir=${build_dir}/tmp/deploy/images/${target}
64wicxz="${fw_dir}/obmc-phosphor-image-${target}.wic.xz"
65mmc="mmc-${target}.img"
66
67dd of=$mmc if=/dev/zero bs=1M count=128
68dd of=$mmc if=${fw_dir}/u-boot-spl.bin conv=notrunc
69dd of=$mmc if=${fw_dir}/u-boot.bin conv=notrunc bs=1K seek=64
Joseph Reynolds9949cc72021-12-17 11:40:40 -060070${XZDEC} $wicxz | dd of=$mmc conv=notrunc bs=1M seek=2
Andrew Jeffery1800ed42021-09-27 10:24:33 +093071truncate --size ${image_size} $mmc
72
73set +x
74
75echo
76echo For an AST2600-based machine, invoke QEMU with the following parameters:
77echo
78echo '\t'-drive file=$(realpath ${mmc}),if=sd,format=raw,index=2