在Linux下使用Bochs参考:

http://wangcong.org/articles/bochs.html

http://kinglaw05.blog.163.com/blog/static/59683314200911205510345/

首先,安装libgtk2.0-dev,build-essential库

   1: sudo apt-get install libgtk2.0-dev build-essential

然后下载最新的bochs源码,解压

   1: sudo wget http://bochs.sourceforge.net/svn-snapshot/bochs-20140211.tar.gz

   2: sudo gzip -d bochs-20140211.tar.gz

   3: sudo tar -xvf bochs-20140211.tar

   4: cd bobochs-20140211

配置

将.conf.linux修改成下面模样:

   1: #!/bin/sh

   2: #

   3: # .conf.linux

   4: #

   5:  

   6: #which_config=normal

   7: which_config=plugins

   8:  

   9: CC="gcc"

  10: CXX="c++"

  11: CFLAGS="-Wall -O3 -fomit-frame-pointer -pipe"    # for speed

  12: #CFLAGS="-Wall -g -pipe"                         # for development

  13: CXXFLAGS="$CFLAGS"

  14:  

  15: export CC

  16: export CXX

  17: export CFLAGS

  18: export CXXFLAGS

  19:  

  20:  

  21: case $which_config in

  22:  

  23:   normal)

  24:  

  25:     #######################################################################

  26:     # configuration 1 for release binary RPMs

  27:     # Include a few standard options, speed optimizations, X11 only.

  28:     #######################################################################

  29:     ./configure --enable-sb16 \

  30:                 --enable-ne2000 \

  31:                 --enable-all-optimizations \

  32:                 --enable-cpu-level=6 \

  33:                 --enable-x86-64 \

  34:                 --enable-vmx=2 \

  35:                 --enable-pci \

  36:                 --enable-clgd54xx \

  37:                 --enable-voodoo \

  38:                 --enable-usb \

  39:                 --enable-usb-ohci \

  40:                 --enable-es1370 \

  41:                 --enable-e1000 \

  42:                 --enable-show-ips \

  43:         --enable-debugger \

  44:         --enable-disasm

  45:                 ${CONFIGURE_ARGS}

  46:     ;;

  47:  

  48:   plugins)

  49:     #######################################################################

  50:     # configuration 2 for release binary RPMs

  51:     # Include plugins, every possible gui.

  52:     #######################################################################

  53:     ./configure --enable-sb16 \

  54:                 --enable-ne2000 \

  55:                 --enable-all-optimizations \

  56:                 --enable-cpu-level=6 \

  57:                 --enable-x86-64 \

  58:                 --enable-vmx=2 \

  59:                 --enable-pci \

  60:                 --enable-clgd54xx \

  61:                 --enable-voodoo \

  62:                 --enable-usb \

  63:                 --enable-usb-ohci \

  64:                 --enable-usb-xhci \

  65:                 --enable-es1370 \

  66:                 --enable-e1000 \

  67:                 --enable-plugins \

  68:                 --enable-show-ips \

  69:                 --with-all-libs \

  70:         --enable-debugger \

  71:         --enable-disasm

  72:                 ${CONFIGURE_ARGS}

  73:     ;;

  74:  

  75: esac

修改完后,执行sudo bash .conf.linux脚本进行配置

安装

   1: sudo make

   2: sudo make install

http://bochs.sourceforge.net/diskimages.html,下载一个已经配置好的img.

   1: sudo wget http://bochs.sourceforge.net/guestos/dlxlinux4.tar.gz

   2: sudo gzip -d dlxlinux4.tar.gz

   3: sudo tar -xvf dlxlinux4.tar

   4: cd dlxlinux4

   5: bochs -q -f bochsrc.txt

