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) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    什么是lambda
    Google guava工具类的介绍和使用
    Java并发编程:Java创建线程的三种方式
    线程池之ThreadPoolExecutor概述
    idea Spring-boot三种启动方式
    linux 安装kong gateway
    Beautiful Soup 的使用问题
    python与tesserocr的安装和使用
    python中关于yeild关键字的用法
    springboot——@EnableConfigurationProperties是如何起作用
  • 原文地址:https://www.cnblogs.com/ztguang/p/12648193.html
Copyright © 2011-2022 走看看