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

最近在看《自己动手写操作系统》 于渊著,看第一页头就蒙了,书上说要准备一张空白软盘,都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,然后等着安装完成即可。安装后测试下:

 

01.jpg
安装完成编译器后将windows下编写好的代码拷贝到Ubuntu中用编译器编译,发现出错。编译生成的二进制文件boot.bin大小为0,并不是我们期望的512字节。
于是便在Ubuntu下用vi打开我们的汇编代码查看一下,发现:
02.jpg
在代码中出现了很多的“^M”字符。
哦,原来我用了DOS格式的文件放在了UNIX下面进行了编译,难怪编译器不认识。
注意:在DOS格式下面,回车换行是0x0D0A,而UNIX下是0x0A,所以当DOS格式文件到了UNIX下面后0x0D则会变成“^M”这个控制字符。
03.jpg
这个问题的解决也有很多种方法,而本人是直接在UE中把文件都改成用UNIX格式编辑了:
04.jpg
 
修改了格式以后,在Ubuntu下可以正确编译了!生成了一个512字节大小的二进制文件boot.bin。
 
下面就该是制作启动盘的问题了。要知道,现在的电脑想要用软盘启动已经是不可能了。但是我们有个东西叫虚拟机——它可以给我们提供一个“软盘”接口,不过同样也是个虚拟接口。
 
虚拟机我用的是VM Player,并没有去用workstation,因为新版本的player已经功能够强大了。如下图一步步建立自己的虚拟机,但是在驱动选择时,选从软盘启动。
05.jpg
06.jpg
07.jpg
08.jpg
09.jpg
我们得为软盘提供一个image文件,但之前对boot.asm文件编译后得到的是二进制文件boot.bin。网上也有很多提出的方法如何将bin文件打包成img文件,其实我们简单分析一下会发现,两者的转换其实只需要在windows下改一下后缀名!!! 原因是:img文件也就是镜像文件,原本就是对软盘中的数据进行二进制级别的拷贝备份,而我们的bin文件本身就是二进制文件,所以对于内存或者存储设备来说,在这个地方img和bin文件是完全一样的。
 
将boot.bin改后缀变成boot.img后就可以让虚拟机去加载它了。
然后去启动你的“操作系统”吧!
 
### 回答1: mingw-get-setup.exe是一个用于下载和安装MinGW(Minimalist GNU for Windows)的工具。MinGW是一个在Windows操作系统上开发和运行C和C++程序的环境。下面是使用mingw-get-setup.exe下载网盘资源的步骤: 第一步,打开MinGW官方网站(https://sourceforge.net/projects/mingw/)并下载mingw-get-setup.exe。 第二步,运行mingw-get-setup.exe安装程序,并按照指示完成安装。在安装过程中,可以选择安装MinGW的组件,如C编译器、C++编译器、调试器等。 第三步,打开网盘上存放资源的链接,找到要下载的文件。 第四步,复制文件的下载链接。 第五步,打开命令提示符或PowerShell,并导航到mingw-get安装目录(默认情况下是C:\MinGW\bin)。 第六步,在命令提示符或PowerShell中输入以下命令: mingw-get install wget 这将安装wget工具,它是一个用于从网页上下载文件的命令行工具。 第七步,在命令提示符或PowerShell中输入以下命令: wget <下载链接> 将“<下载链接>”替换为之前复制的下载链接,并运行该命令。 第八步,等待文件下载完成。下载完成后,在MinGW安装目录下可以找到下载的文件。 通过以上步骤,可以使用mingw-get-setup.exe下载网盘上的资源。请注意,该方法仅适用于文本文件、压缩文件等普通文件的下载,对于需要特殊软件或环境才能正确安装和运行的资源,可能需要额外的步骤和工具。 ### 回答2: 要使用mingw-get-setup.exe下载网盘资源,首先需要确保已经下载和安装了mingw-get-setup.exe程序。然后按照以下步骤操作: 1. 打开一个浏览器,访问网盘的官方网站。 2. 在网盘的官方网站上,找到并点击下载按钮。 3. 网盘会提示你选择下载方式,选择“mingw-get-setup.exe”作为下载方式,然后点击下载按钮。 4. 保存mingw-get-setup.exe到本地计算机上的一个目录中,例如桌面。 5. 双击运行mingw-get-setup.exe程序,会弹出一个安装向导窗口。 6. 按照安装向导的提示,选择安装目录和其他相关选项。一般来说,你可以使用默认的安装目录和选项。 7. 确认安装选择后,点击“安装”按钮开始安装。 8. 程序将会开始下载mingw-get及其所需的组件和库文件,并且自动进行安装过程。 9. 安装过程可能需要一些时间,请耐心等待。 10. 安装完成后,你可以在已选择的安装目录中找到mingw-get可执行文件。 11. 双击运行mingw-get程序,它将打开一个命令行界面。 12. 在命令行界面中,你可以使用mingw-get命令下载和安装其他软件包,例如gcc等。 13. 使用mingw-get命令以命令行的方式下载和安装你想要的网盘资源。 总之,通过下载并安装mingw-get-setup.exe,你可以方便地使用命令行方式来下载和安装网盘资源。 ### 回答3: 要使用mingw-get-setup.exe下载网盘资源,首先需要确保您的计算机上已经安装了MinGW(Minimalist GNU for Windows)。MinGW是一个自由软件开发环境,可以在Windows平台上进行C ++和其他编程语言的软件开发。 一旦安装了MinGW,您可以从官方网站(http://www.mingw.org/)上下载mingw-get-setup.exe安装程序。运行该安装程序,您将看到一个安装向导。 在安装向导中,您需要选择您的安装选项。通常,默认选项是足够的,但您也可以根据需要进行自定义配置。 安装完成后,您将通过运行mingw-get-setup.exe来安装所需的MinGW组件。打开命令提示符,导航至安装目录(通常为C:\MinGW\bin),然后键入mingw-get install <package-name>来安装特定的组件。在这里,<package-name>是您想要安装的组件的名称,例如g++,gcc等。 一旦您安装了MinGW组件,您就可以使用命令行界面或MinGW提供的相关工具来下载网盘资源。您可以使用curl或wget命令来下载文件。例如,要使用curl下载一个文件,您可以在命令提示符中输入curl <下载链接> -o <保存路径>,其中<下载链接>是网盘资源的链接,<保存路径>是您想要将文件保存到的路径和文件名。 通过这些步骤,您就可以使用mingw-get-setup.exe下载网盘资源了。请注意,确保您遵守相关法律和网盘提供商的规定,并仅在合法的情况下使用此方法下载资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值