You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							70 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							70 lines
						
					
					
						
							1.8 KiB
						
					
					
				# Building
 | 
						|
TARGET := riscv64gc-unknown-none-elf
 | 
						|
MODE := release
 | 
						|
KERNEL_ELF := target/$(TARGET)/$(MODE)/os
 | 
						|
KERNEL_BIN := $(KERNEL_ELF).bin
 | 
						|
KERNEL_ENTRY_PA := 0x80020000
 | 
						|
DISASM_TMP := target/$(TARGET)/$(MODE)/asm
 | 
						|
 | 
						|
# BOARD
 | 
						|
BOARD		?= qemu
 | 
						|
SBI			?= rustsbi
 | 
						|
BOOTLOADER	:= ../bootloader/$(SBI)-$(BOARD).bin
 | 
						|
 | 
						|
# Run K210
 | 
						|
K210-SERIALPORT	= /dev/ttyUSB0
 | 
						|
K210-BURNER		= ../tools/kflash.py
 | 
						|
 | 
						|
# Binutils
 | 
						|
OBJDUMP := rust-objdump --arch-name=riscv64
 | 
						|
OBJCOPY := rust-objcopy --binary-architecture=riscv64
 | 
						|
 | 
						|
# Disassembly
 | 
						|
DISASM ?= -x
 | 
						|
 | 
						|
build: $(KERNEL_BIN)
 | 
						|
 | 
						|
$(KERNEL_BIN): kernel
 | 
						|
	@$(OBJCOPY) $(KERNEL_ELF) --strip-all -O binary $@
 | 
						|
 | 
						|
kernel:
 | 
						|
	@cd ../user && make build
 | 
						|
	@cargo build --release
 | 
						|
 | 
						|
clean:
 | 
						|
	@cargo clean
 | 
						|
 | 
						|
disasm: kernel
 | 
						|
	@$(OBJDUMP) $(DISASM) $(KERNEL_ELF) | less
 | 
						|
 | 
						|
disasm-vim: kernel
 | 
						|
	@$(OBJDUMP) $(DISASM) $(KERNEL_ELF) > $(DISASM_TMP)
 | 
						|
	@vim $(DISASM_TMP)
 | 
						|
	@rm $(DISASM_TMP)
 | 
						|
 | 
						|
run: run-inner
 | 
						|
 | 
						|
run-inner: build
 | 
						|
ifeq ($(BOARD),qemu)
 | 
						|
	@qemu-system-riscv64 \
 | 
						|
		-machine virt \
 | 
						|
		-nographic \
 | 
						|
		-bios $(BOOTLOADER) \
 | 
						|
		-device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA)
 | 
						|
else
 | 
						|
	@cp $(BOOTLOADER) $(BOOTLOADER).copy
 | 
						|
	@dd if=$(KERNEL_BIN) of=$(BOOTLOADER).copy bs=128K seek=1
 | 
						|
	@mv $(BOOTLOADER).copy $(KERNEL_BIN)
 | 
						|
	@sudo chmod 777 $(K210-SERIALPORT)
 | 
						|
	python3 $(K210-BURNER) -p $(K210-SERIALPORT) -b 1500000 $(KERNEL_BIN)
 | 
						|
	miniterm --eol LF --dtr 0 --rts 0 --filter direct $(K210-SERIALPORT) 115200
 | 
						|
endif
 | 
						|
 | 
						|
debug: build
 | 
						|
	@tmux new-session -d \
 | 
						|
		"qemu-system-riscv64 -machine virt -nographic -bios $(BOOTLOADER) -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) -s -S" && \
 | 
						|
		tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \
 | 
						|
		tmux -2 attach-session -d
 | 
						|
 | 
						|
.PHONY: build kernel clean disasm disasm-vim run-inner
 |