Bochs源码分析 - 7: 软盘设备的加载过程

本文详细分析了Bochs中软盘设备的加载过程,包括Bochs的设备链概念、软盘初始化、DMA注册、IRQ注册、IO端口注册,以及CMOS配置。文章解释了DMA的作用,中断响应,以及软盘设备在Bochs内部如何被模拟和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

        上一篇文章我们来一起简单分析了bochs的物理内存初始化这一过程,现在引出一个问题:我们编写的代码是如何被bochs读取并映射到物理内存中的呢。要回答这个问题,我们必须来分析bochs中的软盘编写过程。

Bochs的设备链概念

        Bochs的各种设备初始化是由一个"PLUG_load_plugin(xx,xx)"宏来完成的,当物理内存初始化完成,其调用一个宏“DEV_init_devices()”,该函数就是来初始化各种设备。函数中有一个是初始化软盘的,我们先不管其他的,仅针对它来分析

PLUG_load_plugin(floppy, PLUGTYPE_CORE);

         这里先给出函数的调用堆栈,免得忘记自己走过的路(这里先不画图了)。

>	bochs.exe!bx_devices_c::init(BX_MEM_C * newmem) Line 221	C++
 	bochs.exe!bx_init_hardware() Line 1378	C++
 	bochs.exe!bx_begin_simulation(int argc, char * * argv) Line 1027	C++
 	bochs.exe!bx_real_sim_c::begin_simulation(int argc, char * * argv) Line 907	C++
 	bochs.exe!win32_ci_callback(void * userdata, ci_command_t command) Line 679	C++
 	bochs.exe!bx_real_sim_c::configuration_interface(....)
 	bochs.exe!bxmain() Line 341	C++
 	bochs.exe!main(int argc, char * * argv) Line 557	C++

        初始化软盘设备的函数如下,可以看到其操作比较简单,先是创建了一个软盘设备对象"theFloppyController",然后将设备对象赋值给"bx_devices.pluginFloppyDevice",我们很容易推测出"bx_devices"是管理bochs的全部设备的。然后调用一个函数,该函数通过函数名可以知道是"注册设备模型”。(这里我其实拿不准,在Windows内核中有设备链这一概念,比如我们想拦截Windows中的键盘消息,我们应该先通过设备链来搜索出键盘这个设备对象模型,然后对其IRP消息进行过滤拦截。我们用这种模型来尝试套在bochs上。

int CDECL libfloppy_LTX_plugin_init(plugin_t *plugin, plugintype_t type)
{
  if (type == PLUGTYPE_CORE) {
    theFloppyController = new bx_floppy_ctrl_c();
    bx_devices.pluginFloppyDevice = theFloppyController;
    BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theFloppyController, BX_PLUGIN_FLOPPY);
    return 0; // Success
  } else {
    return -1;
  }
}

void pluginRegisterDeviceDevmodel(...)函数分析

        该函数比较少,很明显就是链表操作,我们直接画出数据结构图,代码就不必分析了。

