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



1. 编译带gdbstub的Bochs系统


​http://sourceforge.net/projects/bochs/​

​http://sourceforge.net/projects/bochs/files/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. bochs 的 配置文件

​bochsrc​

​bochsrc-fd1-gdb.bxrc​

​bochsrc-hdc-gdb.bxrc​



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


​http://oldlinux.org/Linux.old/bochs/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.  下载 ​​linux-0.11-for-gcc4.3.2.tar.gz​


​     http://oldlinux.org/oldlinux/viewthread.php?tid=11651&extra=page%3D1​



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下正常编译和运行的内核版本,这是我们能够找到最接近目前环境的正常版本:   ​​http://www.oldlinux.org/Linux.old/kernel/0.1x/linux-0.11-060618-gcc4.tar.gz​


或     ​​http://dipplum.com/linux-0.11-lab/linux-0.11-060618-gcc4.tar.gz​


[root@bogon ~]# wget  http://dipplum.com/linux-0.11-lab/linux-0.11-060618-gcc4.tar.gz

[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  ​​http://www.kernel.org/pub/linux/kernel/Historic/old-versions/linux-0.11.tar.gz​

[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        //执行完,打包此源码.