diff --git a/Kernel/Cargo.toml b/Kernel/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..1017b5fb67b0094894333782eea18063ab29edb0 --- /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 0000000000000000000000000000000000000000..e690200584966744e2f549a332a2bb4a84594f89 --- /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 0000000000000000000000000000000000000000..2cb7ab011f318983ff7521262b0d0583e84a2110 --- /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 0000000000000000000000000000000000000000..d93265a7fecd553d4456d07db34a893a6e0b65e5 --- /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 0000000000000000000000000000000000000000..b24b0e3ad05716451cf26dc20421892aca143055 --- /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 0000000000000000000000000000000000000000..d99482e119c3360a9dcef25d27a53b89c1992e3f --- /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 0000000000000000000000000000000000000000..5ea64edc3f114eb451382c13fb14632f24a87c80 --- /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 0000000000000000000000000000000000000000..360654226062791c1b153d2be72296e979bea1be --- /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 0000000000000000000000000000000000000000..e8b241ea6903e8e70830b74feea9aa90d50e07d8 --- /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 0000000000000000000000000000000000000000..f8d2b9b0074ebbde9cdd6e058ae900acfbf9daaf --- /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 0000000000000000000000000000000000000000..337c8adf43f6509a6d2feb64cabfc21aa0b34233 --- /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 1d286c9a68ff9906a9e8056d2f427770c6b2fd02..6531675aa025bb7a5e9f0a52102a1ce16ad1bab7 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 0000000000000000000000000000000000000000..f8e4dda2531458769b6615b9e86583a9259afbcb --- /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 0000000000000000000000000000000000000000..b176d0fba881e32c40e33fa248e689810d4226c5 --- /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 0000000000000000000000000000000000000000..13579ba15d2c9f821f94b886cd34ab43893948b6 --- /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 0000000000000000000000000000000000000000..8cccf700c30e0b37962854cb7eefbf26e30c5384 --- /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 0000000000000000000000000000000000000000..83ad9f111829b1093071ea0de5c72608aade934b --- /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 0000000000000000000000000000000000000000..764935eb0091f2c4117af5e54198b252270ec2eb --- /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 0000000000000000000000000000000000000000..dcc6d6eb6e40af826476a4bdab7f506dc9c8d050 --- /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 0000000000000000000000000000000000000000..0226cda675d2f6e53c1d89fe6f9cdd9e867ee180 --- /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 0000000000000000000000000000000000000000..b7423b954a85882594f37f44f121e59be7d7ae1f --- /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 0000000000000000000000000000000000000000..70aa9a7f340437701a3fe91252bac93416a68614 --- /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 0000000000000000000000000000000000000000..fb79c7a706dc84e33c257d673e6706f922eca579 --- /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 a347888e9c8cb78cd1cbebc5dacdeab0cff87fe6..aab64f471b04787a0dbe7e521d6ac239006b27c6 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 a9763282f994fa65f250890a0d111560b09aec24..8679262d54f30cbf7b83f8638ec68cdac37bfb0e 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_* >> $@