自制C语言内核调用VGA 13h图形模式时重启,设置像素无显示的问题求助
自制C语言内核调用VGA 13h图形模式时重启,设置像素无显示的问题求助
大家好,我正在从零开始用C语言开发自己的操作系统,这个问题已经卡了我2-3个月了,实在找不到解决办法,来求助各位大佬!
目前遇到两个核心问题:
- 当我尝试直接设置像素时,屏幕上完全看不到任何像素显示;
- 当我尝试调用VGA 13h模式(256色、320x200分辨率)时,机器直接重启,根本走不到后续的代码逻辑。
先给大家贴一下我的代码:
main.c(内核入口)
#include "screen.h" void kernel_main(){ init_graphic_mode(); while (1) { set_pixel(5, 5, (uint8_t)1); } }
screen.c
#include "screen.h" void set_pixel(int y, int x, uint8_t color) { if (x >= 0 && x < VGA_WIDTH && y >= 0 && y < VGA_HEIGHT) { uint8_t* screen = (uint8_t*)VGA_ADDR; uint32_t offset = y * VGA_WIDTH + x; screen[offset] = color; } } void init_graphic_mode() { __asm__ __volatile__ ( "mov $0x0013, %%ax\n\t" "int $0x10\n\t" : : : "eax" ); }
screen.h
#ifndef MYSCREEN_H #define MYSCREEN_H #include <stdint.h> #include <stdbool.h> #define VGA_WIDTH 320 #define VGA_HEIGHT 200 #define SCREEN_SIZE (VGA_WIDTH * VGA_HEIGHT) #define VGA_ADDR 0xA0000 void set_pixel(int y, int x, uint8_t color); void init_graphic_mode(); #endif
之前的尝试和遇到的其他问题
一开始我遇到了“Booting from hard disk... GRUB”的错误,后来把一些文件移到isodir文件夹后解决了这个启动问题,但图形显示的问题依然存在:
- 最开始我没有写
init_graphic_mode函数,用的是标准的640x480 16色模式,当时设置像素就没反应,我反复修改set_pixel里的数据类型,试了各种组合都没用; - 后来我决定切换到13h模式,参考网上资料和ChatGPT写了
init_graphic_mode函数,但现在一调用这个函数机器就直接重启,完全没法测试像素绘制的逻辑。
实在不知道哪里出问题了,希望各位大佬能帮我分析一下!
备注:内容来源于stack exchange,提问作者m0NNESY
相关产品推荐
相关产品推荐

