You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载Bootloader后自定义Kernel出现故障求助

QEMU无法加载自定义内核故障排查求助
  • 卡在内核无法被QEMU从内存正确加载的问题上已超过一天,无法定位根源
  • 经调试后怀疑故障出在GDT,但之前能正常运行的内核版本,在引入多个头文件后也出现相同问题
  • 编译、链接过程无错误;用VSCode十六进制编辑器对比正常与故障镜像文件,未发现明显差异;两个版本Bootloader完全相同,且均包含内核运行所需全部数据,无法理解启动失败原因
  • 编译运行环境:Windows10 WSL Arch,使用QEMU、GCC、NASM、LD工具编译内核与Bootloader
  • 本人为OS开发新手,正在学习阶段,恳请提供技术建议

GDT.asm代码

gdt_start:
    dq 0x0          ; Base address of our segments


gdt_code:
    dw 0xffff       ; Segment length -> bits 0-15
    dw 0x0          ; Base address -> bits 0-15
    db 0x0          ; Base address -> bits 16-23
    db 10011010b    ; Flags -> 8 bits
    db 11001111b    ; Flags -> 4 bits + segment length -> bits 16-19
    db 0x0          ; Base address -> bits 24-31

gdt_data:
    dw 0xffff       ; Segment length -> bits 0-15
    dw 0x0          ; Base address -> bits 0-15
    db 0x0          ; Base address -> bits 16-23
    db 10010010b    ; Flags -> 8 bits
    db 11001111b    ; Flags -> 4 bits + segment length -> bits 16-19
    db 0x0          ; Base address -> bits 24-31

gdt_end:

gdt_descriptor:
    dw gdt_end - gdt_start - 1 ; Size of the gdt (16 bits)
    dd gdt_start    ; Address of the gdt (32 bits)

CODE_SEG equ gdt_code - gdt_start
DATA_SEG equ gdt_data - gdt_start

QEMU -d int运行时部分CPU Dump信息

check_exception old: 0xffffffff new 0xd
     1: v=0d e=0032 i=0 cpl=0 IP=0008:0000efdb pc=0000efdb SP=0010:0008fff4 env->regs[R_EAX]=00000010
EAX=00000010 EBX=00007d63 ECX=00000000 EDX=00000200
ESI=00000000 EDI=00000000 EBP=00090000 ESP=0008fff4
EIP=0000efdb EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00007ce6 00000017
IDT=     00000000 000003ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000010 CCD=00000010 CCO=ADDB
EFER=0000000000000000
check_exception old: 0xd new 0xd
     2: v=08 e=0000 i=0 cpl=0 IP=0008:0000efdb pc=0000efdb SP=0010:0008fff4 env->regs[R_EAX]=00000010
EAX=00000010 EBX=00007d63 ECX=00000000 EDX=00000200
ESI=00000000 EDI=00000000 EBP=00090000 ESP=0008fff4
EIP=0000efdb EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
CS =0008 00000000 ffffffff 00cf9a00 DPL=0 CS32 [-R-]
SS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
DS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
FS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
GS =0010 00000000 ffffffff 00cf9300 DPL=0 DS   [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT=     00007ce6 00000017
IDT=     00000000 000003ff
CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=00000010 CCD=00000010 CCO=ADDB
EFER=0000000000000000
check_exception old: 0x8 new 0xd

内容的提问来源于stack exchange,提问作者lochyj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:25:25