Ubuntu 12.04安装Bochs 2.6.2, 调试linux 0.11 内核

要下载的软件包:
bochs-2.6.2
linux-0.11-081030.tar.gz 
linux-0.11-devel-060625.zip(hdc-0.11-new.img 文件系统)
(hdc-0.11-new.img 只用这一个文件也可以时入linux 0.11系统,只需在配置bochs时稍做修改就可以,但是要调试源码的话,还是自己编译来得爽)

安装bochs之前做一些准备工作
sudo apt-get install build-essential
sudo apt-get install xorg-dev

sudo apt-get install libgtk2.0-dev
sudo apt-get install bison

一.安装bochs
1. 解包
tar xvfz bochs-2.6.2.tar.gz
2.进入bochs-2.6.2目录
cd bochs-2.6.2
3. 配置
编译两份不同的配置的版本
第一个的版本为使用bochs自带的内部调试器

./configure --prefix=/opt/bochs/debug --enable-plugins --enable-debugger --enable-disasm
注释:
    * --prefix=/opt/bochs/debug 软件将被安装到哪个目录下
    * --enable-plugins 是必须要的
    * --enable-debugger 是打开bochs的自带调试器
    * --enbale-disasm 允许反汇编
4. 编译
make

报错:

/usr/bin/ld: gui/libgui.a(gtk_enh_dbg_osdep.o): undefined reference to symbol 'pthread_create@@GLIBC_2.1'
//lib/i386-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [bochs] Error 1

解决方法:修改步骤3产生的bochs-2.6.2/Makefile文件中LIBS 一行,加上 -lpthread,然后再make

5. 安装
sudo make install

报错:libtool: install: `iodev/usb/*.la' is not a valid libtool archive
Try `libtool --help --mode=install' for more information.
make: *** [install_libtool_plugins] Error 1

解决方法一:在bochs-2.6.2/iodev/usb目录下,修改Makefile和Makefile.in中的OBJS_THAT_CAN_BE_PLUGINS加入一个usb_common.o即可。

解决方法二:./configure --prefix=/opt/bochs/gdbstub --enable-plugins --enable-disasm --enable-gdb-stub  --enable-usb


6.加一个符号连接
sudo ln -s /opt/bochs/debug/bin/bochs /usr/bin/bochsdbg

第二个版本为使用gdb-stub的版本
1. 清理
在配置第二个版本之前,需要把刚才编译的东西清理掉,输入以下命令:
make clean
2. 配置
然后配置,配置命令为
./configure --prefix=/opt/bochs/gdbstub --enable-plugins --enable-disasm --enable-gdb-stub
配置注释:
    * --enable-gdb-stub 打开gdb stub支持
    * 其他选项同上,注意这个不同版本会安装到不同的目录下。
3. 编译
make
4. 安装
sudo make install
这样bochs使用外部调试器gdb的版本就编译好了。
5.建一个符号链接
sudo ln -s /opt/bochs/gdbstub/bin/bochs /usr/bin/bochs

6、测试

bochs


出现以下文字,说明已经成功安装bochs(未正确配置)

========================================================================
                       Bochs x86 Emulator 2.6.1
               Built from SVN snapshot on April 7, 2013
                  Compiled on Oct 17 2014 at 11:10:24
========================================================================
00000000000i[     ] LTDL_LIBRARY_PATH not set. using compile time default '/opt/bochs/gdbstub/lib/bochs/plugins'
00000000000i[     ] BXSHARE not set. using compile time default '/opt/bochs/gdbstub/share/bochs'
00000000000i[     ] lt_dlhandle is 0xac5d6e8
00000000000i[PLGIN] loaded plugin libbx_unmapped.so
00000000000i[     ] lt_dlhandle is 0xac5d748
00000000000i[PLGIN] loaded plugin libbx_biosdev.so
00000000000i[     ] lt_dlhandle is 0xac5dcc8
00000000000i[PLGIN] loaded plugin libbx_speaker.so
00000000000i[     ] lt_dlhandle is 0xac5e328
00000000000i[PLGIN] loaded plugin libbx_extfpuirq.so
00000000000i[     ] lt_dlhandle is 0xac5e830
00000000000i[PLGIN] loaded plugin libbx_parallel.so
00000000000i[     ] lt_dlhandle is 0xac60168
00000000000i[PLGIN] loaded plugin libbx_serial.so
00000000000i[     ] reading configuration from .bochsrc
00000000000e[     ] .bochsrc:192: invalid choice 'core2_penryn_t9600' parameter 'model'
00000000000p[     ] >>PANIC<< .bochsrc:192: cpu directive malformed.
00000000000e[CTRL ] notify called, but no bxevent_callback function is registered
========================================================================
Bochs is exiting with the following message:
[     ] .bochsrc:192: cpu directive malformed.
========================================================================
00000000000i[CTRL ] quit_sim called with exit code 1


