diff --git a/.gitmodules b/.gitmodules index c245a1c..352e6b3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "riscv-fesvr"] path = riscv-fesvr url = https://github.com/riscv/riscv-fesvr.git +[submodule "riscv-qemu"] + path = riscv-qemu + url = git://github.com/riscv/riscv-qemu.git diff --git a/Makefile b/Makefile index 8e2cb44..7f528cb 100644 --- a/Makefile +++ b/Makefile @@ -13,11 +13,14 @@ toolchain_wrkdir := $(wrkdir)/riscv-gnu-toolchain toolchain_dest := $(CURDIR)/toolchain buildroot_srcdir := $(srcdir)/buildroot -buildroot_wrkdir := $(wrkdir)/buildroot -buildroot_tar := $(buildroot_wrkdir)/images/rootfs.tar - -sysroot_stamp := $(wrkdir)/.sysroot -sysroot := $(wrkdir)/sysroot +buildroot_initramfs_wrkdir := $(wrkdir)/buildroot_initramfs +buildroot_initramfs_tar := $(buildroot_initramfs_wrkdir)/images/rootfs.tar +buildroot_initramfs_config := $(confdir)/buildroot_initramfs_config +buildroot_initramfs_sysroot_stamp := $(wrkdir)/.buildroot_initramfs_sysroot +buildroot_initramfs_sysroot := $(wrkdir)/buildroot_initramfs_sysroot +buildroot_rootfs_wrkdir := $(wrkdir)/buildroot_rootfs +buildroot_rootfs_ext := $(buildroot_rootfs_wrkdir)/images/rootfs.ext4 +buildroot_rootfs_config := $(confdir)/buildroot_rootfs_config linux_srcdir := $(srcdir)/linux linux_wrkdir := $(wrkdir)/linux @@ -40,6 +43,12 @@ spike_srcdir := $(srcdir)/riscv-isa-sim spike_wrkdir := $(wrkdir)/riscv-isa-sim spike := $(spike_wrkdir)/prefix/bin/spike +qemu_srcdir := $(srcdir)/riscv-qemu +qemu_wrkdir := $(wrkdir)/riscv-qemu +qemu := $(qemu_wrkdir)/prefix/bin/qemu-system-riscv64 + +rootfs := $(wrkdir)/rootfs.bin + target := riscv64-unknown-linux-gnu .PHONY: all @@ -52,6 +61,7 @@ all: $(hex) $(toolchain_dest)/bin/$(target)-gcc: $(toolchain_srcdir) mkdir -p $(toolchain_wrkdir) + $(MAKE) -C $(linux_srcdir) O=$(dir $<) ARCH=riscv INSTALL_HDR_PATH=$(abspath $(toolchain_srcdir)/linux-headers) headers_install cd $(toolchain_wrkdir); $(toolchain_srcdir)/configure \ --prefix=$(toolchain_dest) \ --with-arch=$(ISA) \ @@ -60,17 +70,39 @@ $(toolchain_dest)/bin/$(target)-gcc: $(toolchain_srcdir) $(MAKE) -C $(toolchain_wrkdir) sed 's/^#define LINUX_VERSION_CODE.*/#define LINUX_VERSION_CODE 263682/' -i $(toolchain_dest)/sysroot/usr/include/linux/version.h -$(buildroot_tar): $(buildroot_srcdir) $(RISCV)/bin/$(target)-gcc - $(MAKE) -C $< RISCV=$(RISCV) PATH=$(PATH) O=$(buildroot_wrkdir) riscv64_defconfig - $(MAKE) -C $< RISCV=$(RISCV) PATH=$(PATH) O=$(buildroot_wrkdir) +$(buildroot_initramfs_wrkdir)/.config: $(buildroot_srcdir) + rm -rf $(dir $@) + mkdir -p $(dir $@) + cp $(buildroot_initramfs_config) $@ + $(MAKE) -C $< RISCV=$(RISCV) PATH=$(PATH) O=$(buildroot_initramfs_wrkdir) olddefconfig -.PHONY: buildroot-menuconfig -buildroot-menuconfig: $(buildroot_srcdir) - $(MAKE) -C $< O=$(buildroot_wrkdir) menuconfig +$(buildroot_initramfs_tar): $(buildroot_srcdir) $(buildroot_initramfs_wrkdir)/.config $(RISCV)/bin/$(target)-gcc $(buildroot_initramfs_config) + $(MAKE) -C $< RISCV=$(RISCV) PATH=$(PATH) O=$(buildroot_initramfs_wrkdir) -$(sysroot_stamp): $(buildroot_tar) - mkdir -p $(sysroot) - tar -xpf $< -C $(sysroot) --exclude ./dev --exclude ./usr/share/locale +.PHONY: buildroot_initramfs-menuconfig +buildroot_initramfs-menuconfig: $(buildroot_initramfs_wrkdir)/.config $(buildroot_srcdir) + $(MAKE) -C $(dir $<) O=$(buildroot_initramfs_wrkdir) menuconfig + $(MAKE) -C $(dir $<) O=$(buildroot_initramfs_wrkdir) savedefconfig + cp $(dir $<)/defconfig conf/buildroot_initramfs_config + +$(buildroot_rootfs_wrkdir)/.config: $(buildroot_srcdir) + rm -rf $(dir $@) + mkdir -p $(dir $@) + cp $(buildroot_rootfs_config) $@ + $(MAKE) -C $< RISCV=$(RISCV) PATH=$(PATH) O=$(buildroot_rootfs_wrkdir) olddefconfig + +$(buildroot_rootfs_ext): $(buildroot_srcdir) $(buildroot_rootfs_wrkdir)/.config $(RISCV)/bin/$(target)-gcc $(buildroot_rootfs_config) + $(MAKE) -C $< RISCV=$(RISCV) PATH=$(PATH) O=$(buildroot_rootfs_wrkdir) + +.PHONY: buildroot_rootfs-menuconfig +buildroot_rootfs-menuconfig: $(buildroot_rootfs_wrkdir)/.config $(buildroot_srcdir) + $(MAKE) -C $(dir $<) O=$(buildroot_rootfs_wrkdir) menuconfig + $(MAKE) -C $(dir $<) O=$(buildroot_rootfs_wrkdir) savedefconfig + cp $(dir $<)/defconfig conf/buildroot_rootfs_config + +$(buildroot_initramfs_sysroot_stamp): $(buildroot_initramfs_tar) + mkdir -p $(buildroot_initramfs_sysroot) + tar -xpf $< -C $(buildroot_initramfs_sysroot) --exclude ./dev --exclude ./usr/share/locale touch $@ $(linux_wrkdir)/.config: $(linux_defconfig) $(linux_srcdir) @@ -89,9 +121,9 @@ ifeq ($(ISA),$(filter rv32%,$(ISA))) $(MAKE) -C $(linux_srcdir) O=$(linux_wrkdir) ARCH=riscv olddefconfig endif -$(vmlinux): $(linux_srcdir) $(linux_wrkdir)/.config $(sysroot_stamp) +$(vmlinux): $(linux_srcdir) $(linux_wrkdir)/.config $(buildroot_initramfs_sysroot_stamp) $(MAKE) -C $< O=$(linux_wrkdir) \ - CONFIG_INITRAMFS_SOURCE="$(confdir)/initramfs.txt $(sysroot)" \ + CONFIG_INITRAMFS_SOURCE="$(confdir)/initramfs.txt $(buildroot_initramfs_sysroot)" \ CONFIG_INITRAMFS_ROOT_UID=$(shell id -u) \ CONFIG_INITRAMFS_ROOT_GID=$(shell id -g) \ ARCH=riscv \ @@ -102,7 +134,9 @@ $(vmlinux_stripped): $(vmlinux) .PHONY: linux-menuconfig linux-menuconfig: $(linux_wrkdir)/.config - $(MAKE) -C $(linux_srcdir) O=$(dir $<) ARCH=riscv menuconfig savedefconfig + $(MAKE) -C $(linux_srcdir) O=$(dir $<) ARCH=riscv menuconfig + $(MAKE) -C $(linux_srcdir) O=$(dir $<) ARCH=riscv savedefconfig + cp $(dir $<)/defconfig conf/linux_defconfig $(bbl): $(pk_srcdir) $(vmlinux_stripped) rm -rf $(pk_wrkdir) @@ -110,7 +144,7 @@ $(bbl): $(pk_srcdir) $(vmlinux_stripped) cd $(pk_wrkdir) && $