最近在看《自己动手写操作系统》 于渊著,看第一页头就蒙了,书上说要准备一张空白软盘,都2010年了,上哪去找软盘啊,自从接触计算机以来我还没见过软盘呢,估计要到科技博物馆才找得到吧,呵呵。 其实在第二章-搭建你的工作环境 中作者提到其实并不需要用真正的软盘,用虚拟软盘映像就可以了,也就是*.IMG文件,反过来想想,连计算机都可以虚拟,软盘当然也可以虚拟了。软盘映像文件并不需要自己制作,随书附赠的光盘中的源代码里面就有(TINIX.IMG),将自己写的汇编源代码编译成*.bin文件后使用作者提供的软盘绝对扇区读写工具FloppyWriter将*.bin写入到TINIX.IMG,这样一张虚拟的引导盘就完成了。FloppyWriter工具在光盘的Tools文件夹中。如果没有光盘也不要紧,可以在博文视点网站下载,网址是:http://www.broadview.com.cn/01577 (需要先登录),也可以在http://osfromscratch.org/downloadcn 下载源代码。
   
一、 开始搭建工作环境:
    1. 一台计算机(Windows操作系统)
    2. 虚拟机 VirtualBox
       可以在官网下载,下载地址:http://www.virtualbox.org/wiki/Downloads
       之所以选择VirtualBox是因为它是开源免费的,速度也可以,作者使用的虚拟机是Virtual PC 5.0,该虚拟机是商业软件,5.0版本的比较难找,网上可以找到5.2版本的,但我下载安装后不能正常运行,提示不能在PAE模式下运行,虽然网上可以找到解决方案,需要对电脑做些配置,但觉得麻烦,个人还是喜欢用VirtualBox,下载安装后没有任何问题。
    3. NASM 汇编编译程序
      下载地址:http://sourceforge.net/projects/nasm
      或者官网下载:http://www.nasm.us/pub/nasm/releasebuilds/
      这个是用来编译我们写的汇编程序的,以前常用MASM,但作者推荐这个。
    4. 软盘绝对扇区读写工具 FloppyWriter.exe
       在随书附赠的光盘中提供,在OS/Tools/FloppyWriter/Release文件夹下,运行 该程序有两个按钮可以选择,使用软盘映像的话使用下面那个Write File To Image。前面提到,如果没有光盘,可以去网上去下载光盘中的内容。
    5. 源代码编辑器
       可以用记事本,也可以用其他编辑工具。

二、写一个小的“操作系统”
     1.编写源代码:(书上有)
       ;boot.asm
      org 07c00h      ;告诉编译器程序加载到7c00处
       mov ax, cs
       mov ds, ax
       mov es, ax
       call DispStr    ;调用显示字符串例程
       jmp $           ;无限循环
DispStr:
       mov ax, BootMessage
       mov bp, ax       ;es:bp=串地址
       mov cx, 33
       mov ax, 01301h   ;ah=13, al=01h
       mov bx, 000ch    ;页号为0(bh=0) 黑底红字(bl=0ch,高亮)
       mov dl, 0
       int 10h          ;10h 号中断
       ret
BootMessage:       db  "Hello lijie, Welcome to OS World!"
times  510-($-$$)  db 0 ;填充剩下的空间,使生成的二进制代码恰好为512字节
dw     0xaa55           ;结束标志
   
     2. 编译 boot.asm
      安装或解压缩NASM后,将NASM的安装目录加到PATH环境变量中后就可以在命令行的任何目录下使用NASM命令。进入到源代码所在目录,输入命令 nasm boot.asm -o boot.bin 后回车便完成了源代码的编译。
     3.将boot.bin写到TINIX.IMG
       从光盘源代码中复制TINIX.IMG文件到你的源代码目录下,运行FloppyWriter.exe,点击Write File To Image,分别在弹出窗口中选择boot.bin和TINIX.IMG,提示成功 OK。
     4. 在虚拟机中运行
       a.在虚拟机中新建一台PC
        启动VirtualBox->新建->名称任意取,操作系统选Other,Version选Other/Unknown->内存默认(可改变)->创建新的虚拟硬盘->动态扩展->选择虚拟硬盘的保存地址或默认,大小默认(可改变)->完成。
       b.将TINIX.IMG注册到VirtualBox
        管理(F)->虚拟介质管理(V)->虚拟软盘(F)->注册(A)->在弹出窗口中找到刚刚制作完成的TINIX.IMG打开->确定。
       c.运行刚刚创建的PC

