查看: 91180|回复: 594

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

[复制链接]
  • TA的每日心情
    奋斗
    2017-1-16 20:03
  • 签到天数: 116 天

    [LV.6]常住居民II

    发表于 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.make  install
            当然了,你也可以在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
            以上步骤如下图所示
            选区_003.png
            软盘创建成功之后,我们要把刚才生成的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命令来运行虚拟机了,如下图
            选区_004.png
            这里我们才终端输入c,然后按回车运行,就可以看到下面的界面了
            选区_005.png

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

           
           
           
           
    回复

    使用道具 举报

  • TA的每日心情

    2024-10-23 14:35
  • 签到天数: 917 天

    [LV.10]以坛为家III

    发表于 2015-10-17 19:13:30 | 显示全部楼层
    攻防小组的人就是屌
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-12-20 19:06
  • 签到天数: 554 天

    [LV.9]以坛为家II

    发表于 2015-10-17 19:50:37 | 显示全部楼层
    攻防小组的人就是屌
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-28 22:22
  • 签到天数: 115 天

    [LV.6]常住居民II

    发表于 2015-10-17 23:37:17 | 显示全部楼层
    看到这 我在想要不要学习英文了呢?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2019-10-17 06:41
  • 签到天数: 182 天

    [LV.7]常住居民III

    发表于 2015-10-18 09:57:16 | 显示全部楼层
    冰琥珀好流弊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-9-11 15:40
  • 签到天数: 425 天

    [LV.9]以坛为家II

    发表于 2015-10-18 12:01:04 | 显示全部楼层
    牛逼啊,影藏的大牛
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-2 09:32
  • 签到天数: 227 天

    [LV.7]常住居民III

    发表于 2015-10-18 12:03:44 | 显示全部楼层
    冰琥珀就是吊!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-10-19 20:00:52 | 显示全部楼层
    支持,看起来不错呢!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-10-23 00:08:24 | 显示全部楼层
    还是不错的哦,顶了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-14 17:44
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2015-10-23 05:49:10 | 显示全部楼层
    支持,看起来不错呢!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-11-24 12:15 , Processed in 0.023196 second(s), 15 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部