Linux gcc提供的默认编译器仍然是Linux gcc

运维 系统运维
用于在Linux gcc环境下学习并且实验linux0.11的源代码。因为我认为要想真正的学习Linux内核的精髓,还是得老老实实在Linux环境中进行学习。而且在Windows下面,几乎就不可能编译Linux内核的源码。

给大家推荐一款很不错的Linux gcc系统很有学习价值,这里我主要讲解Linux gcc系统的应用,包括介绍Linux gcc知识等方面。我发布的这个东东主要包含一个可以在Linux gcc 4.1下可编译的linux-0.11的修改版的源码。当前的Linux发型版大部分已经采用Linux gcc 4.0以上的版本和linux 2.6的内核,而赵博士
(www.oldlinux.org)提供的可以在RH9下面编译的源码只能工作于gcc版本3.x。

我在我的Debian Sid系统上对这个东东做了基本的测试,Linux gcc 4.1是我系统的默认编译器。任何一个比较新的Linux发型版,包括Fedora,Unbuntu等,应该都没有问题。如果你的系统上安装的是其他版本的gcc,可以参考下面“使用其他Linux gcc编译”小节。

如果你的Linux gcc提供的默认编译器的仍然是Linux gcc 3.x,或者你打算另外安装一个Linux gcc 3.x仅仅为了满足能编译源码的要求,你可能就用不到这个东东了。但是,除了内核源码之外,我还提供了一整套linux-0.11的实验环境.

用于在Linux gcc环境下学习并且实验linux0.11的源代码。因为我认为要想真正的学习Linux内核的精髓,还是得老老实实在Linux环境中进行学习。而且在Windows下面,几乎就不可能编译Linux内核的源码。

如果你真的很想在Windows平台学习Linux也没有关系。我还做了另外一个类似的东东可以在Windows平台直接学习Linux 0.11的源码。只需要下载下面的链接并且解压到系统
的某个地方就可以用:http://www.quinnli.com/upload/linux-0.11-lab_060616_004102.exe

无论是Linux用户也好,Windows用户也好,如果你也是新学Linux,不太清楚怎么样修改并且编译内核源码,然后重启进入你修改后的内核这些基本操作,可以看看我
做的一个Flash教程:http://www.quinnli.com/upload/linux-0.11.swf

这个东东很大部门都是直接用了www.oldlinux.org提供的资源做成的。我只是根据自己的需求,综合了一些资源,做了个简单的定制。非常感谢赵博士共享这些资料,并且
希望我的东东能对大家有点用处。谢谢支持。

你可以访问这个链接报bug和给这个东东提一些建议。我其实也是刚学Linux内核的菜鸟。运行前提你的系统中需要预先安装mtools和bochs。如果你用基于Debian的发型版,可以运行:apt-get install bochs bochs-x mtools

如果你的系统是基于RPM的,可以试试:yum install bochs mtools或者直接运行bochs和mdir这两个命令,如果都有就说明你的系统中已经安装了这两款软件。为了编译内核源码,当然你的系统中还必须装有Linux gcc和make等基本软件,如果是Debian,可以运行:apt-get install build-essentials bin86

安装解压这个文件都可以了:tar xjf linux-0.11-lab_060616_005627.tar.bz2然后在本目录下应该会出现一个名为 linux-0.11 的新目录。

工作流程使用这个东东的工作过程很简单,首先编译内核,然后安装内核,最后在bochs中运行内核。假设你已经进入linux-0.11这个目录,首先运行:
cd source/linux
make clean
make
cd ../../

将在source/linux目录下生成新的内核文件Image。然后运行:./mcopy_kernel source/linux/Image bootimage-new可以将Image文件拷贝到一个装了grub的启动软盘上。这个命令将在磁盘的/boot目录下建立bootimage-new这个文件,值得指出的是,如果用这个命令,所有的都会被拷贝到软盘的/boot目录下。

然后你可以运行./edit_menu.lst来编辑grub的配置文件,这样启动是就可以在grub菜单中显示新内核的启动项。配置文件语法很简单。
比如说你可以在menu.lst最后加上以下四行:

  title           Linux 0.11 compiled by gcc 4.1
  root            (fd0)
  kernel          /boot/bootimage-new
  boot

最后可以运行:./linux-0.11来启动bochs虚拟机。如果没有别的问题,你应该可以看到grub启动菜单,这时候选择你刚刚创建的菜单项就可以进入新的内核。另外,如果你不想在自身的Linux环境下编译源码也可以,因为你可以在虚拟机中的linux-0.11环境中编译linux-0.11的源码。如果你决定这样做,可以看我的作的flash教程。