选择刚刚创建的PC->开始->首次运行向导->下一步->介质类型选软驱,介质位置选刚刚注册的TINIX.IMG->下一步->完成。OK,应该可以看到哪一行黑底红字了吧,呵呵。

第二种方法:

最近在业余阅读时找到一本《自己动手编写操作系统》觉得不错,视角很新颖,是有关操作系统书籍中为数不多的看了不想睡觉的读本。

由于这本书的出版时间较早,书中引导盘还使用的是软盘,所以在跟随做的第一个实验代码时就遇到些小困难。最后实验成果后在此做个记录。

书中第一个实验就是编写一段汇编代码作为引导程序,编译后将二进制文件写入到引导盘(书中采用的是软盘),然后让电脑从软盘启动进而执行我们的引导程序。

首先给出书中的引导程序——boot.asm


org 07c00h
    mov    ax,    cs
    mov    ds,    ax
    mov    es,    ax
    call DispStr
    jmp $
DispStr:
    mov    ax,    BootMessage
    mov    bp,    ax
    mov    cx,    16
    mov    ax,    01301h
    mov    bx,    000ch
    mov    dl,    0
    int    10h
    ret
BootMessage:    db    "Hello, OS world!"
    times    510-($-$$)    db    0
    dw 0xaa55


下面则需要对这段汇编代码进行编译,于是我们就遇到了第一个问题:选择什么样的编译器?如何编译代码?

书中推荐了使用NASM,至于为什么要选择NASM,大家可以百度一下NASM诞生的故事,它的诞生就是因为诸多汇编编译器的种种劣势,最后催生出NASM这个比较好用的编译器。

安装NASM。NASM没有图形化界面,要么装在DOS下,要么装在Linux下。本人的电脑是WIN8+Ubuntu的虚拟机,所以果断选择在Ubuntu中安装了NASM,只需要在终端敲上apt-get install nasm,然后等着安装完成即可。安装后测试下:

安装完成编译器后将windows下编写好的代码拷贝到Ubuntu中用编译器编译,发现出错。编译生成的二进制文件boot.bin大小为0,并不是我们期望的512字节。
于是便在Ubuntu下用vi打开我们的汇编代码查看一下,发现:
在代码中出现了很多的“^M”字符。
哦,原来我用了DOS格式的文件放在了UNIX下面进行了编译,难怪编译器不认识。
注意:在DOS格式下面,回车换行是0x0D0A,而UNIX下是0x0A,所以当DOS格式文件到了UNIX下面后0x0D则会变成“^M”这个控制字符。
这个问题的解决也有很多种方法,而本人是直接在UE中把文件都改成用UNIX格式编辑了:
修改了格式以后,在Ubuntu下可以正确编译了!生成了一个512字节大小的二进制文件boot.bin。
下面就该是制作启动盘的问题了。要知道,现在的电脑想要用软盘启动已经是不可能了。但是我们有个东西叫虚拟机——它可以给我们提供一个“软盘”接口,不过同样也是个虚拟接口。
虚拟机我用的是VM Player,并没有去用workstation,因为新版本的player已经功能够强大了。如下图一步步建立自己的虚拟机,但是在驱动选择时,选从软盘启动。
我们得为软盘提供一个image文件,但之前对boot.asm文件编译后得到的是二进制文件boot.bin。网上也有很多提出的方法如何将bin文件打包成img文件,其实我们简单分析一下会发现,两者的转换其实只需要在windows下改一下后缀名!!!原因是:img文件也就是镜像文件,原本就是对软盘中的数据进行二进制级别的拷贝备份,而我们的bin文件本身就是二进制文件,所以对于内存或者存储设备来说,在这个地方img和bin文件是完全一样的。
将boot.bin改后缀变成boot.img后就可以让虚拟机去加载它了。
然后去启动你的“操作系统”吧!

