`
MengLee
  • 浏览: 37387 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

    最近决定开始阅读Linux 0.11的源代码。
    学习Linux操作系统的核心概念最好的方法莫过于阅读源代码。而Linux当前最新的源代码包已经有70MB左右,代码十分庞大,要想深入阅读十分困难。而Linux早期的0.11版本虽然有诸多局限,但是具备了现代操作系统的完备功能,一些基本概念沿用到了当前版本,并且代码只有300KB,非常适合阅读。
    阅读源代码之前首先需要搭建实验环境,由于Linux 0.11的代码是二十年前编写的,当前版本的gcc编译器无法正常编译通过,因此需要首先将Linux 0.11源代码移植到gcc 4.3.4+,并在bochs虚拟机上搭建起了实验环境。

 

    一、Linux 0.11内核编译

    1、编译环境设置

     我的操作系统是:

     Linux ubuntu 2.6.32-32-generic #62-Ubuntu SMP i686 GNU/Linux

     安装gcc编译器,使用gcc -v确认gcc编译器的版本高于4.3.4

 

     安装编译工具:

     apt-get install build-essential

 

     安装该软件包:

     apt-get install bin86

 

     2、修改Makefile文件

     Linux 0.11内核源代码中基本上每个子目录都包含有一个Makefile,需要对每个Makefile进行如下修改:

     a)将gas替换为as,将gld替换为ld。现在gas和gld已经直接改名为as和ld了;

     b)去掉as的-c选项;

     c)去掉gcc的编译选项:-fcombine-regs和-mstring-insns

     d)去掉kernel子目录中Makefile的-O选项

 

     3、内存位置对齐语句align的修改

     在boot目录下的三个汇编程序中,align语句的使用方法已经改变。原来align后的数值是内存位置的幂次值,现在则需要直接给出起始地址的整数值,因此

     align 3

     要改成

     align 8

 

     4、修改嵌入宏汇编程序

     由于as的不断改进,现在不需要程序员人为指定寄存器了,因此需要把代码中的__asm__("ax")全部去掉。类似:"si", :"di", :"ax", :"cx");

     修改为

     :); 

 

     5、程序变量在汇编语句中的引用表示

     将所有变量前的下划线去掉:

     .globl _idt, _gdt

     修改为:

     .globl idt, gdt

 

     6、修改copy_process函数

     在kernel子目录下的fork.c文件中,修改如下:

*p = *current;	/* NOTE! this doesn't copy the supervisor stack */

     改为:

memcpy(((struct task_struct *) p), ((struct task_struct *) current), sizeof(struct task_struct));

 

     也可以从我的github上下载已经修改好的源代码,连接是:https://github.com/mengli/TinyOS

 

     7、编译内核

     下载mengli-TinyOS-v0.0.1-0-g182166e.zip,解压,执行如下命令:

     cd mengli-TinyOS-v0.0.1-0-g182166e

     make

     编译完成之后会生成Linux kernel的image文件:linux-kernel-image-0.11,至此就完成了Linux 0.11的移植和编译工作。


    二、bochs上实验环境的搭建

    1、bochs的安装

    下载bochs 2.2.1的源码包,地址是:http://sourceforge.net/projects/bochs/files/bochs/2.2.1.tar.gz/download

    执行如下命令:

    tar xvfz bochs-2.2.1.tar.gz

    cd bochs-2.2.1

    ./configure

    编译bochs之前需要对源文件进行一点修改,不然会编译错误:

    删除iodev子目录下harddrv.h文件290行和295行的sparse_image_t::

    make

    make install

 

    2、bochs的设置

    我的bochs配置文件如下:

#gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest, address=0xf0000
megs: 16
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest
floppya: 1_44="linux-kernel-image-0.11", status=inserted
ata0-master: type=disk, path="hdc-0.11-new.img", mode=flat, cylinders=410, heads=16, spt=38
boot: a
log: bochsout.txt
vga_update_interval: 300000
keyboard_serial_delay: 200
keyboard_paste_delay: 100000
private_colormap: enabled=0
fullscreen: enabled=0
screenmode: name="sample"
i440fxsupport: enabled=0

    其中第一句是bochs调试选项,不进行内核调试时可以注释掉这一行。

    此外,hdc-0.11-new.img这个文件是系统启动后加载的根文件系统。

这本书是赵炯博士编写的《Linux内核完全注释》一书所附带的。

你可以从这里下载到该书:http://oldlinux.org/download/clk011c-2.0.1.pdf

    这里可以下载到已经编译好的kernel image和disk文件:http://www.oldlinux.org/Linux.old/bochs/

 

    3、运行bochs

    启动bochs虚拟机的命令是:bochs -f bochsrc-gdb.bxrc,其中-f选项用来指定配置文件。

 

    成功启动虚拟机的截图如下:

  • 大小: 60.6 KB
1
0
分享到:
评论
1 楼 itstarting 2011-06-27  
这个思路不错,深究其源方能知根本,赞一个

相关推荐

    Ubuntu 18.04环境下Linux 0.11 内核编译及在bochs 2.6.9中的调试运行

    "Linux 0.11 内核编译及在 Bochs 2.6.9 中的调试运行" 本文主要讲述了在 Ubuntu 18.04 环境下编译 Linux 0.11 内核,并在 Bochs 2.6.9 中进行调试运行的过程。文章涵盖了编译 Linux 0.11 内核源代码、Bochs 2.6.9 ...

    linux-0.11内核bochs实验编译环境

    在本实验中,我们将探索如何在Linux环境下搭建用于编译和模拟早期版本Linux内核——Linux 0.11的Bochs环境。Bochs是一款开源的x86硬件模拟器,能够运行多种操作系统,包括早期的Linux内核,这对于学习和理解内核的...

    windows下面编译linux-0.11内核

    在Windows环境下编译Linux 0.11内核是一项对技术有一定挑战性的任务,它涉及到在非Linux系统上构建开源操作系统的核心代码。Linux 0.11是Linux历史上的一个早期版本,对于学习操作系统原理和了解Linux内核的构建过程...

    编译成功的LINUX0.11系统(虚拟机BOCHS中编译运行,9.29M)

    修改方法可参照赵炯博士写的LINUX0.11内核注释的书,未修改的原始版本可在赵博士的网站上下载到。安装BOCHS后双击bochsrc-hd.bxrc进入LINUX0.11,编译方法见赵博士的书。 CSDN系统自动把下载积分改成10分了。果断改...

    linux0.11 bochs 调试.txt

    ### Linux 0.11 Bochs 调试详解...通过在Bochs上运行Linux 0.11,不仅可以帮助我们更好地理解Linux内核的基础结构和工作原理,还可以提高我们在内核级别的调试技能。希望以上内容对学习Linux内核开发的初学者有所帮助。

    Bochs2.6.9可运行的Linux0.11

    接下来,在Bochs配置文件中指定的路径下,使用Linux 0.11的源代码构建引导加载器和内核。这通常涉及到编译内核,生成bootsector,然后将这些内容写入硬盘映像。具体步骤涉及多个编译和复制操作,需参考Linux 0.11的...

    linux0.11-环境搭建

    通过这个过程,你将深入理解早期操作系统的启动流程、内核编译和模拟器的工作原理。Linux 0.11的源代码可以帮助你学习操作系统的基本组件,如进程管理、内存管理、中断处理和设备驱动等。此外,这也是对计算机系统...

    搭建Linux0.11系统环境

    本文将详细探讨如何搭建Linux0.11系统的环境,这是一个经典的版本,对于学习Linux内核工作原理及其早期发展有着重要价值。 首先,我们需要了解Linux0.11的基本情况。Linux0.11是由Linus Torvalds于1992年发布的第一...

    带中文注释可成功编译运行的Linux0.11

    1、为了使注释版与实验环境上的Linux0.11内核保持一致,达到对应文件可以互换的目的,与Linux0.11原始版本相比,加入了15个系统调用函数(参见include/Linux/sys.h第78-92行。赵博士原书没有这部分注释,我不敢...

    linux-0.11--Bochs 从0.11开始

    Bochs是一款流行的开源x86硬件仿真器,允许用户在不支持该操作系统的平台上运行Linux和其他基于x86的系统。 首先,了解Bochs的基本概念至关重要。Bochs能够模拟一个完整的个人计算机系统,包括CPU、内存、硬盘、...

    基于Docker/Qemu/Bochs的Linux 0.11内核开发环境源码设计

    该项目为基于Docker、Qemu和Bochs构建的Linux 0.11内核开发环境,源码设计包含522个文件,涵盖207个C语言源文件、136个头文件、31个汇编文件、9个Markdown文件、8个Git忽略文件、6个Shell脚本文件、4个编译后的对象...

    linux0.11 调试.pdf

    通过上述步骤,你便能在Linux环境下,利用DDD和Bochs对Linux0.11内核进行详尽的源代码级调试。这不仅有助于理解内核的工作机制,还能提升调试技能,为更复杂的软件开发和故障排除打下坚实的基础。

    Linux 0.11 内核编译及在bochs 2.6.9中的调试运行.zip_Linux/Unix编程_C/C++_

    使用Bochs来调试和运行Linux 0.11内核,可以避免直接在主机上进行实验的风险,同时提供了一种直观的学习方式。 1. **安装Bochs**:在Ubuntu 18.04上,通过`sudo apt-get install bochs`安装Bochs及其依赖。 2. **...

    可进行调试的linux 0.11代码

    将GDB与Bochs结合使用,可以实现对Linux 0.11内核的交互式调试。 调试步骤大致如下: 1. **配置Bochs**:首先,需要配置Bochs以模拟Linux 0.11运行所需的硬件环境,包括CPU、内存、硬盘等设置,并指定内核镜像文件...

    LINUX内核完全剖析、源码及Bochs编译环境

    压缩包中内容详尽,包括内核源码、内核分析电子书、内核编译环境(可以直接编译源码)及各个版本的linux内核下载地址(historic ,v1.0-v4.x),有需要的同仁,请自行下载. 包含内容: 1.LINUX内核完全剖析0.11内核....

    Ubuntu编译Linux-0.11运行

    在本文中,我们将深入探讨如何在Ubuntu操作系统上编译并运行Linux-0.11内核,这是一个早期版本的Linux,对于理解操作系统的工作原理和学习Linux内核开发具有重要意义。Ubuntu是一个基于Debian的开源Linux发行版,它...

    Linux-0.11-lab.pdf

    综上所述,通过这份文档提供的资源和指导,无论是 Linux 用户还是 Windows 用户,都能够有效地学习和探索 Linux-0.11 内核的工作原理及其开发流程。这对于初学者而言是一条非常宝贵的学习路径。

    linux 0.11 源码下载

    linux 0.11 源码下载 src/V0.11/ 目录放的是当年Linus写的源码, src/V0.11_gcc4/ 目录放的是可以在gcc4编译通过的内核源码, src/V0.11_rh9/ 目录放的是在RetHat9系统下编译通过的内核源码。 编译 bochs 安装所需...

    LINUX0.11编译说明

    通过上述步骤,你可以在 Windows 平台上成功编译 Linux 0.11 内核,并利用 Bochs 模拟器进行初步的测试和调试。虽然整个过程可能比较繁琐且充满挑战,但对于深入理解 Linux 内核的工作原理以及跨平台编译技术来说,...

    安装bochs 工具之一 linux-0.11-gdb-rh9-050619.tar.gz

    将GDB与Bochs结合使用,开发者可以在Bochs模拟环境中启动并调试Linux 0.11内核。这在不干扰实际主机系统的情况下,提供了一个安全的环境来试验内核代码,理解其工作流程,查找并修复潜在问题。 具体步骤如下: 1. ...

Global site tag (gtag.js) - Google Analytics