二. 编译linux 0.11 内核
linux 0.11源码文件在linux-0.11-081030.tar.gz中,进入目录解压后的目录linux-0.11中

1. ubuntu 8.04 gcc 版本为4.2.4,但是GCC4.x 默认检查stack安全,会导致出现__stack_chk_fail错误,所以在编译之前应先修改Makefile:
    linux-0.11/Makefile
    linux-0.11/kernel/Makefile
    linux-0.11/kernel/chr_dev/Makefile
    linux-0.11/kernel/blk_dev/Makefile
    linux-0.11/fs/Makefile
    在 CFLAGS参数中加入-fno-stack-protector

2. 安装 as86 ld86
下载dev86-0.16.3-8.i386.rpm包,转为deb,然后安装
sudo apt-get install alien (安装rpm转deb工具)
sudo alien dev86-0.16.3-8.i386.rpm (转为deb)
sudo dpkg -i dev86-0.16.3-8.i386.deb (安装as86与ld86)
更简单的方法是: sudo apt-get install bin86 (这种方法等下次重装系统的时候试一下,呵呵)

3.编译 make (编译不成功记得在下次编译前 make clean 一下),如果编译成功则在linux-0.11目录下生成 Image
报错:第一次make时报如下错误:
In file included from floppy.c:42:0:
blk.h:87:6: error: #elif with no expression
 #elif
      ^
floppy.c: In function ‘do_fd_request’:
blk.h:132:8: warning: function with qualified void return type called [enabled by default]
   panic(DEVICE_NAME ": request list destroyed"); \
        ^
floppy.c:430:2: note: in expansion of macro ‘INIT_REQUEST’
  INIT_REQUEST;
  ^
blk.h:135:9: warning: function with qualified void return type called [enabled by default]
    panic(DEVICE_NAME ": block not locked"); \
         ^
floppy.c:430:2: note: in expansion of macro ‘INIT_REQUEST’
  INIT_REQUEST;
  ^
floppy.c:453:8: warning: function with qualified void return type called [enabled by default]
   panic("do_fd_request: unknown command");
        ^
make[1]: *** [floppy.o] Error 1
make[1]: Leaving directory `/home/li/lixinjian/linux-v0.11/sources/linux-0.11/kernel/blk_drv'
make: *** [kernel/blk_drv/blk_drv.a] Error 2

解决办法: 这是一个明显的宏语法错误。。。把blk.h的第87行的#elif改为#else就行了。。。


三. 配置bochs
这是bochs-2.3.5的配置文件

romimage: file=$BXSHARE/BIOS-bochs-latest  
megs: 16 
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
vga: extension=vbe 
floppya: 1_44="Image", status=inserted 
floppyb: 1_44=diska.img, status=inserted 
ata0-master: type=disk, path="hdc-0.11-new.img", mode=flat,cylinders=410, heads=16, spt=38 
boot: a 
log: bochsout.txt
parport1: enable=
vga_update_interval: 300000 
keyboard_serial_delay: 200 
floppy_command_delay: 50000 
ips: 4000000 
mouse: enabled=
private_colormap: enabled=
fullscreen: enabled=0
screenmode: name="sample"

其中在bochs中运行一个系统,最少需要以下资源:bochs执行文件,bios映像文件
(BIOS-bochs-latest),vga bios映像文件(VGABIOS-lgp1-latest),引导启动磁盘
映像文件(软盘、硬盘或CDROM的映像文件)。
(注:如果编译内核不成功且只是想启动bochs,看一下linux 0.11 界面的话,可以直接把上述配置的boot:a,改为boot:c)


运行bochs
bochs -f bochsrc.bxrc
注:用gdb 调试时出现“system bios must end at 0xffff”,可把*.bxrc romimage 一行中的address=0f0000 去掉
#romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000
 romimage: file=$BXSHARE/BIOS-bochs-latest
报错:

[错误]libbx_x.so: undefined symbol: XpmCreatePixmapFromData

分类: linux系统管理 526人阅读 评论(0) 收藏 举报


ubuntu 12.04  下bochs-2.4.6 可能会出现这个错误。

很明显,由apt-get install bochs-x 得到的 libbx_x.so不完善造成的,如此可以得到两个解决方法:


(1)直接换个显示方案,比如:

  1. sudo apt-get install bochs-sdl   
然后在bochs的配置文件中将display_library的置为sdl,如:
  1. display_library: sdl 


你可能感兴趣的:(Linux内核V0.11)