From 9566eec501b293df7c2be370ed4d11ea75e38497 Mon Sep 17 00:00:00 2001 From: ParrotXray Date: Mon, 5 May 2025 14:31:21 +0800 Subject: [PATCH] add: Add some deleted stuff --- .cargo/config.toml | 10 ++ .gitignore | 1 - bochsout.txt | 256 ++++++++++++++++++++++++++++++++++++++++++ makefile | 81 +++++++++++++ none | 5 + src/hal/cpu.rs | 0 src/hal/io.rs | 0 src/hal/mod.rs | 2 + src/kernel/kernel.rs | 2 +- src/kernel/mod.rs | 2 +- src/kernel/tty/mod.rs | 1 + src/kernel/tty/tty.rs | 0 src/lib.rs | 1 + 13 files changed, 358 insertions(+), 3 deletions(-) create mode 100644 .cargo/config.toml create mode 100644 bochsout.txt create mode 100644 makefile create mode 100644 none create mode 100644 src/hal/cpu.rs create mode 100644 src/hal/io.rs create mode 100644 src/hal/mod.rs create mode 100644 src/kernel/tty/mod.rs create mode 100644 src/kernel/tty/tty.rs diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..41076a4 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,10 @@ +[unstable] +build-std = ["core", "compiler_builtins"] +build-std-features = ["compiler-builtins-mem"] + +[build] +target = "i686-unknown-linux-gnu" + +[target.i686-unknown-linux-gnu] +linker = "i686-elf-ld" +ar = "i686-elf-ar" \ No newline at end of file diff --git a/.gitignore b/.gitignore index ed315c6..b06ddda 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,6 @@ dist-ssr .vscode/* !.vscode/extensions.json .idea -.cargo .next .DS_Store *.suo diff --git a/bochsout.txt b/bochsout.txt new file mode 100644 index 0000000..4bcf998 --- /dev/null +++ b/bochsout.txt @@ -0,0 +1,256 @@ +00000000000i[ ] Bochs x86 Emulator 2.8 +00000000000i[ ] Built from GitHub snapshot on March 10, 2024 +00000000000i[ ] Timestamp: Sun Mar 10 08:00:00 CET 2024 +00000000000i[ ] System configuration +00000000000i[ ] processors: 1 (cores=1, HT threads=1) +00000000000i[ ] A20 line support: yes +00000000000i[ ] IPS is set to 4000000 +00000000000i[ ] CPU configuration +00000000000i[ ] SMP support: yes, quantum=16 +00000000000i[ ] level: 6 +00000000000i[ ] APIC support: xapic +00000000000i[ ] FPU support: yes +00000000000i[ ] MMX support: yes +00000000000i[ ] 3dnow! support: yes +00000000000i[ ] SEP support: yes +00000000000i[ ] SIMD support: sse2 +00000000000i[ ] XSAVE support: no +00000000000i[ ] AES support: no +00000000000i[ ] SHA support: no +00000000000i[ ] MOVBE support: no +00000000000i[ ] ADX support: no +00000000000i[ ] x86-64 support: yes +00000000000i[ ] 1G paging support: no +00000000000i[ ] MWAIT support: yes +00000000000i[ ] VMX support: 1 +00000000000i[ ] Optimization configuration +00000000000i[ ] RepeatSpeedups support: yes +00000000000i[ ] Fast function calls: yes +00000000000i[ ] Handlers Chaining speedups: no +00000000000i[ ] Devices configuration +00000000000i[ ] PCI support: i440FX i430FX i440BX +00000000000i[ ] Networking: no +00000000000i[ ] Sound support: no +00000000000i[ ] USB support: no +00000000000i[ ] VGA extension support: vbe +00000000000i[IMG ] Disk image modules +00000000000i[IMG ] flat concat sparse dll growing undoable volatile vmware3 +00000000000i[IMG ] vmware4 vbox vpc vvfat +00000000000i[MEM0 ] allocated memory at 0x7f063c694010. after alignment, vector=0x7f063c695000, block_size = 128K +00000000000i[MEM0 ] 1024.00MB +00000000000i[MEM0 ] mem block size = 0x00020000, blocks=8192 +00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('/usr/local/share/bochs/BIOS-bochs-latest') +00000000000i[CPU0 ] WARNING: 3DNow! is not implemented yet ! +00000000000i[DEV ] will paste characters every 100 iodev timer ticks +00000000000i[PLUGIN] init_dev of 'pci' plugin device by virtual method +00000000000i[DEV ] i440FX PMC present at device 0, function 0 +00000000000i[PLUGIN] init_dev of 'pci2isa' plugin device by virtual method +00000000000i[DEV ] PIIX3 PCI-to-ISA bridge present at device 1, function 0 +00000000000i[PLUGIN] init_dev of 'cmos' plugin device by virtual method +00000000000i[CMOS ] CMOS RTC using realtime synchronisation method +00000000000i[CMOS ] Using utc time for initial clock +00000000000i[CMOS ] Setting initial clock to: Mon May 5 6:27:55 2025 tz=utc (time0=1746426475) +00000000000i[PLUGIN] init_dev of 'dma' plugin device by virtual method +00000000000i[DMA ] channel 4 used by cascade +00000000000i[PLUGIN] init_dev of 'pic' plugin device by virtual method +00000000000i[PLUGIN] init_dev of 'pit' plugin device by virtual method +00000000000i[PIT ] PIT using realtime synchronisation method +00000000000i[PLUGIN] init_dev of 'vga' plugin device by virtual method +00000000000i[MEM0 ] Register memory access handlers: 0x0000000a0000 - 0x0000000bffff +00000000000i[VGA ] interval=100000, mode=realtime +00000000000i[VGA ] Setting VGA update interval to 100000 (10.0 Hz) +00000000000i[VGA ] VSYNC using realtime mode +00000000000i[MEM0 ] Register memory access handlers: 0x0000e0000000 - 0x0000e0ffffff +00000000000i[BXVGA ] VBE Bochs Display Extension Enabled +00000000000i[XGUI ] test_alloc_colors: 16 colors available out of 16 colors tried +00000000000i[XGUI ] font 8 wide x 16 high, display depth = 24 +00000000000i[XGUI ] maximum host resolution: x=1920 y=1030 +00000000000i[MEM0 ] rom at 0xc0000/36352 ('/usr/local/share/bochs/VGABIOS-lgpl-latest') +00000000000i[PLUGIN] init_dev of 'floppy' plugin device by virtual method +00000000000i[DMA ] channel 2 used by Floppy Drive +00000000000i[FLOPPY] Using boot sequence cdrom, none, none +00000000000i[FLOPPY] Floppy boot signature check is enabled +00000000000i[PLUGIN] init_dev of 'acpi' plugin device by virtual method +00000000000i[DEV ] ACPI Controller present at device 1, function 3 +00000000000i[PLUGIN] init_dev of 'hpet' plugin device by virtual method +00000000000i[HPET ] initializing HPET +00000000000i[MEM0 ] Register memory access handlers: 0x0000fed00000 - 0x0000fed003ff +00000000000i[PLUGIN] init_dev of 'ioapic' plugin device by virtual method +00000000000i[IOAPIC] initializing I/O APIC +00000000000i[MEM0 ] Register memory access handlers: 0x0000fec00000 - 0x0000fec00fff +00000000000i[IOAPIC] IOAPIC enabled (base address = 0xfec00000) +00000000000i[PLUGIN] init_dev of 'keyboard' plugin device by virtual method +00000000000i[PLUGIN] init_dev of 'harddrv' plugin device by virtual method +00000000000i[HD ] CD on ata0-0: 'build/cure.iso' +00000000000i[CD1 ] load cdrom with path='build/cure.iso' +00000000000i[CD1 ] Opening image file as a cd. +00000000000i[HD ] Media present in CD-ROM drive +00000000000i[HD ] Capacity is 2495 sectors (4.87 MB) +00000000000i[PLUGIN] init_dev of 'pci_ide' plugin device by virtual method +00000000000i[DEV ] PIIX3 PCI IDE controller present at device 1, function 1 +00000000000i[PLUGIN] init_dev of 'unmapped' plugin device by virtual method +00000000000i[PLUGIN] init_dev of 'biosdev' plugin device by virtual method +00000000000i[PLUGIN] init_dev of 'speaker' plugin device by virtual method +00000000000e[PCSPK ] Failed to open /dev/console: Permission denied +00000000000e[PCSPK ] Deactivating beep on console +00000000000i[PLUGIN] init_dev of 'extfpuirq' plugin device by virtual method +00000000000i[PLUGIN] init_dev of 'parallel' plugin device by virtual method +00000000000i[PAR ] parallel port 1 at 0x0378 irq 7 +00000000000i[PLUGIN] init_dev of 'serial' plugin device by virtual method +00000000000i[SER ] com1 at 0x03f8 irq 4 (mode: null) +00000000000i[PLUGIN] init_dev of 'iodebug' plugin device by virtual method +00000000000i[PLUGIN] register state of 'pci' plugin device by virtual method +00000000000i[PLUGIN] register state of 'pci2isa' plugin device by virtual method +00000000000i[PLUGIN] register state of 'cmos' plugin device by virtual method +00000000000i[PLUGIN] register state of 'dma' plugin device by virtual method +00000000000i[PLUGIN] register state of 'pic' plugin device by virtual method +00000000000i[PLUGIN] register state of 'pit' plugin device by virtual method +00000000000i[PLUGIN] register state of 'vga' plugin device by virtual method +00000000000i[PLUGIN] register state of 'floppy' plugin device by virtual method +00000000000i[PLUGIN] register state of 'unmapped' plugin device by virtual method +00000000000i[PLUGIN] register state of 'biosdev' plugin device by virtual method +00000000000i[PLUGIN] register state of 'speaker' plugin device by virtual method +00000000000i[PLUGIN] register state of 'extfpuirq' plugin device by virtual method +00000000000i[PLUGIN] register state of 'parallel' plugin device by virtual method +00000000000i[PLUGIN] register state of 'serial' plugin device by virtual method +00000000000i[PLUGIN] register state of 'iodebug' plugin device by virtual method +00000000000i[PLUGIN] register state of 'acpi' plugin device by virtual method +00000000000i[PLUGIN] register state of 'hpet' plugin device by virtual method +00000000000i[PLUGIN] register state of 'ioapic' plugin device by virtual method +00000000000i[PLUGIN] register state of 'keyboard' plugin device by virtual method +00000000000i[PLUGIN] register state of 'harddrv' plugin device by virtual method +00000000000i[PLUGIN] register state of 'pci_ide' plugin device by virtual method +00000000000i[SYS ] bx_pc_system_c::Reset(HARDWARE) called +00000000000i[CPU0 ] cpu hardware reset +00000000000i[APIC0 ] allocate APIC id=0 (MMIO enabled) to 0x0000fee00000 +00000000000i[CPU0 ] CPU[0] is the bootstrap processor +00000000000i[CPU0 ] CPUID[0x00000000]: 00000005 68747541 444d4163 69746e65 +00000000000i[CPU0 ] CPUID[0x00000001]: 00000633 00010800 00002008 078bfbff +00000000000i[CPU0 ] CPUID[0x00000002]: 00000000 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x00000003]: 00000000 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x00000004]: 00000000 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x00000005]: 00000040 00000040 00000003 00000020 +00000000000i[CPU0 ] CPUID[0x80000000]: 80000008 68747541 444d4163 69746e65 +00000000000i[CPU0 ] CPUID[0x80000001]: 00000633 00000000 00000101 ebd3f3ff +00000000000i[CPU0 ] CPUID[0x80000002]: 20444d41 6c687441 74286e6f 7020296d +00000000000i[CPU0 ] CPUID[0x80000003]: 65636f72 726f7373 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x80000004]: 00000000 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x80000005]: 01ff01ff 01ff01ff 40020140 40020140 +00000000000i[CPU0 ] CPUID[0x80000006]: 00000000 42004200 02008140 00000000 +00000000000i[CPU0 ] CPUID[0x80000007]: 00000000 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x80000008]: 00003028 00000200 00000000 00000000 +00000000000i[CPU0 ] CPU Features supported: +00000000000i[CPU0 ] "x87" +00000000000i[CPU0 ] "486ni" +00000000000i[CPU0 ] "pentium_ni" +00000000000i[CPU0 ] "p6ni" +00000000000i[CPU0 ] "mmx" +00000000000i[CPU0 ] "3dnow" +00000000000i[CPU0 ] "debugext" +00000000000i[CPU0 ] "vme" +00000000000i[CPU0 ] "pse" +00000000000i[CPU0 ] "pae" +00000000000i[CPU0 ] "pge" +00000000000i[CPU0 ] "pse36" +00000000000i[CPU0 ] "mtrr" +00000000000i[CPU0 ] "pat" +00000000000i[CPU0 ] "sysenter_sysexit" +00000000000i[CPU0 ] "clflush" +00000000000i[CPU0 ] "sse" +00000000000i[CPU0 ] "sse2" +00000000000i[CPU0 ] "mwait" +00000000000i[CPU0 ] "vmx" +00000000000i[CPU0 ] "longmode" +00000000000i[CPU0 ] "lm_lahf_sahf" +00000000000i[CPU0 ] "nx" +00000000000i[CPU0 ] "cmpxhg16b" +00000000000i[CPU0 ] "rdtscp" +00000000000i[CPU0 ] "ffxsr" +00000000000i[CPU0 ] "xapic" +00000000000i[PLUGIN] reset of 'pci' plugin device by virtual method +00000000000i[PLUGIN] reset of 'pci2isa' plugin device by virtual method +00000000000i[PLUGIN] reset of 'cmos' plugin device by virtual method +00000000000i[PLUGIN] reset of 'dma' plugin device by virtual method +00000000000i[PLUGIN] reset of 'pic' plugin device by virtual method +00000000000i[PLUGIN] reset of 'pit' plugin device by virtual method +00000000000i[PLUGIN] reset of 'vga' plugin device by virtual method +00000000000i[PLUGIN] reset of 'floppy' plugin device by virtual method +00000000000i[PLUGIN] reset of 'acpi' plugin device by virtual method +00000000000i[PLUGIN] reset of 'hpet' plugin device by virtual method +00000000000i[PLUGIN] reset of 'ioapic' plugin device by virtual method +00000000000i[PLUGIN] reset of 'keyboard' plugin device by virtual method +00000000000i[PLUGIN] reset of 'harddrv' plugin device by virtual method +00000000000i[PLUGIN] reset of 'pci_ide' plugin device by virtual method +00000000000i[PLUGIN] reset of 'unmapped' plugin device by virtual method +00000000000i[PLUGIN] reset of 'biosdev' plugin device by virtual method +00000000000i[PLUGIN] reset of 'speaker' plugin device by virtual method +00000000000i[PLUGIN] reset of 'extfpuirq' plugin device by virtual method +00000000000i[PLUGIN] reset of 'parallel' plugin device by virtual method +00000000000i[PLUGIN] reset of 'serial' plugin device by virtual method +00000000000i[PLUGIN] reset of 'iodebug' plugin device by virtual method +00000000000i[ ] Using debugger log file none +00000000000i[ ] set SIGINT handler to bx_debug_ctrlc_handler +00000001740i[BIOS ] BIOS BUILD DATE: 03/10/24 +00000314450i[KBD ] reset-disable command received +00000316434i[BIOS ] Starting rombios32 +00000316872i[BIOS ] Shutdown flag 0 +00000317480i[BIOS ] ram_size=0x40000000 +00000317958i[BIOS ] ram_end=1024MB +00000330227i[BIOS ] Found 1 cpu(s) +00000344165i[BIOS ] bios_table_addr: 0x000fa128 end=0x000fcc00 +00000671981i[PCI ] i440FX PMC write to PAM register 59 (TLB Flush) +00000999916i[P2ISA ] PCI IRQ routing: PIRQA# set to 0x0b +00000999940i[P2ISA ] PCI IRQ routing: PIRQB# set to 0x09 +00000999964i[P2ISA ] PCI IRQ routing: PIRQC# set to 0x0b +00000999988i[P2ISA ] PCI IRQ routing: PIRQD# set to 0x09 +00000999998i[P2ISA ] write: ELCR2 = 0x0a +00001000767i[BIOS ] PIIX3/PIIX4 init: elcr=00 0a +00001014389i[BIOS ] PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237 class=0x0600 +00001016733i[BIOS ] PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000 class=0x0601 +00001018916i[BIOS ] PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010 class=0x0101 +00001019151i[PIDE ] BAR #4: i/o base address = 0xc000 +00001019767i[BIOS ] region 4: 0x0000c000 +00001021825i[BIOS ] PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113 class=0x0680 +00001022101i[ACPI ] new IRQ line = 11 +00001022115i[ACPI ] new IRQ line = 9 +00001022143i[ACPI ] new PM base address: 0xb000 +00001022157i[ACPI ] new SM base address: 0xb100 +00001022185i[PCI ] setting SMRAM control register to 0x4a +00001186320i[CPU0 ] Enter to System Management Mode +00001186320i[CPU0 ] enter_system_management_mode: temporary disable VMX while in SMM mode +00001186330i[CPU0 ] RSM: Resuming from System Management Mode +00001350386i[PCI ] setting SMRAM control register to 0x0a +00001377002i[BIOS ] MP table addr=0x000fa200 MPC table addr=0x000fa130 size=0xc8 +00001378709i[BIOS ] SMBIOS table addr=0x000fa210 +00001380808i[BIOS ] ACPI tables: RSDP addr=0x000fa330 ACPI DATA addr=0x3fff0000 size=0xff8 +00001383815i[BIOS ] Firmware waking vector 0x3fff00cc +00001386069i[PCI ] i440FX PMC write to PAM register 59 (TLB Flush) +00001386799i[BIOS ] bios_table_cur_addr: 0x000fa354 +00001497506i[VBIOS ] VGABios ID: vgabios.c 2024-03-03 +00001497577i[BXVGA ] VBE known Display Interface b0c0 +00001497609i[BXVGA ] VBE known Display Interface b0c5 +00001499030i[VBIOS ] VBE Bios ID: vbe.c 2024-03-03 +00005107043i[BIOS ] IDE time out +01706430294i[BIOS ] Booting from 07c0:0000 +01773625838i[CPU0 ] WARNING: HLT instruction with IF=0! +03648260000p[XGUI ] >>PANIC<< POWER button turned off. +03648260000i[CPU0 ] CPU is in protected mode (halted) +03648260000i[CPU0 ] CS.mode = 32 bit +03648260000i[CPU0 ] SS.mode = 32 bit +03648260000i[CPU0 ] EFER = 0x00000000 +03648260000i[CPU0 ] | EAX=00010000 EBX=00010000 ECX=00000000 EDX=00000000 +03648260000i[CPU0 ] | ESP=00108fb0 EBP=00000000 ESI=00000000 EDI=00000000 +03648260000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf zf af pf cf +03648260000i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D +03648260000i[CPU0 ] | CS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +03648260000i[CPU0 ] | DS:0018( 0003| 0| 0) 00000000 ffffffff 1 1 +03648260000i[CPU0 ] | SS:0018( 0003| 0| 0) 00000000 ffffffff 1 1 +03648260000i[CPU0 ] | ES:0018( 0003| 0| 0) 00000000 ffffffff 1 1 +03648260000i[CPU0 ] | FS:0018( 0003| 0| 0) 00000000 ffffffff 1 1 +03648260000i[CPU0 ] | GS:0018( 0003| 0| 0) 00000000 ffffffff 1 1 +03648260000i[CPU0 ] | EIP=00100038 (00100038) +03648260000i[CPU0 ] | CR0=0x60000011 CR2=0x00000000 +03648260000i[CPU0 ] | CR3=0x00000000 CR4=0x00000000 +03648260000i[CMOS ] Last time: 1746426482 tz=utc (Mon May 5 6:28:02 2025) +03648260000i[XGUI ] Exit +03648260000i[SIM ] quit_sim called with exit code 1 diff --git a/makefile b/makefile new file mode 100644 index 0000000..e3b74c2 --- /dev/null +++ b/makefile @@ -0,0 +1,81 @@ +include config/make-locations +include config/make-os +include config/make-cc +include config/make-debug-tool + +BUILD_MODE := release +CARGO_FLAGS := +RUST_TARGET := i686-unknown-linux-gnu + +INCLUDES := $(patsubst %, -I%, $(INCLUDES_DIR)) +SOURCE_FILES := $(shell find -name "*.[cS]") +SRC := $(patsubst ./%, $(OBJECT_DIR)/%.o, $(SOURCE_FILES)) + +$(OBJECT_DIR): + @mkdir -p $(OBJECT_DIR) + +$(BIN_DIR): + @mkdir -p $(BIN_DIR) + +$(ISO_DIR): + @mkdir -p $(ISO_DIR) + @mkdir -p $(ISO_BOOT_DIR) + @mkdir -p $(ISO_GRUB_DIR) + +# 編譯 Rust 代碼 +rust-kernel: + @echo "Building Rust kernel..." + @cargo build $(CARGO_FLAGS) + +# 編譯組合語言文件(如果還需要) +$(OBJECT_DIR)/%.S.o: %.S + @mkdir -p $(@D) + @echo "Compiling: $< -> $@" + @$(CC) $(INCLUDES) -c $< -o $@ + +# 編譯需要的 C 文件(如果還有) +$(OBJECT_DIR)/%.c.o: %.c + @mkdir -p $(@D) + @echo "Compiling: $< -> $@" + @$(CC) $(INCLUDES) -c $< -o $@ $(CFLAGS) + +# 連結 +$(BIN_DIR)/$(OS_BIN): $(OBJECT_DIR) $(BIN_DIR) rust-kernel $(SRC) + @echo "Linking..." + @cp target/$(RUST_TARGET)/$(BUILD_MODE)/libcure.a $(OBJECT_DIR)/ + @$(CC) -T linker.ld -o $(BIN_DIR)/$(OS_BIN) $(SRC) $(OBJECT_DIR)/libcure.a $(LDFLAGS) + +$(BUILD_DIR)/$(OS_ISO): $(ISO_DIR) $(BIN_DIR)/$(OS_BIN) GRUB_TEMPLATE + @./config-grub.sh ${OS_NAME} $(ISO_GRUB_DIR)/grub.cfg + @cp $(BIN_DIR)/$(OS_BIN) $(ISO_BOOT_DIR) + @grub-mkrescue -o $(BUILD_DIR)/$(OS_ISO) $(ISO_DIR) + +all: clean $(BUILD_DIR)/$(OS_ISO) + +all-debug: BUILD_MODE := debug +all-debug: CARGO_FLAGS := --features debug +all-debug: O := -Og +all-debug: CFLAGS := -g -std=gnu99 -ffreestanding $(O) $(W) $(ARCH_OPT) +all-debug: LDFLAGS := -g -ffreestanding $(O) -nostdlib -lgcc +all-debug: clean $(BUILD_DIR)/$(OS_ISO) + @echo "Dumping the disassembled kernel code to $(BUILD_DIR)/dump.txt" + @$(OBJDUMP) -D $(BIN_DIR)/$(OS_BIN) > $(BUILD_DIR)/dump.txt + +clean: + @rm -rf $(BUILD_DIR) + @cargo clean + +run: $(BUILD_DIR)/$(OS_ISO) + @qemu-system-i386 -smp 1 -m 1G -rtc base=utc -cdrom $(BUILD_DIR)/$(OS_ISO) -monitor telnet::$(QEMU_MON_PORT),server,nowait & + @sleep 1 + @telnet 127.0.0.1 $(QEMU_MON_PORT) + +debug-qemu: all-debug + @$(OBJCOPY) --only-keep-debug $(BIN_DIR)/$(OS_BIN) $(BUILD_DIR)/kernel.dbg + @qemu-system-i386 -smp 1 -m 1G -rtc base=utc -s -S -cdrom $(BUILD_DIR)/$(OS_ISO) -monitor telnet::$(QEMU_MON_PORT),server,nowait & + @sleep 1 + @$(QEMU_MON_TERM) -e "telnet 127.0.0.1 $(QEMU_MON_PORT)" + @gdb -s $(BUILD_DIR)/kernel.dbg -ex "target remote localhost:1234" + +debug-bochs: all-debug + @bochs -q -f bochs.cfg \ No newline at end of file diff --git a/none b/none new file mode 100644 index 0000000..6e3de1b --- /dev/null +++ b/none @@ -0,0 +1,5 @@ +Bochs internal debugger, type 'help' for help or 'c' to continue +Switching to CPU0 +Next at t=0 +(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b ; ea5be000f0 + c diff --git a/src/hal/cpu.rs b/src/hal/cpu.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/hal/io.rs b/src/hal/io.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/hal/mod.rs b/src/hal/mod.rs new file mode 100644 index 0000000..3085b50 --- /dev/null +++ b/src/hal/mod.rs @@ -0,0 +1,2 @@ +pub mod io; +pub mod cpu; diff --git a/src/kernel/kernel.rs b/src/kernel/kernel.rs index 2344605..98635c6 100644 --- a/src/kernel/kernel.rs +++ b/src/kernel/kernel.rs @@ -10,7 +10,7 @@ pub extern "C" fn _kernel_init() { } #[no_mangle] -pub extern "C" fn _kernel_main(multiboot_info: u32) { +pub extern "C" fn _kernel_main(_multiboot_info: u32) { unsafe { loop { diff --git a/src/kernel/mod.rs b/src/kernel/mod.rs index b74a58f..9c7f721 100644 --- a/src/kernel/mod.rs +++ b/src/kernel/mod.rs @@ -1,4 +1,4 @@ pub mod kernel; // 重新導出由 boot.S 調用的入口點 -pub use kernel::{_kernel_init, _kernel_main}; \ No newline at end of file +// pub use kernel::{_kernel_init, _kernel_main}; \ No newline at end of file diff --git a/src/kernel/tty/mod.rs b/src/kernel/tty/mod.rs new file mode 100644 index 0000000..4a77f74 --- /dev/null +++ b/src/kernel/tty/mod.rs @@ -0,0 +1 @@ +pub mod tty; \ No newline at end of file diff --git a/src/kernel/tty/tty.rs b/src/kernel/tty/tty.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/lib.rs b/src/lib.rs index a600442..c2e5681 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ #![no_main] mod kernel; +mod hal; use core::panic::PanicInfo;