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 运行之后就可以得到如下运行效果:


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

 

你可能感兴趣的:(Linux内核游记,Linux内核学习笔记,linux,makefile,linux内核,gcc,ubuntu,keyboard)