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


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