使用Rust开发操作系统(GDT,IDT加载,以及GDB调试内核)

本文详细介绍了使用Rust语言开发操作系统的流程,包括初始化TSS、GDT、IDT以及8259A PIC。通过GDB进行内核调试,并展示了如何启动系统和进行调试准备。在下一步,作者计划编写时钟中断和键盘驱动程序。
摘要由CSDN通过智能技术生成

我们花费了好大力气完成了全局描述符表,中断描述符表,TSS,PIC等结构和对应功能的代码,在本章中我们根据之前编写的GDT,IDT结构以及对应的方法来完成GDT,IDT的加载

明确一下目标

我们现在的项目结构是这样的

.
├── kernel
│   ├── Cargo.lock
│   ├── Cargo.toml
│   ├── Makefile
│   ├── src
│   │   ├── main.rs
│   │   └── vga.rs
│   └── x86-64.json
└── lib
    ├── Cargo.lock
    ├── Cargo.toml
    └── src
        ├── bits
        │   └── mod.rs
        ├── ia_32e
        │   ├── addr.rs
        │   ├── cpu
        │   │   ├── mod.rs
        │   │   ├── pic.rs
        │   │   └── port.rs
        │   ├── descriptor
        │   │   ├── gdt.rs
        │   │   ├── idt.rs
        │   │   ├── mod.rs
        │   │   └── tss.rs
        │   ├── instructions
        │   │   ├── interrupt.rs
        │   │   ├── mod.rs
        │   │   ├── port.rs
        │   │   ├── segmention.rs
        │   │   └── tables.rs
        │   └── mod.rs
        ├── lib.rs
        ├── mutex.rs
        └── tests.rs

kernel.toml的内容如下

[dependencies.lazy_static]
version = "1.0"
features = ["spin_no_std"]

[dependencies]
# 用于系统引导
bootloader = "0.8.0"
# 我们自己写的
system={path="../lib/",version="0.1.0"}

我们需要明确接下来的工作,主要的工作有这些:

  1. 使用lazy_static初始化TSS,GDT,IDT
  2. 使用IDT,GDT的load来加载IDT,GDT
  3. 使用set_cs来设置内核运行代码段,使用set_tss函数加载tss
  4. 初始化PIC并使用initialize来初始化8259A
  5. 使用sti指令开启中断
    经过以上步骤我们可以完成描述以及中断的初始化操作,中断的处理将会放到下个章节讲述

开始干活

初始化TSS

我们在kernel/src/gdt.rs中添加以下内容(需要创建)

// in kernel/src/gdt.rs
use system::ia_32e::descriptor::tss::TaskStateSegment;
use l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值