From d5eb9e8a2744e898a5c9c075266afa6aaee8f2e4 Mon Sep 17 00:00:00 2001 From: fslongjin Date: Wed, 23 Feb 2022 12:18:18 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E5=B0=86=E5=88=9D=E5=A7=8B=E5=8C=96825?= =?UTF-8?q?9A=E7=9A=84=E4=BB=A3=E7=A0=81=E7=A7=BB=E5=8A=A8=E5=88=B0driver?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/Makefile | 10 +++++++--- kernel/{exception => driver/interrupt/8259A}/8259A.c | 9 +++++---- kernel/{exception => driver/interrupt/8259A}/8259A.h | 2 +- kernel/exception/irq.c | 4 ++-- 4 files changed, 15 insertions(+), 10 deletions(-) rename kernel/{exception => driver/interrupt/8259A}/8259A.c (83%) rename kernel/{exception => driver/interrupt/8259A}/8259A.h (91%) diff --git a/kernel/Makefile b/kernel/Makefile index 89a586f5..7af665d1 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -16,8 +16,9 @@ all: kernel kernel: head.o entry.o main.o printk.o trap.o mm.o irq.o 8259A.o process.o syscall.o multiboot2.o cpu.o - ld -b elf64-x86-64 -z muldefs -o kernel head.o exception/entry.o main.o common/printk.o exception/trap.o exception/irq.o exception/8259A.o mm/mm.o process/process.o syscall/syscall.o driver/multiboot2/multiboot2.o \ + ld -b elf64-x86-64 -z muldefs -o kernel head.o exception/entry.o main.o common/printk.o exception/trap.o exception/irq.o mm/mm.o process/process.o syscall/syscall.o driver/multiboot2/multiboot2.o \ common/cpu.o \ + driver/interrupt/8259A/8259A.o \ -T link.lds head.o: head.S @@ -46,8 +47,7 @@ trap.o: exception/trap.c irq.o: exception/irq.c gcc $(CFLAGS) -c exception/irq.c -o exception/irq.o -8259A.o: exception/8259A.c - gcc $(CFLAGS) -c exception/8259A.c -o exception/8259A.o + mm.o: mm/mm.c gcc $(CFLAGS) -c mm/mm.c -o mm/mm.o @@ -63,5 +63,9 @@ multiboot2.o: driver/multiboot2/multiboot2.c cpu.o: common/cpu.c gcc $(CFLAGS) -c common/cpu.c -o common/cpu.o + +# 驱动程序 +8259A.o: driver/interrupt/8259A/8259A.c + gcc $(CFLAGS) -c driver/interrupt/8259A/8259A.c -o driver/interrupt/8259A/8259A.o clean: rm -rf $(GARBAGE) \ No newline at end of file diff --git a/kernel/exception/8259A.c b/kernel/driver/interrupt/8259A/8259A.c similarity index 83% rename from kernel/exception/8259A.c rename to kernel/driver/interrupt/8259A/8259A.c index eb613dbd..217fc02c 100644 --- a/kernel/exception/8259A.c +++ b/kernel/driver/interrupt/8259A/8259A.c @@ -1,13 +1,14 @@ #include "8259A.h" -#include "irq.c" -#include "../common/printk.h" -#include "../common/kprint.h" +#include "../../../common/printk.h" +#include "../../../common/kprint.h" + +extern void (*interrupt_table[24])(void); void init_8259A() { // 初始化中断门, 中断使用第二个ist for(int i=32;i<=55;++i) - set_intr_gate(i, 2, interrupt[i-32]); + set_intr_gate(i, 2, interrupt_table[i-32]); kinfo("Initializing 8259A..."); // 初始化主芯片 diff --git a/kernel/exception/8259A.h b/kernel/driver/interrupt/8259A/8259A.h similarity index 91% rename from kernel/exception/8259A.h rename to kernel/driver/interrupt/8259A/8259A.h index 47e7d9e2..7f4310a1 100644 --- a/kernel/exception/8259A.h +++ b/kernel/driver/interrupt/8259A/8259A.h @@ -11,7 +11,7 @@ #pragma once -#include "../common/glib.h" +#include "../../../common/glib.h" #define PIC_EOI 0x20 #define PIC_master 0x20 /* IO base address for master PIC */ diff --git a/kernel/exception/irq.c b/kernel/exception/irq.c index f5bbe070..e3325902 100644 --- a/kernel/exception/irq.c +++ b/kernel/exception/irq.c @@ -1,5 +1,5 @@ #include "irq.h" -#include "8259A.h" +#include "../driver/interrupt/8259A/8259A.h" #include "../common/asm.h" #include"../common/printk.h" #include "gate.h" @@ -80,7 +80,7 @@ Build_IRQ(0x36) Build_IRQ(0x37) // 初始化中断数组 -void (*interrupt[24])(void)= +void (*interrupt_table[24])(void)= { IRQ0x20interrupt, IRQ0x21interrupt,