开一个新坑,最终目标是按照《操作系统真象还原》这本书实现一个操作系统。

在读每一章的过程中都会按照书中的步骤配环境、写代码、做实验,完成每章后都产出一篇博客。

写博客的主要目的是鞭策自己不能半途而废,毕竟操作系统确实很复杂,研究生期间尝试过,后来放弃了,这一次要坚持下来。次要目的是记录写操作系统的过程中遇到的一些问题,以及有意义的知识点。

开发环境如下:

  • 虚拟机:VMware Workstation 15 Player
  • 操作系统:Ubuntu 14.04.6 LTS
  • 终端软件:MobaXterm
  • 编辑器:VIM,VSCode+RemoteSSH 插件

桌面环境是 Windows10。根据以往的经历,使用 MacOS 或者 Windows 作为桌面环境,终端软件连接 Linux 是最舒服的开发方式。

第一章的内容主要是安装以及配置 Bochs。

Bochs 安装

  • 下载 Boches

    打开 http://sourceforge.net/projects/bochs/files/bochs/,下载 bochs-2.6.2.tar.gz

  • 解压压缩包

    tar zxvf bochs-2.6.2.tar.gz

  • 编译

    • configure

      ./configure \
      --prefix=/home/swings/bochs \
      --enable-debugger \
      --enable-disasm \
      --enable-iodebug \
      --enable-x86-debugger \
      --with-x \
      --with-x11
      
    • make

      make
      

      报错一:

      解决一:

      上一步 ./configure时加上 --with-nogui

      报错二:

      解决二:

      在 Makefile 的LIBS中加入-lz -lrt -lm -lpthread

    • make install

      make install
      

      报错一:

      解决一:

      复制make生成的bochs文件 cp bochs bochsdbg,删除已有的bochs安装目录,再次执行make install

配置 Bochs

给 Bochs 配置硬件的方法,就是写一个配置文件给它,Bochs 启动时会找到此文件,根据文件内容创建自己。

写配置文件 bochsrc.disk 并保存到 Bochs 的安装根目录,我的是 /home/swings/bochs/bochsrc.disk

# 设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
megs: 32# 设置对应真实机器的 BIOS 和 VGA BIOS
romimage: file=/home/swings/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/swings/bochs/share/bochs/VGABIOS-lgpl-latest# 设置 Bochs 使用的磁盘
# floppya: 1_44=a.img, status=inserted# 选择启动盘符
boot: disk # 从硬盘启动# 设置日志文件输出
log: bochs.out# 关闭鼠标,打开键盘
mouse: enabled=0
keyboard: enabled=1,
map=/home/swings/bochs/share/bochs/keymaps/x11-pc-us.map# 硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14# 增加 Bochs 对 GDB 的支持,GDB 远程连接到此机器的 1234 端口便可调试
gdbstub: enabled=1, port=1234, test_base=0, data_base=0, bss_base=0

运行 Bochs

在 Bochs 的安装根目录执行命令:

bin/bochs -f bochsrc.disk

报错一:

解决一:
修改配置文件 bochsrc.disk 中的 keyboard_mapping 项为:

并去掉 keyboard_mapping 下面的 map 项。

报错二:

解决二:

注释掉配置文件中的 GDB 相关配置。

Bochs 运行后出现黑框,并没有如书中所说报“没有启动设备”的错误。

先忽略上面的问题,按照书中的命令创建虚拟硬盘:

bin/bximage -hd -mode="flat" -size=60 -q hd60M.img

创建硬盘后的提示信息:

将这些信息加入到配置文件中:

再次运行 bochs:

bin/bochs -f bochsrc.disk

还是只有黑框。

原因是 bochs 默认是调试模式,需要键入 c 才能继续运行。

输入c后终于如书中所述出现boot failed: not a bootable disk的报错。

