SUSE 11.2 下使用bochs调试linux-0.11内核(原创)

来源:互联网 发布:深入浅出数据分析视频 编辑:程序博客网 时间:2024/05/17 13:09
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=$BXSHARE\BIOS-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) |
0

上一篇:2010嵌入式作业

下一篇:Linux 0.11内核编译和bochs上的实验环境的搭建

相关热门文章
  • linux 常见服务端口
  • xmanager 2.0 for linux配置
  • 【ROOTFS搭建】busybox的httpd...
  • openwrt中luci学习笔记
  • 什么是shell
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
原创粉丝点击