-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
210 lines (156 loc) · 6.48 KB
/
Makefile
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
default: xv6dist linuxdist bootloaderdist
update:
git submodule update --remote
build:
mkdir -p build
# xv6
###########
build/xv6:
mkdir -p build/xv6
xv6dist: build/xv6/kernel.coe build/xv6/fs.coe build/xv6/bootloader.coe build/xv6/fs.img.bin
cd build; zip -r xv6.zip xv6
# stager for xv6
toolchain/bootloader/xv6/build/bootloader: toolchain/bootloader/xv6
cd toolchain/bootloader/xv6; make
build/xv6/bootloader.elf: toolchain/bootloader/xv6/build/bootloader build/xv6
cp toolchain/bootloader/xv6/build/bootloader build/xv6/bootloader.elf
build/xv6/bootloader.bin: build/xv6/bootloader.elf
yokyo_elf2bin build/xv6/bootloader.elf build/xv6/bootloader.bin
build/xv6/bootloader.coe: build/xv6/bootloader.bin build/xv6
yokyo_bin2coe build/xv6/bootloader.bin > build/xv6/bootloader.coe
# fs
xv6-riscv/fs.img:
cd xv6-riscv; make fs.img
build/xv6/fs.bin: xv6-riscv/fs.img build/xv6
cp xv6-riscv/fs.img build/xv6/fs.bin
build/xv6/fs.coe: build/xv6/fs.bin build/xv6
yokyo_bin2coe build/xv6/fs.bin > build/xv6/fs.coe
build/xv6/fs.img.bin: build/xv6/fs.bin build/xv6
yokyo_bin2flash build/xv6/fs.bin build/xv6/fs.img.bin 4096
# kernel
xv6-riscv/kernel/kernel: xv6-riscv
cd xv6-riscv; make kernel/kernel
build/xv6/kernel.elf: xv6-riscv/kernel/kernel build/xv6
cp xv6-riscv/kernel/kernel build/xv6/kernel.elf
build/xv6/kernel.bin: build/xv6/kernel.elf
yokyo_elf2bin build/xv6/kernel.elf build/xv6/kernel.bin
build/xv6/kernel.coe: build/xv6/kernel.bin build/xv6
yokyo_bin2coe build/xv6/kernel.bin > build/xv6/kernel.coe
# linux
###########
build/linux:
mkdir -p build/linux
linuxdist: build/linux/kernel.img.bin
cd build; zip -r linux.zip linux
FORCE1:
linux/arch/riscv/boot/Image: FORCE1 linux/ busybox/initramfs.cpio.gz
cd linux; make ARCH=riscv CROSS_COMPILE=riscv32-unknown-linux-gnu- vmlinux Image -j 4
FORCE2:
opensbi/build/platform/qemu/virt/firmware/fw_payload.elf: FORCE2 linux/arch/riscv/boot/Image
cd opensbi; make CROSS_COMPILE=riscv32-unknown-elf- PLATFORM=qemu/virt PLATFORM_RISCV_ABI=ilp32 PLATFORM_RISCV_ISA=rv32ima FW_PAYLOAD_PATH=../linux/arch/riscv/boot/Image
linux/.config: conf/linux.config
cp conf/linux.config linux/.config
configure:
cp conf/linux.config linux/.config
cd linux; make ARCH=riscv CROSS_COMPILE=riscv32-unknown-linux-gnu- menuconfig
cp linux/.config conf/linux.config
build/linux/kernel.elf: opensbi/build/platform/qemu/virt/firmware/fw_payload.elf build/linux
cp opensbi/build/platform/qemu/virt/firmware/fw_payload.elf build/linux/kernel.elf
build/linux/kernel.bin: build/linux/kernel.elf
yokyo_elf2bin build/linux/kernel.elf build/linux/kernel.bin
build/linux/kernel.img.bin: build/linux/kernel.bin
yokyo_bin2flash build/linux/kernel.bin build/linux/kernel.img.bin 512
# tests
run-linux: build/linux/kernel.elf
sudo qemu-system-riscv32 \
-nographic \
-smp 1 \
-machine virt \
-append "console=ttyS0" \
-kernel opensbi/build/platform/qemu/virt/firmware/fw_payload.elf \
-trace events=trace-events,file=trace.log
run-linux-gdb: build/linux/kernel.elf
sudo qemu-system-riscv32 \
-nographic \
-smp 1 \
-machine virt \
-append "console=ttyS0" \
-kernel opensbi/build/platform/qemu/virt/firmware/fw_payload.elf \
-trace events=trace-events,file=trace.log \
-S -gdb tcp::11451
dumpdtb: busybox/initramfs.cpio.gz opensbi/build/platform/qemu/virt/firmware/fw_payload.elf
sudo qemu-system-riscv32 \
-nographic \
-machine virt \
-machine dumpdtb=board.dtb \
-append "console=ttyS0" \
-kernel opensbi/build/platform/qemu/virt/firmware/fw_payload.elf \
-trace events=trace-events,file=trace.log
# bootloader
###########
build/bootloader:
mkdir -p build/bootloader
bootloaderdist: build/bootloader/qemu.coe build/bootloader/board.coe
cd build; zip -r bootloader.zip bootloader
FORCE3:
toolchain/bootloader/linux/build/bootloader_qemu.elf: toolchain/bootloader/linux FORCE3
cd toolchain/bootloader/linux; make
toolchain/bootloader/linux/build/bootloader_board.elf: toolchain/bootloader/linux FORCE3
cd toolchain/bootloader/linux; make
build/bootloader/qemu.elf: toolchain/bootloader/linux/build/bootloader_qemu.elf build/bootloader
cp toolchain/bootloader/linux/build/bootloader_qemu.elf build/bootloader/qemu.elf
build/bootloader/qemu.bin: build/bootloader/qemu.elf
yokyo_elf2bin build/bootloader/qemu.elf build/bootloader/qemu.bin
build/bootloader/qemu.coe: build/bootloader/qemu.bin
yokyo_bin2coe build/bootloader/qemu.bin > build/bootloader/qemu.coe
build/bootloader/board.elf: toolchain/bootloader/linux/build/bootloader_board.elf build/linux
cp toolchain/bootloader/linux/build/bootloader_board.elf build/bootloader/board.elf
build/bootloader/board.bin: build/bootloader/board.elf
yokyo_elf2bin build/bootloader/board.elf build/bootloader/board.bin
build/bootloader/board.coe: build/bootloader/board.bin
yokyo_bin2coe build/bootloader/board.bin > build/bootloader/board.coe
# tests
run-bootloader: build/bootloader/qemu.elf build/linux/kernel.img.bin
qemu-system-riscv32 \
-machine virt \
-bios none \
-smp 1 \
-nographic \
-kernel build/bootloader/qemu.elf \
-drive file=build/linux/kernel.img.bin,if=none,format=raw,id=x0 \
-device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 \
-trace events=trace-events,file=trace.log
run-bootloader-gdb: build/bootloader/qemu.elf build/linux/kernel.img.bin
qemu-system-riscv32 \
-machine virt \
-bios none \
-smp 1 \
-nographic \
-kernel build/bootloader/qemu.elf \
-drive file=build/linux/kernel.bin,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 \
-S -gdb tcp::11451
# busybox
###########
busybox/.config: conf/busybox.config
cp conf/busybox.config busybox/.config
busybox/_install: busybox/.config
cd busybox; make ARCH=riscv CROSS_COMPILE=riscv32-unknown-linux-gnu- CFLAGS="-mabi=ilp32 -march=rv32ima" install
busybox/initramfs.cpio.gz busybox/rootfs.img: busybox/.config busybox/_install busybox/scripts/buildfs.sh
./busybox/scripts/buildfs.sh
# utils
###########
gdb:
riscv32-unknown-elf-gdb
install:
cd qemu; ./configure --target-list=riscv32-softmmu; make -j 4; sudo make install
cd riscv-gnu-toolchain; ./configure --prefix=/opt/riscv32 --with-arch=rv32ima --with-abi=ilp32; make newlib -j 4; make linux -j 4
cd toolchain; pip install . --upgrade
clean:
rm -rf build
cd linux; make clean ARCH=riscv CROSS_COMPILE=riscv32-unknown-linux-gnu-;
cd linux; rm arch/riscv/boot/Image
cd busybox; rm rootfs.img; make clean
cd opensbi; make clean
cd xv6-riscv; make clean
cd toolchain/bootloader/xv6; make clean
cd toolchain/bootloader/linux; make clean