Răsfoiți Sursa

:art: 将初始化8259A的代码移动到driver文件夹

fslongjin 3 ani în urmă
părinte
comite
d5eb9e8a27

+ 7 - 3
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)

+ 5 - 4
kernel/exception/8259A.c → 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...");
     
     // 初始化主芯片

+ 1 - 1
kernel/exception/8259A.h → 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 */

+ 2 - 2
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,