操作系统真象还原第一章
开一个新坑,最终目标是按照《操作系统真象还原》这本书实现一个操作系统。
在读每一章的过程中都会按照书中的步骤配环境、写代码、做实验,完成每章后都产出一篇博客。
写博客的主要目的是鞭策自己不能半途而废,毕竟操作系统确实很复杂,研究生期间尝试过,后来放弃了,这一次要坚持下来。次要目的是记录写操作系统的过程中遇到的一些问题,以及有意义的知识点。
开发环境如下:
- 虚拟机: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
的报错。
操作系统真象还原第一章相关推荐
- 操作系统真象还原 第一章
参考:<操作系统真象还原>第一章 ---- 安装Vmware Station 安装Ubuntu 装载配置Bochs 安装Vmware tools 开始乘帆历险!_Love 6的博客-CSD ...
- 操作系统真象还原[11章]-用户进程
本章在内核线程的基础上实现用户进程,主要区别是内核线程运行在特权级别3下,用户进程运行在特权级别0下. Intel原生为CPU提供的多任务机制主要是LDT/TSS,关于LDT/TSS简要阐述一下,现代 ...
- 操作系统真象还原 第二章
1.创建hd60M.img yangjun@yangjun-Inspiron-7559:~/bochs$ bin/bximage =================================== ...
- 《操作系统真象还原》第九章 ---- 终进入线程动斧开刀 豁然开朗拨云见日 还需解决同步机制才能长舒气
文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 进程 线程的自我小理解 线程 进程的状态 内核级线程 & 用户级线程 初步实现内核级线程 浪费两三个小时调试的辛酸史 编写thread ...
- 《操作系统真象还原》第十四章 ---- 实现文件系统 任务繁多 饭得一口口吃路得一步步走啊(上一)
文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 部分缩写熟知 闲聊时刻 实现文件系统的原理 inode构建原理 目录构建原理 超级块构建思路 创建文件系统 编写完的super_block.h ...
- 《操作系统真象还原》第十四章 ---- 实现文件系统 任务繁多 饭得一口口吃路得一步步走啊(上二)
文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 闲聊时刻 部分缩写熟知 实现文件描述符的原理 文件描述符的介绍 文件描述符与inode的介绍 文件描述符与PCB的描述符数组的介绍 实现文件操 ...
- 《操作系统真象还原》第十三章 ---- 编写硬盘驱动软件 行百里者半九十终成时喜悦溢于言表
文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 部分缩写熟知 闲聊时刻 提前需要准备编写的函数 实现printk 实现sprintf函数 创建从盘 创建从盘的步骤 修改后的bochsrc.d ...
- 《操作系统真象还原》第十四章 ---- 实现文件系统 任务繁多 饭得一口口吃路得一步步走啊(总结篇)
文章目录 专栏博客链接 闲聊时刻 第十四章代码总览 编写完的fs.c(fs/fs.c) 编写完的fs.h(fs/fs.h) 编写完的dir.c(fs/dir.c) 编写完的dir.h(fs/dir.h ...
- 《操作系统真象还原》第五章 ---- 轻取物理内存容量 启用分页畅游虚拟空间 力斧直斩内核先劈一角 闲庭信步摸谈特权级
文章目录 专栏博客链接 相关查阅博客链接 本书中错误勘误 部分缩写熟知 + 小建议 修改代码前的小闲聊 修改loader.S(读取内存大小) 检验是否成功读取内存大小 开始分页新篇章的分页理解 一级页 ...
最新文章
- 基于HT for Web 快速搭建3D机房设备面板
- Java集合:Hashtable源码分析
- typescript 接口 java_[Java教程]【TypeScript】TypeScript 学习 2——接口
- vue中用数组语法绑定class
- Python+pywin32操作Excel文件常用功能(268行代码+注释)
- 苹果Mac电脑配置flutter开发环境
- Android-SDK下载及安装配置教程
- android cocos 二次启动 崩溃,基于cocos2dx 1.0.1 0.12.0的第二次运行时android...
- 备战蓝桥杯(4)——第九届蓝桥杯嵌入式省赛赛题实战
- android+特殊符号过滤,android 特殊符号过滤
- 微信小程序直播有哪些推广技巧?
- go zap + lumberjack 日志按大小分割demo整理
- 常用国名与首都(英文)
- 根据excel模板导出
- 自考 02326 操作系统 综合题整理
- 44.0.概率论与数理统计-估计量的评价准则,无偏性,有效性,相合性
- python乒乓球比赛规则介绍_乒乓球比赛规则常识大全
- ant--Java工程打包工具
- Python:按照像素值进行查找图片的剪切
- 杰理之无线话筒方案【篇】