SUSE 11.2 下使用bochs调试linux-0.11内核()
前言:
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=filename -nH | awk -F: '{print (echo first_line
sed -i "filename
all_lines=filename -nH | awk -F: '{print (echo first_line
sed -i "filename
sed -i '1,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
这时候就可以运行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
这里不再使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通