一、基本介绍
1)Linux0.11
Linux0.11是林纳斯·托瓦兹在1994年发布的早期版本,虽然功能有限,但它展示了Linux的基本架构和工作流程。通过对这个版本的分析,我们可以理解基本的进程管理、内存分配、设备驱动等核心概念。
2)Bochs
Bochs是一个流行的x86兼容的软件模拟器,能过在多种操作系统(包括Linux、Windows、Mac OS)上运行。Bochs可用于模拟硬件环境,是我们可以在无需真实硬件的情况下运行和调试Linux0.11。
二、实践步骤
1)搭建Linux操作系统
1.下载下面链接中的Linux0.11系统包(已包含Bochs-2.1.1)。
http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040329.zip
2.解压linux-0.11-devel-040329.zip,目录结构如下图所示:
这里真正使用到的文件为:Bochs-2.1.1.exe、bochsrc-hd.bxrc、bootimage-0.11、bootimage-0.11-hd、hdc-0.11.img。
3.以管理员身份运行Bochs-2.1.1.exe进行安装。安装完毕后,Bochs原目录如下:
4.将所有Linux-0.11-devel-040329下的文件,拷贝到刚才安装的Bochs下的根目录下,拷贝过后的目录为:
5.拷贝完成后,运行bochsrc-hd.bxrc,若安装成功,打开即能见到如下界面:
此时已经是x86PC模拟器上,搭建完成的Linux操作系统,建立Linux操作平台命令,就能操作Linux。由于学习操作系统需要,需要在Linux下,编译操作系统以完成简单的源码修改,从而达到理解Linux内核的能力。接下来是Linux内核源码的修改,以及内核的编译过程。由于该Linux版本的原因,还需要对代码做出调整,才能成功编译。
2)内核编译过程
1.进入/usr/src/linux目录下,键入命令cd ../src/linux,如下图所示:
2.进行编译。
键入命令make clean:
键入make:
出现错误:gcc-cc1:Invalid option “string-insns”。这时需要将Linux目录下的Makefile文件中的-mstring-insns参数去掉。除此之外,每个子目录fs,lib,kernel以及kernel目录下的三个驱动程序子目录(math,blk_drv,chr_drv)的Makefile当中的-mstring-insns参数去除掉。
3.依次修改:/linux/Makefile、/linux/fs/Makefile、/linux/lib/Makefile、linux/kernel/Makefile、/linux/kernel/math/Makefile、/linux/kernel/blk_drv/Makefile、/linux/kernel/chr_drv/Makefile文件。以修改根目录下的Makefile文件为例,在linux目录下,键入:vi Makefile。如下图所示:
找到文件中的-mstring-insns参数,并按x键将参数删除,然后按esc键并键入:wq保存退出。修改其它几个Makefile文件的方法类似。
4.到/usr/local/bin中找到文件ar,并把ar改为gar,键入命令:mv ar gar。如下图所示:
5.回到linux目录下,重新键入make clean和make,完成内核的编译。
出现上图提示,即表示程序编译成功,完成编译后,便可以开始修改内核源码,从而扩展操作系统功能以及学习操作系统的目的。这里简单修改一下linux操作系统开机启动项bootsect.s源码,让开机输出个性化的字符串。
6.进入/usr/src/linux/boot目录,修改bootsect.s源码,保存并退出。
7.修改完后,在linux目录下,重新键入make,完成编译。
8.make成功后生成引导启动映象文件Image。若需要输出这个Image文件, 可以首先备份bootimage-0.11-hd文件, 然后使用下面命令就会把bootimage-0.11-hd替换成新的引导启动文件,键入命令:dd bs=8192 if=Image of=/dev/fd0。如下图所示:
9.点击reset重启Linux操作系统。如下图所示:
三、实践总结
本次实践初步接触Bochs,我选择了在我熟悉的windows11操作系统以及低版本的Bochs2.1.1进行实验。本次实验要求基本达到,实验结果达到预期效果,并在完成编译后,对内核源码进行了简单修改,从而扩展了操作系统功能以及学习操作系统的目的。
进一步改进设想:可以尝试在linux系统(比如ubuntu)上用更高级的Bochs版本搭建环境,并在此基础上完成下一个实验。