您的位置:首页 > 运维架构 > Linux

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

2016-02-01 00:00 489 查看
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
这里不再使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: