在Linux下编译带调试功能的Bochs
在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可以退出调试程序
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的更多相关文章
- ubuntu安装带调试功能的bochs
①进入bochs官网下载源码包 说明 用安装包直接安装没有调试功能 下载源码包步骤 a.输入网址:http://bochs.sourceforge.net/ b.单击图中红色标注图标 c.单击图中红色 ...
- Linux下编译与调试
gcc/g++编译器 对于.c格式的C文件,可以采用gcc或g++编译 对于 .cc..cpp格式的C++文件,应该采用g++进行编译 常用的选项: -c 表示编译源文件 -o 表示输出目标文件 ...
- Linux下编译带x264的ffmpeg的配置方法,包含SDL2
一.环境准备 ffmpeg下载:http://www.ffmpeg.org/download.html x264下载:http://download.videolan.org/x264/snapsho ...
- FFmpeg之Linux下编译与调试
注:下面的一切都是在 root 模式下进行的,可以不再 root 模式下进行 1. 安装linux的基础环境 基础环境就是编译代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定,这里列出语 ...
- linux下编译qt5.6.0静态库——configure配置
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- linux下编译qt5.6.0静态库(使用./configure --help来看看都有哪些参数。超详细,有每一个模块的说明。如果改变了安装的目录,需要到安装目录下的bin目录下创建文件qt.conf)(乌合之众)good
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- linux下编译gcc6.2.0
linux下编译gcc6.2.0 在archlinx的下gcc已经更新到6.2.1了,win10的WSL下还是gcc4.8.官方源没有比较新的版本,于是自己编译使用. GCC6的几个新特性 GCC 6 ...
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Lin ...
随机推荐
- D3DPT_TRIANGLESTRIP 与 D3DPT_TRIANGLEFAN 的区别
D3DPT_TRIANGLESTRIP D3DPT_TRIANGLEFAN http://community.fortunecity.ws/skyscraper/sun/575/Programs/D3 ...
- 2019牛客多校第五场B-generator 1(矩阵快速幂)
generator 1 题目传送门 解题思路 矩阵快速幂.只是平时的矩阵快速幂是二进制的,这题要用十进制的快速幂. 代码如下 #include <bits/stdc++.h> #defin ...
- Maven的pom.xml文件结构之基本配置parent和继承结构
1.Maven项目的继承 Maven项目之间不仅存在多模块的聚合关系,而且Maven项目之间还可以存在相互继承的关系. Maven项目之间的继承关系通过<parent>表示,在子Maven ...
- go 学习Printf
package main import "fmt" import "os" type point struct { x, y int } func main() ...
- Python第十二节 异常
Python 第十三节 异常 python的错误一般包含两类: 语法错误 : 语法错误一般就是, 当你写完程序提交的时候, 发现无法提交, 提示存在错误.例如: 英文逗号 错写成了 中文逗号 异常 : ...
- 2018-2-13-win10-uwp-资源字典
title author date CreateTime categories win10 uwp 资源字典 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17: ...
- 2018-3-5-安装-pip
title author date CreateTime categories 安装 pip lindexi 2018-3-5 19:4:4 +0800 2018-03-05 18:57:15 +08 ...
- Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6
实现的功能: 使用MDA方式把串口接受的数据在发送给串口(当然也可以做其他解析控制使用) 1. 先初始化 时钟使用外部的晶振配置系统时钟为48Mhz 2. 串口参数配置 3. 使能中断 4. 配置串 ...
- 【网页布局基础】css布局学习总结
三种定位机制 1.标准文档流:从上到下,从左到右输出文档内容 2.浮动 3.绝对定位 需要注意的是块级元素如div p ul 等 行级元素如span strong img input等 块级元素与行级 ...
- Application.mk语法解释(转)
转自:http://blog.csdn.net/roland_sun/article/details/46318893 Application.mk是用来描述你的应用程序需要哪些模块,以及这些模块所要 ...