linux-0.11内核编译

平台:ubuntu10.10

这就是搭建bochs的环境,搭建bochs更操作系统关系不大,我认为重点是在bochs的配置上。配置bochs就需要对bochsrc.bxrc文档的编辑。
在安装bochs之前,需要做的是安装编译环境:
code:
sudo apt-get install build-essential
闲话少说,先从安装开始:
我是用ubuntu的软件包工具apt安装的bochs,当然了也可以直接编译bochs的源代码。源代码在www.sourceforge.net下载即可。在这里我就不介绍怎么编译源代码了。
code:
sudo apt-get install bochs vgabios bochs-x bochsbios bochs-doc

好了,bochs安装完成。

我在我的Debian Sid系统上对这个东东做了基本的测试,gcc 4.1是我系统的默认编译器。

任何一个比较新的Linux发型版,包括Fedora,Ubuntu等,应该都没有问题。如果你的系

统上安装的是其他版本的gcc,可以参考下面“使用其他gcc编译”小节。

如果你的Linux提供的默认编译器的仍然是gcc 3.x,或者你打算另外安装一个gcc 3.x

仅仅为了满足能编译源码的要求,你可能就用不到这个东东了。但是,除了内核源码之

外,我还提供了一整套linux-0.11的实验环境,用于在linux环境下学习并且实验linux

0.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

假设你已经进入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教程:

http://www.quinnli.com/upload/linux-0.11.swf

目录结构

========

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版本作出的修改,基本上都是为了编译通过作出的

很简单的修改。但是有一处修改并不那么直观,可以参考我写的:

http://www.quinnli.com/blog/archives/50

conf/

这个目录下有配置文件

images/

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

bak/

每次运行 ./edit_menu.lst 和 ./mcopy_kernel 都会备份当前的grub启动盘到 bak

目录中。必要的时候可以从这个目录下恢复。

使用其他版本的gcc编译

=====================

使用其他版本的gcc来编译也是可以的,gcc-4.0应该可以编译。而且如果你

用的系统非常非常老,还在使用gcc-2.95,经过我的测试,也可以支持。

但如果你的默认版本的gcc是3.x,其实你不需要使用我修改的版本,使用最初

赵炯博士提供的rh9版本就可以。这个包里也包含了这个文件

如果你实在是想用gcc-3.3编译我的版本,也行,只不过需要首先将源码目录中的

`mm/Makefile'替换为`mm/Makefile-gcc3.x'。原始的`mm/Makefile'也有其备份

`mm/Makefile-gcc-4.1',必要时可以恢复。一定记得覆盖,不然在编译的时候

不会出现任何问题,但是编译出来的内核镜像将无法启动。

遇到的问题:

make出错

解决方法:

#if 1
#elif
#endif

Now produces the following diagnostic:

error: #elif with no expression

To fix this, either use #else without an argument or provide a constant expression when using #elif.

======================================

1、sudo apt-get install build-essential
这里会把gcc , g++ cpp , gas , gld ,等程序都装好。装好之后as = gas , ld = gld
在ubuntu里面as == gas , ld == gld. 以后在用Makefile 的时候记得去改。
2、sudo
apt-get install bin86
装上as86 , ld86 两个程序。
3、
sudo apt-get install bochs vgabios bochs-x bochsbios bochs-doc
装上bochs
4、下载两个文件包:
http://www.oldlinux.org/oldlinux/attachment.php?aid=658
name :
linux-0.11-081030.tar.gz: 如果下不下来,google之。
http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-060625.zip
name :
linux-0.11-devel-060625.zip这个应该可以下下来。
5、
修改Makefile。
GCC4.x 默认检查stack安全,会导致出现__stack_chk_fail错误。分别打开
source/linux/kernel/Makefile、
source/linux/kernel/chr_dev/Makefile、
source/linux/fs/Makefile
三个文件,在 CFLAGS参数中加入-fno-stack-protector
6、make
运行之后,如果无错,那么会得到Image.文件。
7、展开linux-0.11-devel-060625.zip, 拷出hdc-0.11-new.img 文件到linux-0.11中,
与Image在同一个文件夹中。

8、编写bxrc文件如下:

romimage: file=$BXSHARE/BIOS-bochs-latest
megs: 16
vgaromimage: file=/usr/share/vgabios/vgabios.bin
floppya: 1_44="Image", 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
parport1: enable=0
vga_update_interval: 300000
keyboard_serial_delay: 200
keyboard_paste_delay: 100000
floppy_command_delay: 50000
ips: 4000000
mouse: enabled=0
private_colormap: enabled=0
fullscreen: enabled=0
screenmode: name="sample"
i440fxsupport: enabled=0

9、bochs -f filename.bxrc 运行之后就可以得到如下运行效果:

linux-0.11内核编译_第1张图片

在此过程中可能出现的问题:
1、如果下载下来文件直接make:
找不到gas, gld . 那么请把gas 改成as . gld 改成ld .
2、如果出现__stack_chk_fail错误。
请把Makefile按文章中所说进行修改。

你可能感兴趣的:(linux)