美文网首页
从头写一个操作系统 08

从头写一个操作系统 08

作者: 半步江南 | 来源:发表于2019-04-13 14:33 被阅读0次

    版权提示:授权steem@geyu使用

    bochs.png

    我们一直用qemu来装载.bin文件,模拟计算机启动的过程,qemu很好,后面我们会讲到如何用gdb调试qemu,只能用强大来形容。

    喜欢折腾的人,永远都不会闲下来,就像用vmware将二进制文件作为启动盘,用qemu模拟树莓派的启动一样,对于学习来说是有意义的。
    今天介绍另一个很好用的虚拟机:bochs。

    bochs完全用软件模拟了整个X86计算机的硬件逻辑,然后在其虚拟的硬件上插入虚拟的软盘,砰,系统就启动了。这世界本身就是信息,无论是真实的,还是虚拟的,只要对外输出一样的数据,我们是无法感知它们的区别,就像阿里云,我们以为在使用一台独立的主机,但实际上是一个服务器中小小的vamwar虚拟机。

    扯远了,bochs比vmware虚拟得彻底的多,vmware总是希望让能在cpu上跑的指令就在cpu上跑,bochs完全不依赖硬件,cpu在其上不过是一个不断轮询、等待信息的函数。bochs与真实机器几乎没有区别,整个模拟过程接近于现实,当然qemu也是同样的原理。

    用bochs的原因依然是集思广益,由于bochs专业性,debug的选项与gdb调试qemu是有些区别的,到底哪个好现在没有客观的评价,所以最好都会用,遇到问题多一个分析角度。

    下面是介绍bochs在ubuntu18上的安装步骤,fedora28也测试过,需要下载库的名字与ubuntu上稍有区别:

    1.下载bochs:

    https://sourceforge.net/projects/bochs/files/bochs/2.6.9/bochs-2.6.9.tar.gz/download

    2.解压

    tar vxzf bochs-2.6.9.tar.gz
    

    3.运行configure脚本

    简书上有个大神的帖子里有建议:
    注意:其中--prefix是安装地址

    cd bochs-2.6.9
    ./configure --prefix=/home/happy/Documents/bochs --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11
    

    也可以简单的:

    cd bochs-2.6.9
    ./configure --enable-debugger --enable-disasm  
    

    4.make

    make
    sudo make install
    

    最后,建立软链接:

    cd /bin 
    ln -s ~/bochs.2.6.9/bochs /bin/bochs 
    ln -s ~/bochs.2.6.9/bximage /bin/bximage
    

    错误排查:

    1.出现 找不到X11/Xlib.h 错误:x11/xlib.h no such file or directory
    ubuntu:

    sudo apt-get install libx11-dev 
    

    fedora:

    sudo dnf install libX*
    

    如果未解决,执行下面指令再试:

    make dist-clean
    ./configure --enbale-debugger --enable-disasm
    make
    make install
    

    使用bochs的方法:

    1.创建硬盘镜像 1->hd -> enter->enter...

    bximage
    

    2.nasm编译bin文件

    nasm boot.asm -o boot.bin
    

    3.dd写入镜像文件

    dd if=boot.bin of=c.img bs=512 count=1 conv=notrunc
    

    4.修改bochsrc.txt
    如果按照上面的步骤,使用下面的bochsrc.txt即可:

    ###############################################################
    # bochsrc.txt file for DLX Linux disk image.
    ###############################################################
    
    # how much memory the emulated machine will have
    megs: 32
    
    # filename of ROM images
    romimage: file=$BXSHARE/BIOS-bochs-latest
    vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
    
    # what disk images will be used 
    floppya: 1_44=floppya.img, status=inserted
    floppyb: 1_44=floppyb.img, status=inserted
    
    # hard disk
    ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
    #ata0-master: type=disk, path="c.img", cylinders=306, heads=4, spt=17
    ata0-master: type=disk, path="c.img", mode=flat
    # choose the boot disk.
    boot: c
    
    # default config interface is textconfig.
    #config_interface: textconfig
    #config_interface: wx
    
    #display_library: x
    # other choices: win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga
    
    # where do we send log messages?
    log: bochsout.txt
    
    # disable the mouse, since DLX is text only
    mouse: enabled=0
    
    # set up IPS value and clock sync
    cpu: ips=15000000
    clock: sync=both
    
    # enable key mapping, using US layout as default.
    #
    # NOTE: In Bochs 1.4, keyboard mapping is only 100% implemented on X windows.
    # However, the key mapping tables are used in the paste function, so 
    # in the DLX Linux example I'm enabling keyboard_mapping so that paste 
    # will work.  Cut&Paste is currently implemented on win32 and X windows only.
    
    keyboard: keymap=$BXSHARE/keymaps/x11-pc-us.map
    #keyboard: keymap=$BXSHARE/keymaps/x11-pc-fr.map
    #keyboard: keymap=$BXSHARE/keymaps/x11-pc-de.map
    #keyboard: keymap=$BXSHARE/keymaps/x11-pc-es.map
    

    5.启动bochs,如果c.img文件没有问题,弹出的bochs窗口中选择6,然后bochs停在黑屏状态,在shell中输入c即可运行系统

    相关文章

      网友评论

          本文标题:从头写一个操作系统 08

          本文链接:https://www.haomeiwen.com/subject/adphwqtx.html