Chinaunix首页 | 论坛 | 博客
  • 博客访问: 430142
  • 博文数量: 168
  • 博客积分: 320
  • 博客等级: 二等列兵
  • 技术积分: 955
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-21 08:40
个人简介

知足却不乏追求

文章分类

全部博文(168)

文章存档

2017年(1)

2016年(6)

2015年(36)

2014年(5)

2013年(6)

2012年(114)

分类:

2012-10-29 09:01:02


+++++++++++++++使用 调试功能


1. 编译带gdbstub的Bochs系统




[root@bogon bochs-2.6]# ./configure --enable-gdb-stub
[root@bogon bochs-2.6]# make
[root@bogon bochs-2.6]# make install
[root@bogon bochs-2.6]# which bochs
/usr/local/bin/bochs
[root@bogon bochs-2.6]#

2. bochsrc
bochsrc-fd1-gdb.bxrc
bochsrc-hdc-gdb.bxrc


3. 下载 linux-0.11-gdb-rh9-050619.tar.gz



4. 打开 两个 终端窗口

注意:bochs 模拟器 窗口 和其他窗口的 切换,必须 通过鼠标,不能 使用 ALT + TAB 组合键切换

第一个终端窗口
[root@bogon linux-gdb-rh9]# pwd
/root/桌面/linux-gdb-rh9

[root@bogon linux-gdb-rh9]# ls
bochsout.txt  bochsrc-fd1-gdb.bxrc     bootroot-0.11  parport.out              rootimage-0.11-for-orig
bochsrc       bochsrc-fd1-gdb.bxrc~    Image-org      README                   run
bochsrc~      bootimage-0.11-20040305  linux          rootimage-0.11-20040305

[root@bogon linux-gdb-rh9]# bochs -q -f bochsrc-fd1-gdb.bxrc

第二个终端窗口
[root@bogon linux-gdb-rh9]# pwd
/root/桌面/linux-gdb-rh9
[root@bogon linux-gdb-rh9]# vim linux/Image -b          请参考“vim+xxd=强大的十六进制编辑器
将 1d02 55aa 改为 0000 55aa        //软盘文件系统
将 1d02 55aa 改为 0103 55aa        //硬盘文件系统

[root@localhost linux-gdb-rh9]# gdb linux/tools/system
(gdb) break main
(gdb) target remote localhost:1234
(gdb) cont

//出错
[Thread
] #1 stopped.
0x0000a0ec in page_fault ()
(gdb)
//解决方法,在 (gdb) 命令行,一直按 ENTER 键。

(gdb) next

-----------------
现在所有的步骤都正确执行了,gdb能够和bochs连接了,但是linux0.11在运行的时候,却在启动过程中出现页错误,具体信息是:
program received signal 0, Signale 0.
0x0000a0ec in page_fault().


解答:缺页中断是正常的处理,按enter将对应的数据加载到内存中就过去了。

-----------------
gdb tools/system命令的主要目的是装入符号表,而符号信息只存在于system目标文件中,Image文件是内核映像文件,不包含符号信息。
你可以用下面的命令系列来执行,可能更容易理解。
gdb (直接进入gdb)
target remote localhost:1234 (设置远程主机)
symbol-file tools/system (装入符号表信息)
其实代码是在远程主机(bochs)上执行的,在本地主机上运行的gdb,它只需要符号表信息就OK了。
-----------------


+++++++++++++++下面不用 调试功能


1.  修改 bochsrc-fd1-gdb.bxrc
     将第一行 注释,即:# gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0

2.  下载




3.   解压、编译 内核,生成 Image, 然后,
     [root@bogon linux]# vim Image -b

     将 1d02 55aa 改为 0000 55aa        //软盘文件系统

4.   将修改后的 Image 以及 System.map 复制到 linux-gdb-rh9/linux

5.   [root@bogon linux-gdb-rh9]# bochs -q -f bochsrc-fd1-gdb.bxrc

6.   如果修改 0.11内核源代码,重复 1~5,验证是否符合自己的功能需求。


+++++++++++linux下面 阅读 linux 0.11 内核源代码

1. 下载、安装 wine

2.  下载、安装 Source Insight 3.5










++++++++++++++++++++++++++++++++++++++++++下面不用

2. 编译带调试信息的Linux 0.11内核

http://blog.chinaunix.net/uid-27062906-id-3380279.html

从下面的链接下载一个可以在gcc4.0下正常编译和运行的内核版本,这是我们能够找到最接近目前环境的正常版本:  

或    

[root@bogon ~]# wget 
[root@bogon ~]# tar  xzvf  linux-0.11-060618-gcc4.tar.gz
[root@bogon ~]# mv linux linux-0.11-060618-gcc4
[root@bogon ~]# cd linux-0.11-060618-gcc4

[root@bogon linux-0.11-060618-gcc4]# gedit kernel/blk_drv/blk.h
第87行  #elif  语法错误,改为#else 便可

[root@bogon linux-0.11-060618-gcc4]# gedit Makefile
第14行  CFLAGS    =-Wall -O2 -fomit-frame-pointer ,
改为      CFLAGS    =-Wall -O -g -fomit-frame-pointer


[root@bogon linux-0.11-060618-gcc4]# make


++++++++++++++++++++++++++++++++++++++++++下面不用
2. 编译带调试信息的Linux 0.11内核

[root@bogon ~]# wget 
[root@bogon ~]# tar  xzvf  linux-0.11.tar.gz
[root@bogon ~]# cd linux-0.11

[root@bogon linux-0.11]# gedit Makefile
更改 RAMDISK = #-DRAMDISK=512为 RAMDISK = -DRAMDISK=2048
更改 ROOT_DEV=/dev/hd6 为ROOT_DEV=FLOPPY


将源码目录(linux-0.11)下所有的Makefile进行修改,如下:
LDFLAGS = -M -x                  //去掉-s标志
CFLAGS = Wall -O -g -fstrength-reduce -fomit-frame-pointer  -fcombine-regs //添加-g标志,去掉-mstring-insns
将boot/bootsect.s和tools/build.c中的SYSSIZE的值改为0x8000
由于Makefile文件较多,这里我写了一个脚本程序adjust_make_for_gdb直接完成上述工作

[root@bogon linux-0.11]# gedit adjust_make_for_gdb.sh
#!/bin/sh

sed -i '5 s/#//' Makefile
sed -i '5 s/512/2048/' Makefile
sed -i '23 s/\/dev\/hd6/FLOPPY/' Makefile
sed -i '6 s/3/8/' boot/bootsect.s
sed -i '35 s/2/8/' tools/build.c


find . -name 'Makefile' |while read filename;do
    all_lines=$(grep LDFLAGS $filename -nH | awk -F: '{print $2}')
    first_line=$(echo $all_lines|awk '{print $1}')
    echo $first_line
    sed -i "$first_line s/-s//g" $filename

    all_lines=$(grep CFLAGS $filename -nH | awk -F: '{print $2}')
    first_line=$(echo $all_lines|awk '{print $1}')
    echo $first_line
    sed -i "$first_line s/-O -fs/-O -g -fs/g" $filename

    sed -i '1,$ s/-mstring-insns//g' $filename
done


[root@bogon linux-0.11]# chmod +x adjust_make_for_gdb.sh         //将此脚本放在linux-0.11目录下,执行一遍即可.
[root@bogon linux-0.11]# ./adjust_make_for_gdb.sh

[root@bogon linux-0.11]# cd ..
[root@bogon bochs]# tar czvf gdb-linux-0.11.tar.gz linux-0.11        //执行完,打包此源码.



阅读(716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~