操作系统真象还原第一章相关推荐

  1. 操作系统真象还原 第一章

    参考:<操作系统真象还原>第一章 ---- 安装Vmware Station 安装Ubuntu 装载配置Bochs 安装Vmware tools 开始乘帆历险!_Love 6的博客-CSD ...

  2. 操作系统真象还原[11章]-用户进程

    本章在内核线程的基础上实现用户进程,主要区别是内核线程运行在特权级别3下,用户进程运行在特权级别0下. Intel原生为CPU提供的多任务机制主要是LDT/TSS,关于LDT/TSS简要阐述一下,现代 ...

  3. 操作系统真象还原 第二章

    1.创建hd60M.img yangjun@yangjun-Inspiron-7559:~/bochs$ bin/bximage =================================== ...

  4. 《操作系统真象还原》第九章 ---- 终进入线程动斧开刀 豁然开朗拨云见日 还需解决同步机制才能长舒气

    文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 进程 线程的自我小理解 线程 进程的状态 内核级线程 & 用户级线程 初步实现内核级线程 浪费两三个小时调试的辛酸史 编写thread ...

  5. 《操作系统真象还原》第十四章 ---- 实现文件系统 任务繁多 饭得一口口吃路得一步步走啊(上一)

    文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 部分缩写熟知 闲聊时刻 实现文件系统的原理 inode构建原理 目录构建原理 超级块构建思路 创建文件系统 编写完的super_block.h ...

  6. 《操作系统真象还原》第十四章 ---- 实现文件系统 任务繁多 饭得一口口吃路得一步步走啊(上二)

    文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 闲聊时刻 部分缩写熟知 实现文件描述符的原理 文件描述符的介绍 文件描述符与inode的介绍 文件描述符与PCB的描述符数组的介绍 实现文件操 ...

  7. 《操作系统真象还原》第十三章 ---- 编写硬盘驱动软件 行百里者半九十终成时喜悦溢于言表

    文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 部分缩写熟知 闲聊时刻 提前需要准备编写的函数 实现printk 实现sprintf函数 创建从盘 创建从盘的步骤 修改后的bochsrc.d ...

  8. 《操作系统真象还原》第十四章 ---- 实现文件系统 任务繁多 饭得一口口吃路得一步步走啊(总结篇)

    文章目录 专栏博客链接 闲聊时刻 第十四章代码总览 编写完的fs.c(fs/fs.c) 编写完的fs.h(fs/fs.h) 编写完的dir.c(fs/dir.c) 编写完的dir.h(fs/dir.h ...

  9. 《操作系统真象还原》第五章 ---- 轻取物理内存容量 启用分页畅游虚拟空间 力斧直斩内核先劈一角 闲庭信步摸谈特权级

    文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 部分缩写熟知 + 小建议 修改代码前的小闲聊 修改loader.S(读取内存大小) 检验是否成功读取内存大小 开始分页新篇章的分页理解 一级页 ...

最新文章

  1. 基于HT for Web 快速搭建3D机房设备面板
  2. Java集合:Hashtable源码分析
  3. typescript 接口 java_[Java教程]【TypeScript】TypeScript 学习 2——接口
  4. vue中用数组语法绑定class
  5. Python+pywin32操作Excel文件常用功能(268行代码+注释)
  6. 苹果Mac电脑配置flutter开发环境
  7. Android-SDK下载及安装配置教程
  8. android cocos 二次启动 崩溃,基于cocos2dx 1.0.1 0.12.0的第二次运行时android...
  9. 备战蓝桥杯(4)——第九届蓝桥杯嵌入式省赛赛题实战
  10. android+特殊符号过滤,android 特殊符号过滤
  11. 微信小程序直播有哪些推广技巧?
  12. go zap + lumberjack 日志按大小分割demo整理
  13. 常用国名与首都(英文)
  14. 根据excel模板导出
  15. 自考 02326 操作系统 综合题整理
  16. 44.0.概率论与数理统计-估计量的评价准则,无偏性,有效性,相合性
  17. python乒乓球比赛规则介绍_乒乓球比赛规则常识大全
  18. ant--Java工程打包工具
  19. Python:按照像素值进行查找图片的剪切
  20. 杰理之无线话筒方案【篇】

热门文章

  1. win7 下使用超级终端
  2. 企业信息化系统基础——AD:使用C#批量创建帐号
  3. Android怎样判断APP是64位运行,还是32位运行?
  4. 机械手臂类机器人现状
  5. 9 万张车辆图像及标注数据 - 数据堂
  6. 计算机社团的ppt,社团管理系统.ppt
  7. 视频剪辑必备的6个免费素材库~
  8. 页面相关的数据存储(缓存及Web Storage)
  9. 《快速软件开发》读书心得
  10. 最近最开心的一件事情