《自己动手写操作系统》—— 工作环境搭建相关推荐

  1. 自己动手写操作系统之环境构建篇

    自己动手写操作系统之环境构建篇 最近开始看自己动手写操作系统,但是书中采用软盘启动很是郁闷,于是想是否可以从优盘启动呢?作为一名BIOS工程师,曾经用优盘启动过dos,linux等系统,于是做了如下尝 ...

  2. 自己动手写操作系统0

    文章目录 自己动手写操作系统0 环境搭建 NASM VirtualBox 添加软盘启动 VMware 开启虚拟机 其他软件 Floppy 自己动手写操作系统0 参考余渊老师写的<自己动手写操作系 ...

  3. 全面剖析《自己动手写操作系统》第四章---加载Loader.bin

    全面剖析<自己动手写操作系统>第四章--FAT12文件系统    http://blog.csdn.net/zgh1988/article/details/7284834 1.突破512字 ...

  4. 自己动手写操作系统——(1)将引导写入U盘

    为什么写博客呢,想了一下,首先是为了给自己留着复习用,因为时间一长,肯定有好多东西会忘记的,在这里留个记录,以后再整理起来就不会太麻烦了:再者是为了分享一下经验,由于在下比较愚笨,说不定在哪个方面就理 ...

  5. 自己动手写操作系统--个人实践

    近期開始看于渊的<自己动手写操作系统>这本书,刚開始看就发现做系统的引导盘居然是软盘!心里那个汗啊! 如今都是U盘了,谁还用软盘.于是考虑用U盘. 于是開始下面步骤: 1.既然书上说给先要 ...

  6. 「操作系统」《自己动手写操作系统》1.1前期准备工作

    一.软硬件 1.硬件 一台计算机(笔者使用的是Win7 x64操作系统) 2.软件 点击此处下载<自己动手写操作系统>的光盘配套文件以及相应工具 汇编编译器:NASM(资源文件中有) 软盘 ...

  7. 自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)

    自己动手写操作系统(开篇) 自己动手写操作系统(字符显示) 说明:Intel 8086 或者不同的处理器,开机寄存器数据可能不一样,但是大致原理差不多 了解过计算机启动的同学肯定知道,当计算机启动的时 ...

  8. 《自己动手写操作系统》读书笔记——初识保护模式

    <自己动手写操作系统>读书笔记--初识保护模式 http://www.cnblogs.com/pang123hui/archive/2010/11/27/2309930.html 书本第三 ...

  9. 磨刀不误砍柴工 —— 自己动手写操作系统 入门导引

    磨刀不误砍柴工 刺猬@http://blog.csdn.net/littlehedgehog <自己动手写操作系统>其实阅读所需要的前提不过只是C和汇编了,里面涉及到很多操作系统的东西.于 ...

  10. 磨刀不误砍柴工 ——《自己动手写操作系统》入门导引

    磨刀不误砍柴工 刺猬@http://blog.csdn.net/littlehedgehog <自己动手写操作系统>其实阅读所需要的前提不过只是C和汇编了,里面涉及到很多操作系统的东西.于 ...

最新文章

  1. python的快速入门-Python快速入门,你想要的就在这里了!
  2. 《JAVA与模式》之单例模式
  3. mfc exe 在繁体系统 乱码_MC32/MC92 自带TelnetCE界面部分字符乱码解决方案
  4. Java RMI(1):HelloWorld篇
  5. Spring事务CallbackPreferringPlatformTransactionManager
  6. Apache Camel 2.20发布–新增功能
  7. 7-4 统计工龄 (20 分)(C语言实现)
  8. mysql 5.5.29 winx64_【转载】MySQL 5.7.29详细下载安装配置教程winx64
  9. 北漂九年 ,雷军终于买房了:壕掷52亿元
  10. 动态场景下的语义SLAM的简单实现(基于YOLOv5目标检测)
  11. 计算机数值数据编码(原码,反码,补码,移码)
  12. 【转载】log4j日志
  13. win激活时错误0xc0000022
  14. java的h2是什么_什么是H2数据库
  15. CnOpenData中国各行业工商注册企业分年份数量统计(含新增,注销企业数量)
  16. 1-第一篇入住博客自我介绍
  17. 荣耀发布开发者服务平台,智慧生态合作提速
  18. 数图:中值滤波python实现
  19. svn add --no-ignore
  20. 【玩转数据系列四】听说啤酒和尿布很配?本期教你用协同过滤做推荐

热门文章

  1. 日本现代数学发展历程及其启示
  2. openwrt 自动签到插件-食用指南
  3. win7卡在正在启动windows界面_重装win7系统到启动/开机画面就死机解决措施
  4. 论Acmer的自我修养 (算法学习目标和推荐题目)
  5. (4.2.48)MVPArms源码分析
  6. cad图纸怎么看懂_教你看懂CAD图纸
  7. 使用Windbg分析蓝屏原因
  8. CMS网站页面管理开发汇总
  9. Filmage Screen for Mac 专业录屏软件用这个就足够
  10. android 反编译jar包