[OS64位][019]源码阅读:程序4-4 异常/中断(一)显

2019-05-28  本文已影响0人  AkuRinbu

学习笔记

使用教材(配书源码以及使用方法)
《一个64位操作系统的设计与实现》
http://www.ituring.com.cn/book/2450
https://www.jianshu.com/p/28f9713a9171

源码结构

程序4-4 源码结构
#include "lib.h"
#include "printk.h"
#include "gate.h"

void Start_Kernel(void)
{

 . . . 

    color_printk(YELLOW,BLACK,"Hello\t\t World!\n");

    i = 1/0;

    while(1)
        ;
}

测试运行

[anno@localhost bootloader]$ make
nasm boot.asm -o boot.bin
nasm loader.asm -o loader.bin

[anno@localhost kernel]$ make
gcc -E  head.S > head.s
as --64 -o head.o head.s
gcc  -mcmodel=large -fno-builtin -m64 -c main.c
main.c: In function ‘Start_Kernel’:
main.c:72: warning: division by zero
gcc  -mcmodel=large -fno-builtin -m64 -c printk.c
ld -b elf64-x86-64 -z muldefs -o system head.o main.o printk.o -T Kernel.lds 
objcopy -I elf64-x86-64 -S -R ".eh_frame" -R ".comment" -O binary system kernel.bin

[anno@localhost 4-4]$ ls
bochsrc  boot.img  bootloader  kernel  media

[anno@localhost 4-4]$ sudo mount boot.img media -t vfat -o loop
[anno@localhost 4-4]$ sudo cp bootloader/loader.bin media
[anno@localhost 4-4]$ sync
[anno@localhost 4-4]$ sudo cp bootloader/boot.bin media
[anno@localhost 4-4]$ sync
[anno@localhost 4-4]$ sudo cp kernel/kernel.bin media
[anno@localhost 4-4]$ sync

[anno@localhost 4-4]$ bochs -f ./bochsrc

源码分析

程序4-4 代码功能

程序4-4 源码解析

内存示意图

程序4-4 内存示意图.png

setup_IDT :格式化中断描述符

程序4-4 setup_IDT.png

ignore_int :中断处理程序

程序4-4 ignore_int.png

setup_TSS64 :格式化TSS描述符,并填入GDT表

程序4-4 setup_TSS64.png

参考资料

Intel® 64 and IA-32 Architectures
Software Developer’s Manual

Volume 3 (3A, 3B, 3C & 3D): System Programming Guide

Figure 6-3. Interrupt Procedure Call
Figure 6-7. 64-Bit IDT Gate Descriptors

6.2 EXCEPTION AND INTERRUPT VECTORS

7.2.2 TSS Descriptor

7.2.2 TSS Descriptor

lea
上一篇 下一篇

猜你喜欢

热点阅读