From d0ddb737880793f6f37e18aa7f12124fd3b1f8f6 Mon Sep 17 00:00:00 2001 From: fslongjin Date: Sun, 17 Jul 2022 15:41:19 +0800 Subject: [PATCH] =?UTF-8?q?:wrench:=20include=E4=B8=8A=E7=BA=A7=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9=E6=97=B6=EF=BC=8C=E7=BB=9F=E4=B8=80=E9=87=87?= =?UTF-8?q?=E7=94=A8<>=E6=9D=A5=E6=8C=87=E5=AE=9A=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 5 ++++- kernel/arch/x86_64/x86_64_ipi.h | 4 ++-- kernel/common/printk.c | 6 +++--- kernel/driver/acpi/acpi.c | 8 ++++---- kernel/driver/acpi/acpi.h | 4 ++-- kernel/driver/disk/ahci/ahci.c | 5 +++-- kernel/driver/disk/ahci/ahci.h | 6 +++--- kernel/driver/disk/ata.c | 4 ++-- kernel/driver/disk/ata.h | 2 +- kernel/driver/disk/block_device.h | 2 +- kernel/driver/interrupt/8259A/8259A.c | 6 +++--- kernel/driver/interrupt/8259A/8259A.h | 4 ++-- kernel/driver/interrupt/apic/apic.c | 14 +++++++------- kernel/driver/interrupt/apic/apic.h | 8 ++++---- kernel/driver/keyboard/ps2_keyboard.c | 8 ++++---- kernel/driver/keyboard/ps2_keyboard.h | 2 +- kernel/driver/mouse/ps2_mouse.c | 10 +++++----- kernel/driver/mouse/ps2_mouse.h | 2 +- kernel/driver/multiboot2/multiboot2.c | 4 ++-- kernel/driver/multiboot2/multiboot2.h | 4 ++-- kernel/driver/pci/pci.c | 4 ++-- kernel/driver/pci/pci.h | 2 +- kernel/driver/timers/HPET/HPET.h | 4 ++-- kernel/driver/usb/usb.c | 18 +++++++++++++++++- kernel/driver/usb/usb.h | 20 +++++++++++++++++++- kernel/exception/gate.h | 2 +- kernel/exception/irq.c | 8 ++++---- kernel/exception/irq.h | 4 ++-- kernel/exception/trap.c | 4 ++-- kernel/exception/trap.h | 6 +++--- kernel/mm/mm.c | 6 +++--- kernel/mm/mm.h | 2 +- kernel/mm/slab.h | 6 +++--- kernel/process/process.c | 10 +++++----- kernel/process/process.h | 8 ++++---- kernel/smp/smp.c | 14 +++++++------- kernel/smp/smp.h | 8 ++++---- kernel/syscall/syscall.c | 2 +- kernel/syscall/syscall.h | 6 +++--- 39 files changed, 140 insertions(+), 102 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index df26bf8e..8eff91bb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -104,7 +104,10 @@ "spinlock.h": "c", "stat.h": "c", "video.h": "c", - "libm.h": "c" + "libm.h": "c", + "ahci.h": "c", + "slab.h": "c", + "boot_info.h": "c" }, "C_Cpp.errorSquiggles": "Enabled", "esbonio.sphinx.confDir": "" diff --git a/kernel/arch/x86_64/x86_64_ipi.h b/kernel/arch/x86_64/x86_64_ipi.h index c3bfe2d2..7e08d7e2 100644 --- a/kernel/arch/x86_64/x86_64_ipi.h +++ b/kernel/arch/x86_64/x86_64_ipi.h @@ -11,8 +11,8 @@ #pragma once -#include "../../common/kprint.h" -#include "../../driver/interrupt/apic/apic.h" +#include +#include /** * @brief 发送ipi消息 diff --git a/kernel/common/printk.c b/kernel/common/printk.c index 2d836dc2..fd493463 100644 --- a/kernel/common/printk.c +++ b/kernel/common/printk.c @@ -3,9 +3,9 @@ // #include "printk.h" #include "kprint.h" -#include "../driver/multiboot2/multiboot2.h" -#include "../mm/mm.h" -#include "../process/spinlock.h" +#include +#include +#include #include #include diff --git a/kernel/driver/acpi/acpi.c b/kernel/driver/acpi/acpi.c index cfbacf2d..7335d8c7 100644 --- a/kernel/driver/acpi/acpi.c +++ b/kernel/driver/acpi/acpi.c @@ -1,8 +1,8 @@ #include "acpi.h" -#include "../../common/printk.h" -#include "../../common/kprint.h" -#include "../multiboot2/multiboot2.h" -#include "../../mm/mm.h" +#include +#include +#include +#include #define acpi_get_RSDT_entry_vaddr(phys_addr) (ACPI_DESCRIPTION_HEDERS_BASE + (phys_addr)-acpi_RSDT_entry_phys_base) // 获取RSDT entry的虚拟地址 // #define acpi_get_XSDT_entry_vaddr(phys_addr) (ACPI_DESCRIPTION_HEDERS_BASE + (phys_addr)-acpi_XSDT_entry_phys_base) // 获取XSDT entry的虚拟地址 diff --git a/kernel/driver/acpi/acpi.h b/kernel/driver/acpi/acpi.h index 1b792e26..e0accab5 100644 --- a/kernel/driver/acpi/acpi.h +++ b/kernel/driver/acpi/acpi.h @@ -4,8 +4,8 @@ #pragma once -#include "../../common/glib.h" -#include "../../mm/mm.h" +#include +#include #define ACPI_ICS_TYPE_PROCESSOR_LOCAL_APIC 0 #define ACPI_ICS_TYPE_IO_APIC 1 diff --git a/kernel/driver/disk/ahci/ahci.c b/kernel/driver/disk/ahci/ahci.c index c657dc09..92ecb277 100644 --- a/kernel/driver/disk/ahci/ahci.c +++ b/kernel/driver/disk/ahci/ahci.c @@ -1,6 +1,6 @@ #include "ahci.h" -#include "../../../common/kprint.h" -#include "../../../mm/slab.h" +#include +#include #include #include @@ -23,6 +23,7 @@ static int ahci_find_cmdslot(HBA_PORT *port); // 计算HBA_MEM的虚拟内存地址 #define cal_HBA_MEM_VIRT_ADDR(device_num) (AHCI_MAPPING_BASE + (ul)(((struct pci_device_structure_general_device_t *)(ahci_devs[device_num]))->BAR5 - ((((struct pci_device_structure_general_device_t *)(ahci_devs[0]))->BAR5) & PAGE_2M_MASK))) + /** * @brief 初始化ahci模块 * diff --git a/kernel/driver/disk/ahci/ahci.h b/kernel/driver/disk/ahci/ahci.h index ef807651..f60908d1 100644 --- a/kernel/driver/disk/ahci/ahci.h +++ b/kernel/driver/disk/ahci/ahci.h @@ -1,8 +1,8 @@ #pragma once -#include "../block_device.h" -#include "../../pci/pci.h" -#include "../../../mm/mm.h" +#include +#include +#include /** * @todo 加入io调度器(当操作系统实现了多进程之后要加入这个) diff --git a/kernel/driver/disk/ata.c b/kernel/driver/disk/ata.c index f67f5dfd..de1f6d13 100644 --- a/kernel/driver/disk/ata.c +++ b/kernel/driver/disk/ata.c @@ -1,6 +1,6 @@ #include "ata.h" -#include "../../common/kprint.h" -#include "../interrupt/apic/apic.h" +#include +#include struct apic_IO_APIC_RTE_entry entry; diff --git a/kernel/driver/disk/ata.h b/kernel/driver/disk/ata.h index b28380b9..7fb099b4 100644 --- a/kernel/driver/disk/ata.h +++ b/kernel/driver/disk/ata.h @@ -1,6 +1,6 @@ #pragma once -#include "../../common/glib.h" +#include // ======== PIO端口定义 ======== #define PORT_DISK0_DATA 0x1f0 // 数据 diff --git a/kernel/driver/disk/block_device.h b/kernel/driver/disk/block_device.h index adfb98a2..0636e387 100644 --- a/kernel/driver/disk/block_device.h +++ b/kernel/driver/disk/block_device.h @@ -1,6 +1,6 @@ #pragma once -#include "../../common/glib.h" +#include #include "stdint.h" #include diff --git a/kernel/driver/interrupt/8259A/8259A.c b/kernel/driver/interrupt/8259A/8259A.c index 0d3b85fd..1879d247 100644 --- a/kernel/driver/interrupt/8259A/8259A.c +++ b/kernel/driver/interrupt/8259A/8259A.c @@ -1,7 +1,7 @@ #include "8259A.h" -#include "../../../common/printk.h" -#include "../../../common/kprint.h" -#include "../../../exception/gate.h" +#include +#include +#include // 导出定义在irq.c中的中段门表 extern void (*interrupt_table[24])(void); diff --git a/kernel/driver/interrupt/8259A/8259A.h b/kernel/driver/interrupt/8259A/8259A.h index 71eb2a7f..36364ec3 100644 --- a/kernel/driver/interrupt/8259A/8259A.h +++ b/kernel/driver/interrupt/8259A/8259A.h @@ -11,8 +11,8 @@ #pragma once -#include "../../../common/glib.h" -#include "../../../exception/irq.h" +#include +#include #define PIC_EOI 0x20 #define PIC_master 0x20 /* IO base address for master PIC */ diff --git a/kernel/driver/interrupt/apic/apic.c b/kernel/driver/interrupt/apic/apic.c index ae8f987e..ab8b4daf 100644 --- a/kernel/driver/interrupt/apic/apic.c +++ b/kernel/driver/interrupt/apic/apic.c @@ -1,10 +1,10 @@ #include "apic.h" -#include "../../../common/kprint.h" -#include "../../../common/printk.h" -#include "../../../common/cpu.h" -#include "../../../common/glib.h" -#include "../../../exception/gate.h" -#include "../../acpi/acpi.h" +#include +#include +#include +#include +#include +#include #include #include @@ -28,7 +28,7 @@ static struct acpi_IO_APIC_Structure_t *io_apic_ICS; "movq $0x00, %%rax \n\t" \ "movq $0x80b, %%rcx \n\t" \ "wrmsr \n\t" :: \ - : "memory"); \ + : "memory"); \ } while (0) /** diff --git a/kernel/driver/interrupt/apic/apic.h b/kernel/driver/interrupt/apic/apic.h index 35b1199f..53c6f5e1 100644 --- a/kernel/driver/interrupt/apic/apic.h +++ b/kernel/driver/interrupt/apic/apic.h @@ -1,9 +1,9 @@ #pragma once -#include "../../../common/asm.h" -#include "../../../process/ptrace.h" -#include "../../../exception/irq.h" -#include "../../../mm/mm.h" +#include +#include +#include +#include #define APIC_SUCCESS 0 #define APIC_E_NOTFOUND 1 diff --git a/kernel/driver/keyboard/ps2_keyboard.c b/kernel/driver/keyboard/ps2_keyboard.c index b188fd61..e950eda9 100644 --- a/kernel/driver/keyboard/ps2_keyboard.c +++ b/kernel/driver/keyboard/ps2_keyboard.c @@ -1,8 +1,8 @@ #include "ps2_keyboard.h" -#include "../interrupt/apic/apic.h" -#include "../../mm/mm.h" -#include "../../mm/slab.h" -#include "../../common/printk.h" +#include +#include +#include +#include #include #include #include diff --git a/kernel/driver/keyboard/ps2_keyboard.h b/kernel/driver/keyboard/ps2_keyboard.h index 6695db2a..f540ebd6 100644 --- a/kernel/driver/keyboard/ps2_keyboard.h +++ b/kernel/driver/keyboard/ps2_keyboard.h @@ -1,6 +1,6 @@ #pragma once -#include "../../common/glib.h" +#include #define PS2_KEYBOARD_INTR_VECTOR 0x21 // 键盘的中断向量号 diff --git a/kernel/driver/mouse/ps2_mouse.c b/kernel/driver/mouse/ps2_mouse.c index f2746f8a..a30496af 100644 --- a/kernel/driver/mouse/ps2_mouse.c +++ b/kernel/driver/mouse/ps2_mouse.c @@ -1,9 +1,9 @@ #include "ps2_mouse.h" -#include "../interrupt/apic/apic.h" -#include "../../mm/mm.h" -#include "../../mm/slab.h" -#include "../../common/printk.h" -#include "../../common/kprint.h" +#include +#include +#include +#include +#include static struct ps2_mouse_input_buffer *ps2_mouse_buf_ptr = NULL; static int c = 0; diff --git a/kernel/driver/mouse/ps2_mouse.h b/kernel/driver/mouse/ps2_mouse.h index 2427dd0d..c5878d2c 100644 --- a/kernel/driver/mouse/ps2_mouse.h +++ b/kernel/driver/mouse/ps2_mouse.h @@ -1,6 +1,6 @@ #pragma once -#include "../../common/glib.h" +#include #define PS2_MOUSE_INTR_VECTOR 0x2c // 鼠标的中断向量号 diff --git a/kernel/driver/multiboot2/multiboot2.c b/kernel/driver/multiboot2/multiboot2.c index 2681a87a..7a511bb9 100644 --- a/kernel/driver/multiboot2/multiboot2.c +++ b/kernel/driver/multiboot2/multiboot2.c @@ -1,8 +1,8 @@ #include "multiboot2.h" #include "assert.h" -#include "../../common/glib.h" -#include "../../common/kprint.h" +#include +#include uintptr_t multiboot2_boot_info_addr; unsigned int multiboot2_magic; unsigned int multiboot2_boot_info_size; diff --git a/kernel/driver/multiboot2/multiboot2.h b/kernel/driver/multiboot2/multiboot2.h index ccfee2b8..4dbd4d44 100644 --- a/kernel/driver/multiboot2/multiboot2.h +++ b/kernel/driver/multiboot2/multiboot2.h @@ -7,8 +7,8 @@ #include "stdint.h" #include "stdbool.h" -#include "../../common/boot_info.h" -#include "../acpi/acpi.h" +#include +#include /// @see Multiboot2 Specification version 2.0.pdf // 启动后,在 32 位内核进入点,机器状态如下: diff --git a/kernel/driver/pci/pci.c b/kernel/driver/pci/pci.c index a6ac1dd2..8c69edee 100644 --- a/kernel/driver/pci/pci.c +++ b/kernel/driver/pci/pci.c @@ -1,6 +1,6 @@ #include "pci.h" -#include "../../common/kprint.h" -#include "../../mm/slab.h" +#include +#include static uint count_device_list = 0; static void pci_checkBus(uint8_t bus); diff --git a/kernel/driver/pci/pci.h b/kernel/driver/pci/pci.h index 4f0c76e1..0eba5a57 100644 --- a/kernel/driver/pci/pci.h +++ b/kernel/driver/pci/pci.h @@ -1,6 +1,6 @@ #pragma once -#include "../../common/glib.h" +#include #include "stdint.h" #define PORT_PCI_CONFIG_ADDRESS 0xcf8 diff --git a/kernel/driver/timers/HPET/HPET.h b/kernel/driver/timers/HPET/HPET.h index fe05afe4..fd035689 100644 --- a/kernel/driver/timers/HPET/HPET.h +++ b/kernel/driver/timers/HPET/HPET.h @@ -2,11 +2,11 @@ #include #include -#include +#include #define E_HPET_INIT_FAILED 1 -#define HPET0_INTERVAL 500 // HPET0定时器的中断间隔为500us +#define HPET0_INTERVAL 500 // HPET0定时器的中断间隔为500us int HPET_init(); /** diff --git a/kernel/driver/usb/usb.c b/kernel/driver/usb/usb.c index 202fc1b2..9d0a34d9 100644 --- a/kernel/driver/usb/usb.c +++ b/kernel/driver/usb/usb.c @@ -1 +1,17 @@ -#include "usb.h" \ No newline at end of file +#include "usb.h" +#include +#include + +#define MAX_USB_NUM 8 // pci总线上的usb设备的最大数量 + +// 在pci总线上寻找到的usb设备控制器的header +struct pci_device_structure_header_t *usb_pdevs[MAX_USB_NUM]; + +/** + * @brief 初始化usb驱动程序 + * + */ +void usb_init() +{ + kinfo("Initializing usb driver..."); +} \ No newline at end of file diff --git a/kernel/driver/usb/usb.h b/kernel/driver/usb/usb.h index 7b9637ef..55cd3b7e 100644 --- a/kernel/driver/usb/usb.h +++ b/kernel/driver/usb/usb.h @@ -1 +1,19 @@ -#pragma once \ No newline at end of file +#pragma once + +// usb设备在pci总线上的class +#define USB_CLASS 0xC +#define USB_SUBCLASS 0x3 + +// 不同的usb设备在pci总线上的prog IF +#define USB_TYPE_UHCI 0x0 +#define USB_TYPE_OHCI 0x10 +#define USB_TYPE_EHCI 0x20 +#define USB_TYPE_XHCI 0x30 +#define USB_TYPE_UNSPEC 0x80 // Unspecified +#define USB_TYPE_DEVICE 0xfe // USB Device(Not controller) + +/** + * @brief 初始化usb驱动程序 + * + */ +void usb_init(); \ No newline at end of file diff --git a/kernel/exception/gate.h b/kernel/exception/gate.h index 01065907..6bdade1e 100644 --- a/kernel/exception/gate.h +++ b/kernel/exception/gate.h @@ -9,7 +9,7 @@ #ifndef __GATE_H__ #define __GATE_H__ -#include "../common/kprint.h" +#include #include //描述符表的结构体 diff --git a/kernel/exception/irq.c b/kernel/exception/irq.c index 9eef557d..a723a7d6 100644 --- a/kernel/exception/irq.c +++ b/kernel/exception/irq.c @@ -3,13 +3,13 @@ // 对进行 #if _INTR_8259A_ -#include "../driver/interrupt/8259A/8259A.h" +#include #else -#include "../driver/interrupt/apic/apic.h" +#include #endif -#include "../common/asm.h" -#include "../common/printk.h" +#include +#include #include "gate.h" #include diff --git a/kernel/exception/irq.h b/kernel/exception/irq.h index 5b9769ce..990848fb 100644 --- a/kernel/exception/irq.h +++ b/kernel/exception/irq.h @@ -11,9 +11,9 @@ #pragma once -#include "../common/glib.h" +#include -#include "../process/ptrace.h" +#include #define SMP_IRQ_NUM 10 #define LOCAL_APIC_IRQ_NUM 10 diff --git a/kernel/exception/trap.c b/kernel/exception/trap.c index 72ee18d7..d512692b 100644 --- a/kernel/exception/trap.c +++ b/kernel/exception/trap.c @@ -1,7 +1,7 @@ #include "trap.h" #include "gate.h" -#include "../process/ptrace.h" -#include "../common/kprint.h" +#include +#include #include #include diff --git a/kernel/exception/trap.h b/kernel/exception/trap.h index d4f98720..83eba783 100644 --- a/kernel/exception/trap.h +++ b/kernel/exception/trap.h @@ -8,9 +8,9 @@ #pragma once -#include "../common/printk.h" -#include "../common/glib.h" -#include "../common/asm.h" +#include +#include +#include /** * @brief 初始化系统中断表 diff --git a/kernel/mm/mm.c b/kernel/mm/mm.c index 920ee8f2..3b82c58b 100644 --- a/kernel/mm/mm.c +++ b/kernel/mm/mm.c @@ -1,8 +1,8 @@ #include "mm.h" #include "slab.h" -#include "../common/printk.h" -#include "../common/kprint.h" -#include "../driver/multiboot2/multiboot2.h" +#include +#include +#include #include ul Total_Memory = 0; diff --git a/kernel/mm/mm.h b/kernel/mm/mm.h index 5c3920b6..a96f5eb8 100644 --- a/kernel/mm/mm.h +++ b/kernel/mm/mm.h @@ -1,6 +1,6 @@ #pragma once -#include "../common/glib.h" +#include // 每个页表的项数 // 64位下,每个页表4k,每条页表项8B,故一个页表有512条 diff --git a/kernel/mm/slab.h b/kernel/mm/slab.h index 053d024a..53eb034d 100644 --- a/kernel/mm/slab.h +++ b/kernel/mm/slab.h @@ -1,9 +1,9 @@ #pragma once #include "mm.h" -#include "../common/glib.h" -#include "../common/printk.h" -#include "../common/kprint.h" +#include +#include +#include #define SIZEOF_LONG_ALIGN(size) ((size + sizeof(long) - 1) & ~(sizeof(long) - 1)) #define SIZEOF_INT_ALIGN(size) ((size + sizeof(int) - 1) & ~(sizeof(int) - 1)) diff --git a/kernel/process/process.c b/kernel/process/process.c index 40388b96..3ef763d5 100644 --- a/kernel/process/process.c +++ b/kernel/process/process.c @@ -1,10 +1,10 @@ #include "process.h" -#include "../exception/gate.h" -#include "../common/printk.h" -#include "../common/kprint.h" -#include "../syscall/syscall.h" -#include "../syscall/syscall_num.h" +#include +#include +#include +#include +#include #include #include #include diff --git a/kernel/process/process.h b/kernel/process/process.h index 4948f735..61b2f13a 100644 --- a/kernel/process/process.h +++ b/kernel/process/process.h @@ -10,10 +10,10 @@ #pragma once -#include "../common/cpu.h" -#include "../common/glib.h" -#include "../mm/mm.h" -#include "../syscall/syscall.h" +#include +#include +#include +#include #include "ptrace.h" #include #include diff --git a/kernel/smp/smp.c b/kernel/smp/smp.c index 2814575c..f981f70c 100644 --- a/kernel/smp/smp.c +++ b/kernel/smp/smp.c @@ -1,11 +1,11 @@ #include "smp.h" -#include "../common/kprint.h" -#include "../driver/interrupt/apic/apic.h" -#include "../exception/gate.h" -#include "../common/cpu.h" -#include "../mm/slab.h" -#include "../process/process.h" -#include "../process/spinlock.h" +#include +#include +#include +#include +#include +#include +#include #include diff --git a/kernel/smp/smp.h b/kernel/smp/smp.h index cc958b6d..4bec7be0 100644 --- a/kernel/smp/smp.h +++ b/kernel/smp/smp.h @@ -1,9 +1,9 @@ #pragma once -#include "../common/glib.h" +#include -#include "../common/asm.h" -#include "../driver/acpi/acpi.h" -#include "../driver/interrupt/apic/apic.h" +#include +#include +#include #define MAX_SUPPORTED_PROCESSOR_NUM 1024 diff --git a/kernel/syscall/syscall.c b/kernel/syscall/syscall.c index 883b87a9..1d9bd2dd 100644 --- a/kernel/syscall/syscall.c +++ b/kernel/syscall/syscall.c @@ -1,5 +1,5 @@ #include "syscall.h" -#include "../process/process.h" +#include #include #include #include diff --git a/kernel/syscall/syscall.h b/kernel/syscall/syscall.h index 3443ae05..e6436c77 100644 --- a/kernel/syscall/syscall.h +++ b/kernel/syscall/syscall.h @@ -1,8 +1,8 @@ #pragma once -#include "../common/glib.h" -#include "../common/kprint.h" -#include "../process/ptrace.h" +#include +#include +#include #include // 定义最大系统调用数量 #define MAX_SYSTEM_CALL_NUM 256