You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Makefile
		
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Makefile
		
	
| TARGET := riscv64gc-unknown-none-elf
 | |
| KERNEL_ENTRY := 0x80200000
 | |
| MODE := release
 | |
| KERNEL_ELF := target/$(TARGET)/$(MODE)/os
 | |
| KERNEL_BIN := $(KERNEL_ELF).bin
 | |
| SYMBOL_MAP := target/system.map
 | |
| QEMU_CMD_PATH := ../../tools/qemu-system-riscv64
 | |
| QEMU_PID = $(shell ps aux | grep "[q]emu-system' | awk '{print $$2}")
 | |
| OBJDUMP := rust-objdump --arch-name=riscv64
 | |
| OBJCOPY := rust-objcopy --binary-architecture=riscv64
 | |
| 
 | |
| RUST_FLAGS := -Clink-arg=-Tsrc/linker.ld  # 使用我们自己的链接脚本
 | |
| RUST_FLAGS += -Cforce-frame-pointers=yes  # 强制编译器生成帧指针
 | |
| RUST_FLAGS:=$(strip ${RUST_FLAGS})
 | |
| 
 | |
| # 编译elf文件
 | |
| build_elf: clean
 | |
| 	CARGO_BUILD_RUSTFLAGS="$(RUST_FLAGS)" \
 | |
|  	cargo build --$(MODE) --target=$(TARGET)
 | |
| 
 | |
| # 导出一个符号表, 供我们查看
 | |
| $(SYMBOL_MAP):build_elf
 | |
| 	nm $(KERNEL_ELF) | sort > $(SYMBOL_MAP)
 | |
| 
 | |
| # 丢弃内核可执行elf文件中的元数据得到内核镜像
 | |
| $(KERNEL_BIN): build_elf
 | |
| 	@$(OBJCOPY) $(KERNEL_ELF) --strip-all -O binary $@
 | |
| 
 | |
| 
 | |
| debug:build_elf $(KERNEL_BIN) $(SYMBOL_MAP)
 | |
| 	$(QEMU_CMD_PATH) \
 | |
| 		-machine virt \
 | |
| 		-display none \
 | |
| 		-daemonize \
 | |
| 		-bios ../../bootloader/rustsbi-qemu.bin \
 | |
| 		-device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY) \
 | |
| 		-s -S
 | |
| 
 | |
| run:build_elf $(KERNEL_BIN) $(SYMBOL_MAP) kill
 | |
| 	$(QEMU_CMD_PATH) \
 | |
| 		-machine virt \
 | |
| 		-nographic \
 | |
| 		-bios ../../bootloader/rustsbi-qemu.bin \
 | |
| 		-device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY)
 | |
| 
 | |
| clean:
 | |
| 	rm -rf ./target* && rm -rf ./src/link_app.S
 | |
| 
 | |
| kill:
 | |
| 	-kill -9 $(QEMU_PID)
 | |
| 
 |