• CentOS 6 + bochs-2.6 + gdb 调试 linux 0.11 —— 成功



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


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



    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(4375) | 评论(0) | 转发(14) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    归一化和标准化的作用
    区间问题-扫描线-前缀和-有序区间判重-1897. 会议室 3
    动态规划-数位dp-233. 数字 1 的个数
    动态规划-状态压缩-三状态-5383. 给 N x 3 网格图涂色的方案数
    动态规划-887. 鸡蛋掉落
    递归-约瑟夫环
    树的重心
    针孔相机模型
    图像分割学习笔记2
    图像分割学习笔记1
  • 原文地址:https://www.cnblogs.com/ztguang/p/12648201.html
Copyright © 2020-2023  润新知