就进入了调试状态

   1: daniel@ubuntu:~/linux-3.0/bochs/dlxlinux$ bochs -q -f dlxlinux.bxrc 

   2: ========================================================================

   3:                      Bochs x86 Emulator 2.6.2.svn

   4:               Built from SVN snapshot after release 2.6.2

   5:                   Compiled on Feb 14 2014 at 01:21:35

   6: ========================================================================

   7: 00000000000i[      ] LTDL_LIBRARY_PATH not set. using compile time default '/usr/local/lib/bochs/plugins'

   8: 00000000000i[      ] BXSHARE not set. using compile time default '/usr/local/share/bochs'

   9: 00000000000i[      ] lt_dlhandle is 0xa956340

  10: 00000000000i[PLUGIN] loaded plugin libbx_unmapped.so

  11: 00000000000i[      ] lt_dlhandle is 0xa9569d0

  12: 00000000000i[PLUGIN] loaded plugin libbx_biosdev.so

  13: 00000000000i[      ] lt_dlhandle is 0xa956fb0

  14: 00000000000i[PLUGIN] loaded plugin libbx_speaker.so

  15: 00000000000i[      ] lt_dlhandle is 0xa9577d8

  16: 00000000000i[PLUGIN] loaded plugin libbx_extfpuirq.so

  17: 00000000000i[      ] lt_dlhandle is 0xa957d28

  18: 00000000000i[PLUGIN] loaded plugin libbx_parallel.so

  19: 00000000000i[      ] lt_dlhandle is 0xa959160

  20: 00000000000i[PLUGIN] loaded plugin libbx_serial.so

  21: 00000000000i[      ] lt_dlhandle is 0xa95c400

  22: 00000000000i[PLUGIN] loaded plugin libbx_gameport.so

  23: 00000000000i[      ] lt_dlhandle is 0xa95c9b8

  24: 00000000000i[PLUGIN] loaded plugin libbx_iodebug.so

  25: 00000000000i[      ] reading configuration from dlxlinux.bxrc

  26: 00000000000i[      ] lt_dlhandle is 0xa95cf28

  27: 00000000000i[PLUGIN] loaded plugin libbx_x.so

  28: 00000000000i[      ] installing x module as the Bochs GUI

  29: 00000000000i[      ] using log file bochsout.txt

  30: Next at t=0

  31: (0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0

  32: <bochs:1> ^C

按下Ctrl+Z可以退出调试程序

关于调试指令,可以参见http://bochs.sourceforge.net/cgi-bin/topper.pl?name=New+Bochs+Documentation&url=http://bochs.sourceforge.net/doc/docbook/user/index.html

dlxlinux内核有一个缺点,就是内核太老了,是1.3版本。

在Bochs img列表中,还有一项

Linux kernel image for x86-64 from Andi Kleen at SuSE, which can be used as a boot floppy. Here is the System.map file for it, which can be useful for debugging.

这里只提供了一个linux内核映像,是bzImage格式,作为floppy挂载可以启动内核,但是提示找不到根文件系统。因此,我们需要自己搞定根文件系统。

不想从头做一个根文件系统,就可以将dlxlinux的拷贝过来用。

怎样将root.img挂载到当前的目录中?

因为root.img里面包含着MBR以及第一个分区,而且第一个分区并不是紧跟在MBR后面,怎么能够知道第一个分区的位置呢?

可以查看MBR中的分区表记录

   1: dlxlinux $ hd root.img -s 446 | head

   2: 000001be  00 01 01 00 83 03 51 31 

11 00 00 00 37 51 00 00

  |......Q1....7Q..|

   3: 000001ce  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

   4: *

   5: 000001fe  55 aa 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |U...............|

   6: 0000020e  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

   7: *

   8: 000025fe  00 00 30 0a 00 00 9b 28  00 00 07 02 00 00 a6 1c  |..0....(........|

   9: 0000260e  00 00 b1 07 00 00 01 00  00 00 00 00 00 00 00 00  |................|

  10: 0000261e  00 00 00 20 00 00 00 20  00 00 18 05 00 00 b4 7a  |... ... .......z|

  11: 0000262e  ff 52 79 17 ff 52 1e 00  14 00 53 ef 00 00 01 00  |.Ry..R....S.....|

红色部分分别代表第一个分区的起始扇区号为0x00000011,扇区个数为0x00005137。

因此, 我们可以用下面命令将root.img挂载起来。

   1: sudo mkdir root

   2: sudo mount -o loop,offset=8704 root.img ./root

其中,8704=0x11 * 0x200

自己创建一个img,并且将一个文件系统塞进去,并且制作分区表。

http://archive09.linux.com/forums/topic/1519

http://thestarman.pcministry.com/asm/mbr/PartTables.htm

http://aneeska.com/2011/04/07/how-to-create-a-partition-in-an-image-file/

   1: losetup /dev/loop0 root.img

   2: mkfs.ext3 /dev/loop0 

   3: mount /dev/loop0 ./root

   4: # copy files to ./root

   5: umount ./root 

   6: losetup -d /dev/loop0


给img扩容

   1: sudo dd if=/dev/zero of=bigroot.img bs=1024 seek=10404 count=5120

   1: fdisk -u bigroot.img -c=dos

打造一个自己的根文件系统,使用指定的Linux内核文件,再加上Grub用于启动。

参考:http://blog.csdn.net/deansrk/article/details/6661293

http://blog.chinaunix.net/uid-26207112-id-3332621.html

但是无法进入

将linux.vdi文件作成linux.img文件,用Bochs进行调试,并且参考System.map中给出的线性地址进行断点设置,发现有执行到/sbin/init初始化任务

   1: do_execve

   2: do_execve_common

   3: open_execve

   4: do_filp_open

   5: path_openat

返回了-1(#define    EPERM         1    /* Operation not permitted */)

即操作不允许错误。

   1: static struct file *path_openat(int dfd, const char *pathname,

   2:         struct nameidata *nd, const struct open_flags *op, int flags)

   3: {

   4:  

   5:     current->total_link_count = 0;

   6:     error = link_path_walk(pathname, nd);

   7:     if (unlikely(error))

   8:         goto out_filp;

   9:  

  10: }

在Linux下编译带调试功能的Bochs的更多相关文章

  1. ubuntu安装带调试功能的bochs

    ①进入bochs官网下载源码包 说明 用安装包直接安装没有调试功能 下载源码包步骤 a.输入网址:http://bochs.sourceforge.net/ b.单击图中红色标注图标 c.单击图中红色 ...

  2. Linux下编译与调试

    gcc/g++编译器 对于.c格式的C文件,可以采用gcc或g++编译 对于 .cc..cpp格式的C++文件,应该采用g++进行编译 常用的选项: -c  表示编译源文件 -o  表示输出目标文件 ...

  3. Linux下编译带x264的ffmpeg的配置方法,包含SDL2

    一.环境准备 ffmpeg下载:http://www.ffmpeg.org/download.html x264下载:http://download.videolan.org/x264/snapsho ...

  4. FFmpeg之Linux下编译与调试

    注:下面的一切都是在 root 模式下进行的,可以不再 root 模式下进行 1. 安装linux的基础环境 基础环境就是编译代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定,这里列出语 ...

  5. linux下编译qt5.6.0静态库——configure配置

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  6. linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  7. linux下编译qt5.6.0静态库(使用./configure --help来看看都有哪些参数。超详细,有每一个模块的说明。如果改变了安装的目录,需要到安装目录下的bin目录下创建文件qt.conf)(乌合之众)good

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  8. linux下编译gcc6.2.0

    linux下编译gcc6.2.0 在archlinx的下gcc已经更新到6.2.1了,win10的WSL下还是gcc4.8.官方源没有比较新的版本,于是自己编译使用. GCC6的几个新特性 GCC 6 ...

  9. Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)

    参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Lin ...

随机推荐

  1. MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.

    mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...

  2. TP5.0 where数组高级查询

    多条件模糊查询多条件比较查询使用数组可以方便得将一些比较复杂的查询条件 , 组合到一个数组之内 如以下数据库查询 $subjectList = Db::name('user_apply') -> ...

  3. embed元素 autostart false 失效时的解决方法

    embed元素 autostart false 失效时的解决方法 最近在工作中碰到了在网页中嵌入播放器播放声音文件的需求,最后使用了embed元素 代码如下: <embed src='1093. ...

  4. MySQL-视图上进行增删改查

    https://dev.mysql.com/doc/refman/5.7/en/view-updatability.html https://dev.mysql.com/doc/refman/8.0/ ...

  5. python模块学习之HTMLTestRunner模块生成HTML测试报告

    #!/usr/bin/env python #-*- coding:utf-8 -*- from HTMLTestRunner import HTMLTestRunner import time im ...

  6. Qt4 QWebView的使用例子

    最近项目中使用QT4框架开发PC端软件,所以耐着性子学习了一下QT相关的东西. 下面是QT4中QWebView的使用方法,觉得蛮方便的. 我使用的开发环境是:Win7+Qt 4.8.5开发库+qtcr ...

  7. linux Cron 定时任务(centos 7.2 测试可用)

    1.Cron(学习笔记) 计划任务,是任务在约定的时间执行已经计划好的工作. 格式如下 Seconds Minutes Hours DayofMonth Month DayofWeek Year    ...

  8. 晒订单赢图灵图书,《第一行代码——Android》福利活动劲爆来袭!

    版权声明:本文出自郭霖的博客,转载必须注明出处. https://blog.csdn.net/sinyu890807/article/details/28863515 (已结束) 我的著作<第一 ...

  9. ubuntu中搭建基本的开发环境

    1.搭建基本开发环境: sudo apt-get install build-essential 2.安装语法.词法分析器 sudo apt-get install bison flex 3.安装C函 ...

  10. 【代码健壮性】善用data-属性来关联,慎用parent()之类的查找结构

    $(".minus,target").unbind().click(function(){ console.log(this); var $thisParent = $(this) ...