File: run_guest_kernel.sh

package info (click to toggle)
m1n1 1.5.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,468 kB
  • sloc: python: 42,002; ansic: 33,376; asm: 1,101; makefile: 271; xml: 177; sh: 116
file content (66 lines) | stat: -rwxr-xr-x 1,516 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/bin/sh
set -e

: ${TMPDIR:=$XDG_RUNTIME_DIR}
: ${TMPDIR:=/tmp}

if [ "$1" == "-k" ]; then
    kernel="$(realpath "$2")"
    shift 2
fi

if [ ! -d "$1" ]; then
    echo "Usage:"
    echo "  $0 <kernel build root> [kernel commandline] [initramfs]"
    exit 1
fi

kernel_base="$(realpath "$1")"
args="$2"
initramfs=""
shift 2

if [ "$1" == "--" ]; then
	shift
elif [ -n "$1" ]; then
    initramfs="$(realpath "$1")"
    shift
fi

if [ -z "$kernel" ]; then
    kernel="$kernel_base"/arch/arm64/boot/Image.gz
fi

base="$(dirname "$0")"

echo "Creating m1n1+kernel image"
cp "$base"/../../build/m1n1.bin "$TMPDIR/m1n1-linux.bin"
if [ -n "$args" ]; then
    echo "chosen.bootargs=$args" >>"$TMPDIR/m1n1-linux.bin"
fi

cat "$kernel_base"/arch/arm64/boot/dts/apple/*.dtb >>"$TMPDIR/m1n1-linux.bin"
if [[ "$kernel" == *.gz ]]; then
    cat "$kernel" >>"$TMPDIR/m1n1-linux.bin"
else
    gzip -c <"$kernel" >>"$TMPDIR/m1n1-linux.bin"
fi

if [ -n "$initramfs" ]; then
    initramfs_size=$(stat --printf='%s' "$initramfs")
    python3 - << EOF >>"$TMPDIR/m1n1-linux.bin"
import os, sys

magic = b'm1n1_initramfs'
size = int(${initramfs_size}).to_bytes(4, byteorder='little')
os.write(sys.stdout.fileno(), magic + size)
EOF
    cat "$initramfs" >>"$TMPDIR/m1n1-linux.bin"
fi

echo "Chainloading to updated m1n1..."
python3 "$base"/chainload.py -r "$base"/../../build/m1n1.bin
echo "Starting guest..."
exec python3 "$base"/run_guest.py \
    -c "load_system_map('$kernel_base/System.map')" "$@" \
    -r "$TMPDIR/m1n1-linux.bin"