SUSE 11.2 下使用bochs调试linux-0.11内核(原创)
来源:互联网 发布:深入浅出数据分析视频 编辑:程序博客网 时间:2024/05/17 13:09
前言:
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
这里不再使用。
上一篇: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...
- SUSE 11.2 下使用bochs调试linux-0.11内核(原创)
- bochs调试linux 0.11内核
- bochs调试linux 0.11内核
- ubuntu8.04下bochs安装及调试linux 0.11内核
- fedora17下用gdb和bochs调试linux-0.11内核
- 利用bochs调试linux 0.11内核
- ubuntu 8.04 bochs 调试linux 0.11内核
- ubuntu 8.04 bochs 调试linux 0.11内核 .
- 利用bochs调试linux 0.11内核
- bochs使用(linux下搭建操作系统开发环境,原创)
- 使用bochs和gdb联合调试Linux内核
- Ubuntu 12.10安装Bochs 2.6, 调试linux-0.11内核
- Ubuntu 12.04安装Bochs 2.6.2, 调试linux 0.11 内核
- ubuntu下建立内核调试环境bochs
- 使用bochs对内核进行调试
- 利用bochs调试内核
- 利用bochs调试内核
- 利用bochs调试内核
- Linux php 不能调用sendmail发邮件
- Echarts
- rm删除命令源码分析
- 2010嵌入式作业
- poj2485
- SUSE 11.2 下使用bochs调试linux-0.11内核(原创)
- oracle11.2.0.1新特性
- Eclipse的Graphical Layout页面下没有界面视图,报错Failed to find the style corresponding to the id 2130772027
- C语言温习
- Java基础05 实施接口
- Linux 0.11内核编译和bochs上的实验环境的搭建
- Android View绘制13问13答
- phpcms设置静态页面
- bochs+gdb源码级调试Linux 0.12内核测试环境构建