zoukankan      html  css  js  c++  java
  • SUSE 11.2 下使用bochs调试linux-0.11内核()

    http://lizhijunhome.blog.sohu.com/142680219.html

    前言:
    linux-0.11虽然是早期内核代码,代码不超过2万行,但却基本是现今内核代码的精简版本,麻雀虽小,五脏俱全.
    阅读理解完整代码,可以对整个系统的运作过程有深刻理解.

    一. 准备工作(以root用户执行):

    1 安装wxGTK

    利用SUSE YAST软件安装wxGTK framework, SUSE 11.2中的版本为2.8.10。

    2 安装bochs仿真器
    下载调试工具bochs:
    在http://sourceforge.net/projects/bochs/下载.tar.gz的安装包,注意,不要下载rpm包,因为安装时需要加入gdb-stub功能,rpm包不带有这个功能,下载后执行:
    #tar  zxvf  bochs-2.4.2.tar.gz
    #cd  bochs-2.4.2
    #./configure  --enable-gdb-stub
    如果出现X windows libraries were not found错,可以用SUSE YaST的 软件管理 搜索xorg,将xorg的基本安装包安装即可。

    另外可能要安装g++,用SUSE YaST的 软件管理 搜索gcc安装即可
    继续安装bochs
    #make
    #make  install

    3 修改linux-0.11内核源码
    好了,下载linux-0.11内核源码包,将源码包放在/root/kernel/:
    #mkdir  /root/kernel
    #cd  /root/kernel
    #wget  http://www.kernel.org/pub/linux/kernel/Historic/old-versions/linux-0.11.tar.gz
    #tar   zxvf   linux-0.11.tar.gz
    这个源码包最终要放到bochs仿真的系统里去编译,因为调试环镜是以bochs仿真的Intel x86软件,所以不要在SUSE系统编译这个内核,
    而且在bochs仿真系统里编译这个内核还要更改一些配置文件,操作如下:
    #cd linux-0.11
    #vi Makefile
    更改 RAMDISK = #-DRAMDISK=512为 RAMDISK = -DRAMDISK=2048
    更改 ROOT_DEV=/dev/hd6 为ROOT_DEV=FLOPPY
    在源码目录下所有的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直接完成上述工作

    #!/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

    将此脚本放在linux-0.11目录下,执行一遍即可.
    #cd linux-0.11
    #./adjust_make_for_gdb
    执行完,打包此源码.
    #cd ..
    #tar  cvf  gdb-linux-0.11.tar   linux-0.11


    二. 使用bochs 仿真
    这里需要到http://oldlinux.org/Linux.old/bochs/下载两个包
    #wget 
    http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040923.zip
    将这该个包放到/root/kernel/,并解压
    #unzip   linux-0.11-devel-040923.zip  -d  ./
    #cd  linux-0.11-devel-040923/
    这里我们只用到bochsrc-hdboot.bxrc文件
    #vi   bochsrc-hdboot.bxrc
    将 里面的36行、283行、305行全都注释掉,原因是因为 Bochs 2.4.x 对*.bxrc文件中的一些配置语法进行了修改。而linux包中携带的brrc文件是用于2.2.x -- 2.3.x 版的,因此需要对bxrc文件进行修改。至于具体如何修改还不知道?????
    12行: romimage: file=$BXSHAREBIOS-bochs-latest, address=0xf0000 更改得到
    romimage: file=$BXSHARE/BIOS-bochs-latest
    这时候就可以运行bochs了.
    #bochs   -q  -f  bochsrc-hdboot.bxrc

    出现的图显示了虚拟硬盘的4个分区,第一个分区放着可启动的Linux 0.11系统,按数字1键运行Linux 0.11系统,我最终会在这个系统编译Linux 0.11内核代码。

    在linux-0.11-devel-040923 目录还有其它的.bxrc文件:
    bochsrc-fda.bxrc  bochsrc-fdb.bxrc  bochsrc-hd.bxrc
    这里不再使用。


    <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>
    阅读(516) | 评论(0) | 转发(2) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    This counter can increment, decrement or skip ahead by an arbitrary amount
    LUT4/MUXF5/MUXF6 logic : Multiplexer 8:1
    synthesisable VHDL for a fixed ratio frequency divider
    Bucket Brigade FIFO SRL16E ( VHDL )
    srl16e fifo verilog
    DualPort Block RAM with Two Write Ports and Bytewide Write Enable in ReadFirst Mode
    Parametrilayze based on SRL16 shift register FIFO
    stm32 spi sdcard fatfs
    SPI bus master for System09 (2)
    SQLSERVER中的自旋锁
  • 原文地址:https://www.cnblogs.com/ztguang/p/12648193.html
Copyright © 2011-2022 走看看