冰琥珀 发表于 2015-10-17 18:50:57

自己动手写操作系统系列之----------搭建开发环境

本帖最后由 冰琥珀 于 2015-10-17 18:59 编辑

        操作系统,一个庞大而又复杂的世界,让无数想学习它的同学望而却步。虽然市面上也有很多关于操作系统的书籍,但很多都是描述型的,不能自己亲自动手实践,而且又都是大部头书,往往都是看了后面就忘了前面。几年前,于渊的自己动手写操作系统横空出世,让我们自己编写一个小型的操作系统成为了可能,从今天起,我们就一起来学习下这本书,一起自己动手编写一个微型的操作系统,相信当我们学完了这本书之后,再去看其他的书籍,就不会再是云里雾里。
        相关资料:http://pan.baidu.com/s/1kTERffx
        首先我们需要一台安装有linux系统的机器(可以是虚拟机),我自己的电脑装的ubuntu15.04,接下来需要安装bochs,步骤如下
        1.下载bochs,网址:http://bochs.sourceforge.net/
        2.解压下载的压缩包
        3.运行./configure --enable-debugger --enable-disasm
        4.make
        5.makeinstall
        当然了,你也可以在ubuntu下直接运行sudo apt-get install bochs bxinmage来安装,安装完成后,我们需要一个配置文件,这样才能启动bochs,网上有很多的配置文件,我这里给出一个很简单的配置文件,其实也是网上copy下来的
###############################################################
# Configuration file for Bochs
###############################################################

# how much memory the emulated machine will have
megs: 32

# filename of ROM images
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest

# what disk images will be used
floppya: 1_44=a.img, status=inserted

# choose the boot disk.
boot: floppy

# where do we send log messages?
# log: bochsout.txt
# disable the mouse
mouse: enabled=0

# enable key mapping, using US layout as default.
keyboard_mapping: enabled=1, map=/usr/local/share/bochs/keymaps/x11-pc-us.map
        需要注意的就是要根据实际情况修改下列的路径(可能是/usr/share/bochs 或/usr/local/share/bochs)
        romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
        vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest
        还需要注意的一点就是,如果是下载最新的安装包,可能keyboard_mapping: enabled=1, map要改为keyboard:keymap
        上面这些做好之后,我们就可以通过命令
        bochs -f bochsrc.bxrc
        来运行bochs,其中bochsrc.bxrc 是上面的配置文件名。
        虚拟机安装好了,接下来我们要安装nasm,直接运行$sudo apt-get install nasm来安装即可。到了这里,前期的准备工作基本完成,下面我们就开始写一个简单的程序来做下测试,代码如下
        org 0x7c00

        mov ax, cs
        mov ds, ax
        mov es, ax
        mov ss, ax

        call DispMsg
        jmp $

DispMsg:
        mov ax, Message
        mov bp, ax
        mov cx, 0x0a
        mov dx, 0x1500
        mov bx, 0x000c
        mov ax, 0x1301
        int 0x10
        ret

Message:        db        "Hello, OS!"
times        510-($-$$) db 0
                dw 0xaa55
        文件名保存为Boot.asm,然后我们通过如下命令来编译
        $sudo nasm Boot.asm -o Boot.bin
        编译完成后,我们需要在bochs中运行,在这里我们需要创建一个软盘,步骤如下
        1.$sudo bximage,在界面中输入1,然后按下回车
        2.我们选择创建软盘,所以这里输入fd
        3.这里我们使用默认的大小,所以直接按回车
        4.输入软盘的名子,默认为a.img
        以上步骤如下图所示
       
        软盘创建成功之后,我们要把刚才生成的Boot.bin写入软盘中,命令如下
        $sudo dd if=Boot.bin of=boot.img bs=512 count=1 conv=notrunc
        上面的命令需要根据自己的实际情况设置输入(if)和输出(of)文件路径,完成了之后,我们就把这个img文件放到bochsrc.bxrc同目录下,并修改bochsrc.bxrc中floppya: 1_44=a.img, status=inserted的a.img为刚才创建的img文件,这些都做好了之后,我们就可以使用bochs -f bochsrc.bxrc命令来运行虚拟机了,如下图
       
        这里我们才终端输入c,然后按回车运行,就可以看到下面的界面了
       

        上面的代码也很简单,就只是调用了一个显示函数,在屏幕中显示"Hello, OS!",有一点汇编基础的都能看懂,唯一要注意的就是下面这两行代码
        times        510-($-$$) db 0
                        dw 0xaa55
        因为我们是直接把代码写在引导记录里,而引导记录占用一个扇区(512个字节),最后两个字节是0xaa55,剩下的全部用0填充,所以是510-($-$$),其中$是当前代码行的地址,$$是当前段的地址,因为我们这里只用了一个段,所以当前代码行减去当前段就等于除去我们所写代码占用的字节后,剩余的字节数
        这篇只是开始,相对来说比较简单,我们就将到这,接下来我们会讲怎么通过引导记录来找到内核并加载,汇编不太熟悉的同学可以去看看王爽的汇编语言
        有不明白的就回帖提问,灌水就免了,如果灌水太多我可能就不会继续更新下去,所以希望大家能自觉

       
       
       
       

浮尘 发表于 2015-10-17 19:13:30

攻防小组的人就是屌:Q

昊情· 发表于 2015-10-17 19:50:37

攻防小组的人就是屌

梦魇CP9 发表于 2015-10-17 23:37:17

看到这 我在想要不要学习英文了呢?

小圈圈 发表于 2015-10-18 09:57:16

冰琥珀好流弊

wuyan 发表于 2015-10-18 12:01:04

牛逼啊,影藏的大牛

H.U.C-Star 发表于 2015-10-18 12:03:44

冰琥珀就是吊!

arctic 发表于 2015-10-19 20:00:52

支持,看起来不错呢!

asion 发表于 2015-10-23 00:08:24

还是不错的哦,顶了

cl476874045 发表于 2015-10-23 05:49:10

支持,看起来不错呢!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 自己动手写操作系统系列之----------搭建开发环境