diff --git a/kernel/Makefile b/kernel/Makefile index 041ea02..1deeeac 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -12,73 +12,71 @@ # d = int | in_asm | ... QEMU debug info # mode = debug | release # LOG = off | error | warn | info | debug | trace -# smp SMP core number +# smp = 1 | 2 | ... SMP core number # board = fpga Only available on riscv32, build without bbl, run on board # | raspi3 Only available on aarch64, run on Raspberry Pi 3 Model B/B+ +# nommu Only available on riscv32, build for M-Mode, without MMU arch ?= riscv32 board ?= raspi3 mode ?= debug LOG ?= debug smp ?= 4 +nommu ?= target := $(arch)-blog_os kernel := target/$(target)/$(mode)/ucore bin := target/$(target)/$(mode)/kernel.bin bootimage := target/$(target)/bootimage.bin -user_bin_path := ../user/target/$(arch)-ucore/debug -user_bins := $(patsubst $(user_bin_path)/%.d, $(user_bin_path)/%, $(wildcard $(user_bin_path)/*.d)) -user_obj := build/$(arch)/user.o -SFSIMG := ../user/img/ucore-i386-pic.img - ### qemu options ### -ifeq ($(arch), x86_64) qemu_opts := \ - -drive format=raw,file=$(bootimage) \ - -drive format=raw,file=$(SFSIMG),media=disk,cache=writeback \ -smp cores=$(smp) \ - -serial mon:stdio \ - -device isa-debug-exit \ -nographic + +ifeq ($(arch), x86_64) +qemu_opts += \ + -drive format=raw,file=$(bootimage) \ + -drive format=raw,file="../user/img/ucore-i386-pic.img",media=disk,cache=writeback \ + -serial mon:stdio \ + -device isa-debug-exit + else ifeq ($(arch), riscv32) -qemu_opts := \ +qemu_opts += \ -machine virt \ - -kernel $(bin) \ - -nographic \ - -smp cores=$(smp) + -kernel $(bin) ifdef nommu -qemu_opts := $(qemu_opts) -cpu rv32imacu-nommu +qemu_opts += -cpu rv32imacu-nommu endif + else ifeq ($(arch), aarch64) -qemu_opts := \ +qemu_opts += \ -machine $(board) \ -serial null -serial mon:stdio \ - -nographic \ - -kernel $(bin) \ - -smp cores=$(smp) + -kernel $(bin) endif ifdef d -qemu_opts := $(qemu_opts) -d $(d) +qemu_opts += -d $(d) endif ### build args ### ifeq ($(arch), riscv32) ifeq ($(board), fpga) -features := $(features) no_bbl +features += no_bbl endif endif ifdef nommu -features := $(features) no_mmu +features += no_mmu +bbl_m_mode := --enable-boot-machine endif -features := $(features) board_$(board) +features += board_$(board) build_args := --target $(target).json --features "$(features)" ifeq ($(mode), release) -build_args := $(build_args) --release +build_args += --release endif @@ -146,6 +144,7 @@ else mkdir -p build && \ cd build && \ ../configure \ + $(bbl_m_mode) \ --with-arch=rv32imac \ --disable-fp-emulation \ --host=riscv64-unknown-elf \ @@ -167,12 +166,6 @@ else @CC=$(cc) cargo xbuild $(build_args) endif -# make user.o from binary files -$(user_obj): $(user_bins) - @cd $(user_bin_path) && \ - $(ld) -o $(abspath $@) $(patsubst %, -b binary %, $(notdir $(user_bins))) - - ### install ### ifeq ($(board), raspi3)