加载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
相关产品推荐
相关产品推荐

