From 5cd3c3d3dc0fda48c1983e55ef191691159e9301 Mon Sep 17 00:00:00 2001 From: John Hodge <tpg@mutabah.net> Date: Sun, 17 Mar 2019 17:07:59 +0800 Subject: [PATCH] Kernel - Working xargo kernel build (all modules I think) --- Kernel/Cargo.toml | 27 +++++++++ Kernel/Core/Cargo.toml | 10 +++ Kernel/Makefile-xargo | 84 ++++++++++++++++++++++++++ Kernel/Modules/block_cache/Cargo.toml | 10 +++ Kernel/Modules/blockcache/Cargo.toml | 11 ++++ Kernel/Modules/fs_extN/Cargo.toml | 10 +++ Kernel/Modules/fs_fat/Cargo.toml | 13 ++++ Kernel/Modules/fs_iso9660/Cargo.toml | 11 ++++ Kernel/Modules/gui/Cargo.toml | 11 ++++ Kernel/Modules/input_ps2/Cargo.toml | 11 ++++ Kernel/Modules/network/Cargo.toml | 12 ++++ Kernel/Modules/network/lib.rs | 1 - Kernel/Modules/nic_rtl8139/Cargo.toml | 11 ++++ Kernel/Modules/shared_map/Cargo.toml | 10 +++ Kernel/Modules/storage_ahci/Cargo.toml | 11 ++++ Kernel/Modules/storage_ata/Cargo.toml | 11 ++++ Kernel/Modules/storage_scsi/Cargo.toml | 9 +++ Kernel/Modules/syscalls/Cargo.toml | 12 ++++ Kernel/Modules/usb_core/Cargo.toml | 12 ++++ Kernel/Modules/usb_ohci/Cargo.toml | 11 ++++ Kernel/Modules/utf16/Cargo.toml | 10 +++ Kernel/Modules/video_vga/Cargo.toml | 10 +++ Kernel/Modules/virtio/Cargo.toml | 10 +++ Kernel/Modules/virtio/devices/mod.rs | 7 ++- Kernel/rundir/Makefile | 23 +++---- 25 files changed, 345 insertions(+), 13 deletions(-) create mode 100644 Kernel/Cargo.toml create mode 100644 Kernel/Core/Cargo.toml create mode 100644 Kernel/Makefile-xargo create mode 100644 Kernel/Modules/block_cache/Cargo.toml create mode 100644 Kernel/Modules/blockcache/Cargo.toml create mode 100644 Kernel/Modules/fs_extN/Cargo.toml create mode 100644 Kernel/Modules/fs_fat/Cargo.toml create mode 100644 Kernel/Modules/fs_iso9660/Cargo.toml create mode 100644 Kernel/Modules/gui/Cargo.toml create mode 100644 Kernel/Modules/input_ps2/Cargo.toml create mode 100644 Kernel/Modules/network/Cargo.toml create mode 100644 Kernel/Modules/nic_rtl8139/Cargo.toml create mode 100644 Kernel/Modules/shared_map/Cargo.toml create mode 100644 Kernel/Modules/storage_ahci/Cargo.toml create mode 100644 Kernel/Modules/storage_ata/Cargo.toml create mode 100644 Kernel/Modules/storage_scsi/Cargo.toml create mode 100644 Kernel/Modules/syscalls/Cargo.toml create mode 100644 Kernel/Modules/usb_core/Cargo.toml create mode 100644 Kernel/Modules/usb_ohci/Cargo.toml create mode 100644 Kernel/Modules/utf16/Cargo.toml create mode 100644 Kernel/Modules/video_vga/Cargo.toml create mode 100644 Kernel/Modules/virtio/Cargo.toml diff --git a/Kernel/Cargo.toml b/Kernel/Cargo.toml new file mode 100644 index 00000000..1017b5fb --- /dev/null +++ b/Kernel/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "main" +version = "0.0.0" + +[lib] +path = "main/main.rs" +crate-type = ["staticlib"] + +[dependencies] +kernel = { path = "Core" } +syscalls = { path = "Modules/syscalls" } +network = { path = "Modules/network" } +usb-core = { path = "Modules/usb_core" } + +fs_fat = { path = "Modules/fs_fat" } +fs_iso9660 = { path = "Modules/fs_iso9660" } +fs_extN = { path = "Modules/fs_extN" } + +virtio = { path = "Modules/virtio" } +storage-ata = { path = "Modules/storage_ata" } +storage-ahci = { path = "Modules/storage_ahci" } +input_ps2 = { path = "Modules/input_ps2" } +nic-rtl8139 = { path = "Modules/nic_rtl8139" } +usb-ohci = { path = "Modules/usb_ohci" } + +[target.'cfg(target_arch = "x86_64")'.dependencies] +#video-vga = { path = "Modules/video_vga" } diff --git a/Kernel/Core/Cargo.toml b/Kernel/Core/Cargo.toml new file mode 100644 index 00000000..e6902005 --- /dev/null +++ b/Kernel/Core/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "kernel" +version = "0.0.0" + +[lib] +path = "main.rs" + +[dependencies] +stack_dst = { path = "../../externals/crates.io/stack_dst", default-features = false } +tag_safe = "0.2" diff --git a/Kernel/Makefile-xargo b/Kernel/Makefile-xargo new file mode 100644 index 00000000..2cb7ab01 --- /dev/null +++ b/Kernel/Makefile-xargo @@ -0,0 +1,84 @@ +# +# +# +V ?= @ +-include ../common.mk + +-include BuildNum.$(ARCH).mk +BUILDNUM ?= 1 + +OBJDIR := .obj/$(ARCH)/ +OBJS := $(addprefix $(OBJDIR),start.ao log_cfg.ao libmain.a) + +ENV := RUST_VERSION="$(shell $(RUSTC) --version)" +ENV += TK_GITSPEC="$(shell git log -n 1 | head -n 1 | awk '{print $$2}')" +ENV += TK_VERSION="0.1" +ENV += TK_BUILD="$(shell hostname --fqdn):$(BUILDNUM)" + +LINKFLAGS := -T Core/arch/$(ARCH)/link.ld -Map $(OBJDIR)map.txt -g +LINKFLAGS += -z max-page-size=0x1000 # Reduces binary size +LINKFLAGS += --gc-sections # Prevents complaining about floating point methods +#LINKFLAGS += --print-gc-sections + +EXCLUDE_FEATURES := +ifeq ($(ARCH),amd64) +EXCLUDE_FEATURES := 3dnow avx avx2 sse sse2 sse3 sse4.1 sse4.2 mmx +endif + +XARGO := RUST_TARGET_PATH=$(abspath targets) $(XARGO) + +.PHONY: all dsm PHONY + +all: bin/kernel-$(ARCH).bin +dsm: bin/kernel-$(ARCH).bin.dsm + +# +# Final linking stage +# +bin/kernel-$(ARCH).bin: $(OBJS) Core/arch/$(ARCH)/link.ld + @mkdir -p bin/ + @echo [LD] -o $@ + $V$(LD) -o $@ $(OBJS) --no-whole-archive $(LINKFLAGS) +ifeq ($(ARCH),amd64) + $Vobjcopy $@ --only-keep-debug $@.debug + $Vobjcopy $@ -F elf32-i386 $@.elf32 + $V$(TRIPLE)-strip -g $@.elf32 +else + #$V$(TRIPLE)-strip $@ +endif + @echo "BUILDNUM := $$(( $(BUILDNUM) + 1 ))" > BuildNum.$(ARCH).mk + +# +# Disassembly +# +%.dsm: % + @echo "[OBJDUMP] >" $*.dsm + $V$(OBJDUMP) -s -C -S $* > $*.dsm + +# +# Invoke xargo to build the main part of the kernel +# - This includes all modules enabled in ./Cargo.toml +# +$(OBJDIR)libmain.a: PHONY targets/target-$(ARCH).json + @echo "[XARGO] . > $@" + $V$(ENV) $(XARGO) rustc --target=target-$(ARCH) --release -- -C target-feature=$(subst $(space),$(comma),$(EXCLUDE_FEATURES:%=-%)) + @mkdir -p $(dir $@) + @cp target/target-$(ARCH)/release/libmain.a $@ + +targets/target-$(ARCH).json: Core/arch/$(ARCH)/target.json + @mkdir -p $(dir $@) + $Vcp $< $@ + +$(OBJDIR)%.ao: Core/arch/$(ARCH)/%.asm + @echo [AS] -o $@ + @mkdir -p $(dir $@) + $Vnasm -o $@ $< -f elf64 -MD $@.d -MP +$(OBJDIR)%.ao: Core/arch/$(ARCH)/%.S + @echo [AS] -o $@ + @mkdir -p $(dir $@) + $V$(CC) -o $@ -c $< +# Log configuration +$(OBJDIR)log_cfg.ao: Core/log_cfg.S + @echo [AS] -o $@ + @mkdir -p $(dir $@) + $V$(CC) -o $@ -c $< diff --git a/Kernel/Modules/block_cache/Cargo.toml b/Kernel/Modules/block_cache/Cargo.toml new file mode 100644 index 00000000..d93265a7 --- /dev/null +++ b/Kernel/Modules/block_cache/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "block_cache" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } + diff --git a/Kernel/Modules/blockcache/Cargo.toml b/Kernel/Modules/blockcache/Cargo.toml new file mode 100644 index 00000000..b24b0e3a --- /dev/null +++ b/Kernel/Modules/blockcache/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "blockcache" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } + + diff --git a/Kernel/Modules/fs_extN/Cargo.toml b/Kernel/Modules/fs_extN/Cargo.toml new file mode 100644 index 00000000..d99482e1 --- /dev/null +++ b/Kernel/Modules/fs_extN/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "fs_extN" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +block_cache = { path = "../block_cache" } diff --git a/Kernel/Modules/fs_fat/Cargo.toml b/Kernel/Modules/fs_fat/Cargo.toml new file mode 100644 index 00000000..5ea64edc --- /dev/null +++ b/Kernel/Modules/fs_fat/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "fs_fat" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +blockcache = { path = "../blockcache" } +block_cache = { path = "../block_cache" } +utf16 = { path = "../utf16" } + diff --git a/Kernel/Modules/fs_iso9660/Cargo.toml b/Kernel/Modules/fs_iso9660/Cargo.toml new file mode 100644 index 00000000..36065422 --- /dev/null +++ b/Kernel/Modules/fs_iso9660/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "fs_iso9660" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +block_cache = { path = "../block_cache" } + diff --git a/Kernel/Modules/gui/Cargo.toml b/Kernel/Modules/gui/Cargo.toml new file mode 100644 index 00000000..e8b241ea --- /dev/null +++ b/Kernel/Modules/gui/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "gui" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +tag_safe = "*" + diff --git a/Kernel/Modules/input_ps2/Cargo.toml b/Kernel/Modules/input_ps2/Cargo.toml new file mode 100644 index 00000000..f8d2b9b0 --- /dev/null +++ b/Kernel/Modules/input_ps2/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "input_ps2" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +gui = { path = "../gui" } + diff --git a/Kernel/Modules/network/Cargo.toml b/Kernel/Modules/network/Cargo.toml new file mode 100644 index 00000000..337c8adf --- /dev/null +++ b/Kernel/Modules/network/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "network" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +stack_dst = { path = "../../../externals/crates.io/stack_dst", default-features = false } +shared_map = { path = "../shared_map" } + diff --git a/Kernel/Modules/network/lib.rs b/Kernel/Modules/network/lib.rs index 1d286c9a..6531675a 100644 --- a/Kernel/Modules/network/lib.rs +++ b/Kernel/Modules/network/lib.rs @@ -7,7 +7,6 @@ #![feature(linkage)] #![feature(const_fn)] #![feature(no_more_cas)] // AtomicUsize::fetch_update -#![feature(crate_in_paths)] #[cfg(test)] #[macro_use] extern crate /**/ std; diff --git a/Kernel/Modules/nic_rtl8139/Cargo.toml b/Kernel/Modules/nic_rtl8139/Cargo.toml new file mode 100644 index 00000000..f8e4dda2 --- /dev/null +++ b/Kernel/Modules/nic_rtl8139/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "nic-rtl8139" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +network = { path = "../network" } + diff --git a/Kernel/Modules/shared_map/Cargo.toml b/Kernel/Modules/shared_map/Cargo.toml new file mode 100644 index 00000000..b176d0fb --- /dev/null +++ b/Kernel/Modules/shared_map/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "shared_map" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } + diff --git a/Kernel/Modules/storage_ahci/Cargo.toml b/Kernel/Modules/storage_ahci/Cargo.toml new file mode 100644 index 00000000..13579ba1 --- /dev/null +++ b/Kernel/Modules/storage_ahci/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "storage-ahci" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +storage-ata = { path = "../storage_ata" } +storage-scsi = { path = "../storage_scsi" } diff --git a/Kernel/Modules/storage_ata/Cargo.toml b/Kernel/Modules/storage_ata/Cargo.toml new file mode 100644 index 00000000..8cccf700 --- /dev/null +++ b/Kernel/Modules/storage_ata/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "storage-ata" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +storage-scsi = { path = "../storage_scsi" } + diff --git a/Kernel/Modules/storage_scsi/Cargo.toml b/Kernel/Modules/storage_scsi/Cargo.toml new file mode 100644 index 00000000..83ad9f11 --- /dev/null +++ b/Kernel/Modules/storage_scsi/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "storage-scsi" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } diff --git a/Kernel/Modules/syscalls/Cargo.toml b/Kernel/Modules/syscalls/Cargo.toml new file mode 100644 index 00000000..764935eb --- /dev/null +++ b/Kernel/Modules/syscalls/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "syscalls" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +stack_dst = { path = "../../../externals/crates.io/stack_dst", default-features = false } +kernel = { path = "../../Core" } +gui = { path = "../gui" } + diff --git a/Kernel/Modules/usb_core/Cargo.toml b/Kernel/Modules/usb_core/Cargo.toml new file mode 100644 index 00000000..dcc6d6eb --- /dev/null +++ b/Kernel/Modules/usb_core/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "usb-core" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +stack_dst = { path = "../../../externals/crates.io/stack_dst", default-features = false } + + diff --git a/Kernel/Modules/usb_ohci/Cargo.toml b/Kernel/Modules/usb_ohci/Cargo.toml new file mode 100644 index 00000000..0226cda6 --- /dev/null +++ b/Kernel/Modules/usb_ohci/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "usb-ohci" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } +usb-core = { path = "../usb_core" } + diff --git a/Kernel/Modules/utf16/Cargo.toml b/Kernel/Modules/utf16/Cargo.toml new file mode 100644 index 00000000..b7423b95 --- /dev/null +++ b/Kernel/Modules/utf16/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "utf16" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } + diff --git a/Kernel/Modules/video_vga/Cargo.toml b/Kernel/Modules/video_vga/Cargo.toml new file mode 100644 index 00000000..70aa9a7f --- /dev/null +++ b/Kernel/Modules/video_vga/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "video-vga" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } + diff --git a/Kernel/Modules/virtio/Cargo.toml b/Kernel/Modules/virtio/Cargo.toml new file mode 100644 index 00000000..fb79c7a7 --- /dev/null +++ b/Kernel/Modules/virtio/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "virtio" +version = "0.0.0" + +[lib] +path = "lib.rs" + +[dependencies] +kernel = { path = "../../Core" } + diff --git a/Kernel/Modules/virtio/devices/mod.rs b/Kernel/Modules/virtio/devices/mod.rs index a347888e..aab64f47 100644 --- a/Kernel/Modules/virtio/devices/mod.rs +++ b/Kernel/Modules/virtio/devices/mod.rs @@ -23,7 +23,12 @@ pub fn new_boxed<T: Interface+Send+Sync+'static>(dev_id: u32, int: T) -> Box<dev } 2 => Box::new( block::BlockDevice::new(int) ), // 2 = Block device // DISABLED: Changing video modes breaks stuff currently... - //16 => Box::new( video::VideoDevice::new(int) ), // 16 = Graphics Adapter + 16 => if false { // 16 = Graphics Adapter + Box::new( video::VideoDevice::new(int) ) + } + else { + Box::new(NullDevice) + }, dev @ _ => { log_error!("VirtIO device has unknown device ID {:#x}", dev); Box::new(NullDevice) diff --git a/Kernel/rundir/Makefile b/Kernel/rundir/Makefile index a9763282..8679262d 100644 --- a/Kernel/rundir/Makefile +++ b/Kernel/rundir/Makefile @@ -25,6 +25,8 @@ ifneq ($(QEMU_STALL),) endif CMDLINE := SYSROOT=/system/Tifflin +#QEMU_ARGS += -tcg-plugin $(shell dirname $(shell type -P qemu-system-x86_64))/../libexec/tcg-plugin-oprofile.so -singlestep + ifneq ($(TIFFLIN_INIT),) CMDLINE += INIT=$(TIFFLIN_INIT) endif @@ -38,19 +40,23 @@ endif IMGDIR := DiskImages/$(ARCH)/ +ifneq ($(ENABLE_TRACE),) + QEMU_ARGS += --trace events=.qemu_trace,file=qemu_trace_events +endif + # # --- AMD64 --- # ifeq ($(ARCH),amd64) CMDLINE += SYSDISK=ATA-0p0 -QEMU_ARGS += -net nic,model=rtl8139 -net dump +QEMU_ARGS += -vga virtio +QEMU_ARGS += -net nic,model=rtl8139 +# -net dump QEMU_ARGS += -drive if=ide,index=0,file=$(IMGDIR)hda.img,format=raw QEMU_ARGS += -cdrom $(IMGDIR)test.iso QEMU_ARGS += -device ahci,id=ahci QEMU_ARGS += -drive if=none,id=sata1,file=$(IMGDIR)hdb.img,format=raw -device ide-hd,drive=sata1,bus=ahci.0 QEMU_ARGS += -drive if=none,id=sata2,file=$(IMGDIR)test.iso,format=raw -device ide-cd,drive=sata2,bus=ahci.1 -#QEMU_ARGS += -trace file=qemu_trace -#QEMU_OPTS += -trace events=.qemu_trace,file=qemu_trace MODE ?= pxe ifeq ($(MODE),iso) @@ -142,14 +148,9 @@ $(IMGDIR)hdb.img: Makefile $(IMGDIR)hdb_0.img $(IMGDIR)hdb_1.img @echo "$(shell echo $$((1*1024*2)),+,0x83)" | /sbin/sfdisk --no-reread $@ -u S -f -q > /dev/null .qemu_trace: Makefile - echo "" echo "" > $@ - #echo "apic_deliver_irq" >> $@ - #echo "apic_local_deliver" >> $@ - #echo "apic_mem_readl" >> $@ - echo "bdrv_aio_readv" >> $@ - echo "bdrv_aio_writev" >> $@ - echo "bdrv_co_readv" >> $@ - echo "bdrv_co_do_copy_on_readv" >> $@ + echo pci_* >> $@ + echo virtio_* >> $@ + echo virtqueue_* >> $@ -- GitLab