-
Notifications
You must be signed in to change notification settings - Fork 0
/
rv64emu_run.py
executable file
·90 lines (83 loc) · 2 KB
/
rv64emu_run.py
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import os
import subprocess
# ROOT PATH
SDK_ROOT = os.getcwd()
OPENSBI_ROOT = os.path.join(SDK_ROOT, "opensbi")
BUSYBOX_ROOT = os.path.join(SDK_ROOT, "busybox-1_36_stable")
LINUX_ROOT = os.path.join(SDK_ROOT, "linux")
# IMAGE PATH
LINUX_CONFIG = os.path.join(SDK_ROOT, "rv64emu_linux_empty_rootfs_defconfig")
LINUX_BIN = os.path.join(LINUX_ROOT, "arch", "riscv", "boot", "Image")
OPENSBI_ELF = os.path.join(
OPENSBI_ROOT, "build", "platform", "generic", "firmware", "fw_payload.elf"
)
DTS_FILE = os.path.join(SDK_ROOT, "dts", "rv64emu-signal-128m")
############################################
# You need to modify the following path according to your own environment
# RV64EMU
RV64EMU = "/home/leesum/workhome/riscv64-emu"
# CROSS_COMPILE
CROSS_COMPILE = "/opt/riscv-linux/bin/riscv64-unknown-linux-gnu-"
############################################
# Build Linux
subprocess.run(
[
"cp",
LINUX_CONFIG,
os.path.join(LINUX_ROOT, "arch", "riscv", "configs"),
]
)
subprocess.run(
[
"make",
"-C",
LINUX_ROOT,
"ARCH=riscv",
f"CROSS_COMPILE={CROSS_COMPILE}",
LINUX_CONFIG.split("/")[-1],
]
)
subprocess.run(
[
"make",
"-C",
LINUX_ROOT,
"ARCH=riscv",
f"CROSS_COMPILE={CROSS_COMPILE}",
"-j",
str(os.cpu_count()),
]
)
# Build dts
subprocess.run(
["dtc", "-I", "dts", "-O", "dtb", f"{DTS_FILE}.dts", "-o", f"{DTS_FILE}.dtb"]
)
# Build opensbi with linux payload
os.chdir(OPENSBI_ROOT)
subprocess.run(["make", "clean"])
subprocess.run(
[
"make",
"PLATFORM=generic",
f"CROSS_COMPILE={CROSS_COMPILE}",
f"FW_PAYLOAD_PATH={LINUX_BIN}",
f"FW_FDT_PATH={DTS_FILE}.dtb",
"-j",
str(os.cpu_count()),
]
)
# Run rv64emu
os.chdir(RV64EMU)
subprocess.run(
[
"cargo",
"run",
"--release",
"--example=linux_system",
"--",
"--img",
OPENSBI_ELF,
"--num-harts",
"1",
]
)