diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index b61cf516..146479bf 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -6,7 +6,8 @@ "${workspaceFolder}/**" ], "defines": [ - "x86_64" + "x86_64", + "DEBUG" ], "compilerPath": "/usr/bin/gcc", "cStandard": "gnu17", diff --git a/kernel/Makefile b/kernel/Makefile index fde76d4b..39403812 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -7,7 +7,13 @@ DIR_LIB=lib lib_patterns := *.a LIB_FILES := $(foreach DIR,$(DIR_LIB),$(addprefix $(DIR)/,$(lib_patterns))) -CFLAGS := -mcmodel=large -fno-builtin -m64 -g -O0 -I . -fno-stack-protector +DEBUG=1 +CFLAGS := -mcmodel=large -fno-builtin -m64 -O0 -I . -fno-stack-protector + +ifeq ($(DEBUG), 1) +CFLAGS += -g +endif + ARCH=x86_64 # 控制操作系统使用的中断控制器 _INTR_8259A_ _INTR_APIC_ PIC := _INTR_APIC_ diff --git a/kernel/common/printk.c b/kernel/common/printk.c index ee64b4af..9cb9f931 100644 --- a/kernel/common/printk.c +++ b/kernel/common/printk.c @@ -29,7 +29,7 @@ int printk_init(const int char_size_x, const int char_size_y) { struct multiboot_tag_framebuffer_info_t info; int reserved; - + multiboot2_iter(multiboot2_get_Framebuffer_info, &info, &reserved); pos.width = info.framebuffer_width; @@ -112,16 +112,20 @@ void auto_newline() * @brief 超过每行最大字符数,自动换行 * */ - + if (pos.x > pos.max_x) { - uart_send(COM1, '\n'); +#ifdef DEBUG + uart_send(COM1, '\n'); +#endif pos.x = 0; ++pos.y; } if (pos.y > pos.max_y) { +#ifdef DEBUG uart_send(COM1, '\n'); +#endif pos.y = pos.max_y; int lines_to_scroll = 1; scroll(true, lines_to_scroll * pos.char_size_y, false); @@ -630,8 +634,10 @@ static void putchar(uint *fb, int Xsize, int x, int y, unsigned int FRcolor, uns * @param BKcolor 背景颜色 * @param font 字符的bitmap */ - // 输出到串口 + +#ifdef DEBUG uart_send(COM1, font); +#endif unsigned char *font_ptr = font_ascii[font]; unsigned int *addr; diff --git a/kernel/main.c b/kernel/main.c index 77729097..92c8f43b 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -84,7 +84,9 @@ void system_initialize() // 初始化printk printk_init(8, 16); +#ifdef DEBUG uart_init(COM1, 115200); +#endif kinfo("Kernel Starting..."); // 重新加载gdt和idt