typedef struct _device_t
{
    const char   *name;        // 设备名称
    plugin_t     *plugin;      // 插件? 此时为NULL,不需要分析
    plugintype_t plugtype;     // 类型,由该值决定不同的链表

    class bx_devmodel_c *devmodel;  // 设备模型

    struct _device_t *next;    // 链表中的下一个设备
} device_t;
Chapter 1 x86 体系结构与PC 系统概要.....................................1 1.1 x86 CPU 结构...............................................................................................................1 1.1.1 冯诺依曼架构和CISC 指令集......................................................................1 1.1.2 CPU 结构........................................................................................................1 1.1.3 CPU 工作模式................................................................................................2 1.2 x86 体系结构概览........................................................................................................3 1.3 PC 系统.........................................................................................................................5 1.3.1 PC 系统概述...................................................................................................5 2.3.2 总线拓扑.........................................................................................................6 2.3.3 存储器与I/O 编址.........................................................................................6 2.3.4 关于系统的启动与引导.................................................................................8 Chapter 2 Bochs 工程概述....................................................... 11 2.1 开源项目Bochs 介绍.................................................................................................11 2.2 版本2.2.1 源码组织..................................................................................................11 2.3 工程类结构.................................................................................................................12 2.4 主体框架结构分析.....................................................................................................13 2.4.1 Bochs 工程中的重要类................................................................................13 (1) VM 控制台界面类.............................................................................................13 (2) CPU 模拟............................................................................................................14 (3) Memory 模拟......................................................................................................14 (4).I/O device 模拟...................................................................................................15 2.4.2 入口函数main()及Win32 Gui 初始化........................................................15 2.5 Bochs 的工作方式......................................................................................................18 Chapter 3 CPU 类的源码分析...................................................20 3.1 CPU 类概述................................................................................................................20 3.1.1 CPU 逻辑结构框图......................................................................................20 3.1.2 类BX_CPU_C 成员归纳.............................................................................20 3.2 类BX_CPU_C 源码分析..........................................................................................21 3.2.1 CPU 特性声明..............................................................................................21 3.2.2 类bxInstruction_c 成员分析........................................................................22 3.2.3 类BX_CPU_C 源码注释.............................................................................22 3.3 通用寄存器.................................................................................................................29 3.3.1 数据结构与注释...........................................................................................29 3.3.2 通用寄存器归纳...........................................................................................30 3.4 段寄存器、全局寄存器GDI 和IDT ........................................................................31 3.4.1 数据结构与注释...........................................................................................31 3.4.2 段寄存器结构分析.......................................................................................33 3.5 CPU 状态字EFLAGS................................................................................................35 3.5.1 数据结构与注释...........................................................................................35
Bochs项目源码分析与注释 Table of Content Chapter 1 x86 体系结构与 PC 系统概要1 1.1 x86 CPU 结构1 1.1.1 冯诺依曼架构和CISC 指令集 1.1.2 CPU 结构 1.1.3 CPU 工作模式 1.2 x86 体系结构概览 1.3 PC 系统 1.3.1 PC 系统概述 2.3.2 总线拓扑 2.3.3 存储器与I/O 编址 2.3.4 关于系统的启动与引导 Chapter 2 Bochs 工程概述 2.1 开源项目Bochs 介绍........................................11 2.2 版本2.2.1 源码组织..................................................................................................11 2.3 工程类结构.................................................................................................................12 2.4 主体框架结构分析.....................................................................................................13 2.4.1 Bochs 工程中的重要类................................................................................13 (1) VM 控制台界面类.............................................................................................13 (2 ) CPU 模拟............................................................................................................14 (3) Memory 模拟......................................................................................................14 (4 ).I/O device 模拟...................................................................................................15 2.4.2 入口函数main()及Win32 Gui 初始化........................................................15 2.5 Bochs 的工作方式......................................................................................................18 Chapter 3 CPU 类的源码分析...................................................20 3.1 CPU 类概述................................................................................................................20 3.1.1 CPU 逻辑结构框图......................................................................................20 3.1.2 类BX_CPU_C 成员归纳.............................................................................20 3.2 类BX_CPU_C 源码分析..........................................................................................21 3.2.1 CPU 特性声明..............................................................................................21 3.2.2 类bxInstruction_c 成员分析........................................................................22 3.2.3 类BX_CPU_C 源码注释.............................................................................22 3.3 通用寄存器.................................................................................................................29 3.3.1 数据结构与注释...........................................................................................29 3.3.2 通用寄存器归纳...........................................................................................30 3.4 段寄存器、全局寄存器GDI 和IDT ........................................................................31 3.4.1 数据结构与注释...........................................................................................31 3.4.2 段寄存器结构分析.......................................................................................33 3.5 CPU 状态字EFLAGS................................................................................................35 3.5.1 数据结构与注释...........................................................................................35 Understanding the source code of bochs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值