《30天自制操作系统》笔记(03)——使用Vmware

进度回顾

上一篇,实现了用IPL加载OS程序到内存,然后JMP到OS程序这一功能;并且总结出下一步的OS开发结构。但是遇到了真机测试和U盘启动的一些问题。本篇就来解决之。

遇到的问题

物理机测试

简单来说,把软盘(U盘)做成启动盘后,自然想要用来启动物理机器。毕竟这才是真正的测试。(用QEMU总没多大的成就感)但物理机测试的麻烦在于太慢了,每次都要关掉Windows,重启,测试,然后再重启Windows。而且还没办法截图。

而用Vmware代替真机就好了,启动速度比真机快得多,还可以截图。而且对我来说Vmware比QEMU还有另一个好处,稍候说明。

用U盘代替软盘

《30天自制操作系统》的作者一直在用软盘作启动盘,而现在基本上见不到软盘了。我一开始用U盘代替软盘,没发现问题。但是在JMP到OS程序后就有问题了:JMP后计算机就没有任何反应了。这肯定是U盘和软盘的差异造成的,需要一些兼容性的汇编代码。无奈我汇编语言没好好学,目前解决不了这个问题。

解决方案

基于上述两个麻烦的问题,我发现只有用Vmware+软盘映像的方式才能顺利进行后续的学习。Vmware代替真机测试,既解决了重启慢、无法截图的问题,又可以直接把haribote.img文件当做软盘来用,这就完全虚拟出了《30天自制操作系统》中的真机环境,所以不会再有环境配置方面的问题了。

至于U盘和软盘的差异,待我学好了汇编,再来解决也不迟。而QEMU从U盘启动还得学啊学搜啊搜,用Vmware的话,在BIOS里选择启动项就好了。这也是Vmware的好处,减少要学的外围的东西。

配置Vmware

首先创建一个Vmware虚拟机,选择Typical,点击Next。

选择"I will install the operating system later.",点击next。

选择"Other",版本也选择"Other",点击next。

选择合适的名称和路径,点击next。

选择"store virtual disk as a single file",点击next。

点击finish。

点击"Edit virtual machine settings"。

选择"Floppy",选中"Connect at power on",选择"Use floppy image file:",点击Browse,找到制作好的镜像文件。选中"Read Only"。

点击OK。

启动虚拟机,在下图所示的界面处点击"F2",进入虚拟机的BIOS。

虚拟机的BIOS界面中,选择Boot,把Legacy Floppy Drives选项调到最上面。这样虚拟机就会从刚刚软盘镜像文件启动了。

配置完成,"F10"保存,虚拟机自动重启,效果如下!

成功!

总结

今后的学习过程是:

  1. 编码,用makefile编译得到*.img文件。
  2. 用make run命令启动QEMU测试。
  3. 配置"floppy image file"(如果文件名改了),启动Vmware进行测试。
  4. 等我学好了汇编(大概个把月吧),把U盘启动的代码写写,再用U盘测试。

点此查看下一篇《30天自制操作系统》笔记(04)——显示器256色

最新文章

  1. 用Canvas实现动画效果
  2. Asp.net MVC路由机制
  3. 学习git config配置文件
  4. Thinkphp内置截取字符串函数
  5. 形参是ofstream
  6. 关于C#不同位数相与或,或赋值时,隐藏位数扩展该留意的问题
  7. ASP出500错误怎么办(理论上并不止500错误,其他错误可以同样可以获得更多信息以帮助解决问题)
  8. Quartus signal tapii 的使用
  9. ie9始终提示文档预览需要最新版本的Flash Player支持的解决方法:
  10. MD5和Base64介绍与应用
  11. 取消IE“已限制此网页运行可以访问计算机的脚本,转自“园封记忆”
  12. iOS开发: 向右滑动手势功能实现
  13. Android面试题(文章内容来自他人博客)
  14. 升级IOS9,提示滑动升级,卡在password锁屏界面,无反应了
  15. HttpMime 处理 多部件 POST 请求
  16. java中模拟http(https)请求的工具类
  17. 如何获取Linux-gate.so.1动态库
  18. ORM系列之Entity FrameWork详解
  19. 【bzoj 3495】PA2010 Riddle
  20. linux 安装配置nexus以及maven私服应用

热门文章

  1. android源码环境下用mmm/mm编译模块,输出编译log到文件的方法
  2. ubuntu 12.10 sourcelist软件更新源列表(zz)
  3. 【Java学习笔记】集合转数组---toArray()
  4. OD使用教程8
  5. 【日常小问题】windows系统操作技巧
  6. javascript code snippet -- Forwarding Mouse Events Through Layers
  7. 安卓奇葩问题之:返回按键监听,使Dialog不消失
  8. 三种Scriptlet总结
  9. iptables之LOG目标 被拦截包分析
  10. linux进程间通信-共享内存