目录结构source/linux/ 这个目录下有我修改的源码linux-0.11-040327-rh9.tar.gz这个是www.oldlinux.org提供的在RH9下编译的原始代码linux-0.11-040327-rh9.diff.gz
这是www.oldlinux.org提供的为了能在RH9下编译提供的差异文件linux-0.11-060617-gcc4-diff.gz这是我基于rh9版本作出的修改,基本上都是为了编译通过作出的很简单的修改。但是有一处修改并不那么直观,可以参考我写的这篇文章

conf/这个目录下有配置文件images/这个目录下包含虚拟机需要的软盘和硬盘镜像文件。硬盘镜像文件是www.oldlinux.org提供的包含完整Linux开发环境的硬盘镜像。还有一张grub启动软盘,你可以将新的内核文件拷贝到这张软盘中。

bak/每次运行 ./edit_menu.lst 和 ./mcopy_kernel 都会备份当前的grub启动盘到 bak目录中。必要的时候可以从这个目录下恢复。使用其他版本的gcc编译使用其他版本的gcc来编译也是可以的,Linux gcc-4.0应该可以编译。而且如果你用的系统非常非常老,还在使用Linux gcc-2.95,经过我的测试,也可以支持。

但如果你的默认版本的gcc是3.x,其实你不需要使用我修改的版本,使用最初赵炯博士提供的rh9版本就可以。这个包里也包含了这个文件如果你实在是想用gcc-3.3编译我的版本,也行,只不过需要首先将源码目录中的`mm/Makefile’替换为`mm/Makefile-gcc3.x’。原始的`mm/Makefile’也有其备份`mm/Makefile-gcc-4.1′,必要时可以恢复。一定记得覆盖,不然在编译的时候不会出现任何问题,但是编译出来的内核镜像将无法启动。

已知问题
1. 我的内核无法挂接软盘上的rootdisk是的,如果你和我一样,使用当前的2.2.6版本的bochs,而且是直接把编译出来的Image文件做为a盘启动,就有可能出现问题。如果你肯定的确在b盘放入了rootimage文件的话,我也不知道为什么会这样。

但是如果使用grub来引导信的Image文件,就完全不会出现这个问题。我的猜测是grub在引导Image之前对软驱做了一些必要的初始化操作,而Linux0.11没有做。

2. 我的内核启动是只能用软盘b做为根分区是的,这是默认的启动设备。你可以使用rdev命令改变一个磁盘镜像的启动设备(必须su到root来执行这个操作)rdev source/linux/Image /dev/hda1修改完之后使用 ./mcopy_kernel 将新的镜像复制到grub盘上。(令我非常惊奇的是rdev竟然可以修改linux 0.11这么古老的版本。这兼容性太好了)

3. 我的内核镜像虽然已经启动了,但是好多命令不能正确执行,总是出错说`not owner`是的。如果你已经改用硬盘root image,可以简单解决这个文件,首先备份一下/bin/sh,然后将/bin/sh0覆盖/bin/sh,重启系统之后就应该正常了。至于为什么,可以进一步参考一下论坛上的这篇文章.

【编辑推荐】

  1. Linux gcc编译写段小程序来验证其正确性
  2. 描述概括Linux GCC稳定性的要求
  3. 畅谈对Linux GCC 4.4的理解
  4. 详细介绍Linux GCC系统静态链接
  5. linux gcc版本升级了
责任编辑:佚名 来源: CSDN
相关推荐

2011-01-06 11:36:00

linuxGCC编译器

2018-08-03 09:32:06

Linux 系统 Windows

2009-04-28 18:57:25

Linux编译器GCC v4.4.0

2020-11-03 10:32:22

编译器工具代码

2020-12-07 09:20:59

编译器工具代码

2009-07-07 09:14:53

Milepost GC编译器

2010-06-11 11:15:33

Linux编程工具

2010-06-04 17:37:45

Linux编程工具

2010-01-27 13:53:40

强大的CC++编译器

2018-04-13 10:56:14

编译器工具开发者

2009-10-22 17:48:32

linux gcc版本

2021-05-24 08:24:48

Linux运维Linux系统

2009-12-23 16:56:45

2021-09-28 09:34:35

联发科编译器GCC

2017-10-22 21:04:44

HPC英特尔

2017-08-14 08:59:31

LinuxGNOME

2017-07-10 17:30:13

2010-03-02 10:55:47

Linux SkyEy

2010-01-04 10:06:56

Ubuntu gcc

2021-12-08 14:49:01

物联网安全物联网IOT
点赞
收藏

51CTO技术栈公众号