编译内核的一个教程

来源:互联网 发布:mac os x 10.12懒人包 编辑:程序博客网 时间:2024/06/08 10:22
编译内核简而言之就几个步骤:
<start>
tar xzvf linux-2.6.25-12.tar.gz
ll ./linux-2.6.25-12 /usr/src/linux
cd /usr/src/linux
make mrproper
make menuconfig
make dep
make clean
make bzImage
make moudles
make moudels_install
make install
<end>

编译内核

实验目的

学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别

实验内容

重新编译内核是一件比你想像的还要简单的事情,它甚至不需要你对内核有任何的了解,只要你具备一些基本的Linux操作系统的知识就可以进行。

1.     查找并且下载一份内核源代码

我们知道Linux的内核代码受GNU通用公共许可证(GPL)保护是完全开放的,现在很多Linux的网站都提供内核代码的下载。例如Linux的官方网站:www.kernel.org ,在这里你可以找到所有的内核版本。进入www.kernel.org/pub/linux/kernel/,你会看到很多目录。

然后用下面的命令把它放到某个目录(这里假设是home目录),并进行解压:

 

先将压缩包移到你所要放的目录下

# mv linux-2.6.17.tgz~

# mv .CONFIG ~

# cd ~

# tar zxvflinux-2.6.18.tgz

# cp .CONFIG~/linux-2.6.17/.config

 

 

解压出来的是一个linux-2.6.17目录,里面就是2.6.17的内核源代码。

 

2.     配置内核

在你进行这项工作之前,不防先看一看刚才我们解压出来的内核源代码目录下的README文件。在这份文件中,对怎样进行内核的解压,配置,安装都进行了详细的讲解。

在编译内核前,一般来说都需要对内核进行相应的配置。配置是精确控制新内核功能的机会。配置过程也控制哪些需编译到内核的二进制映像中(在启动时被载入),哪些是需要时才装入的内核模块(module)。

首先,重新建立一个核心需要将源代码树置于一种完整和一致的状态。因此,我们推荐执行命令make mrproper。它将清除目录下所有配置文件和先前生成核心时产生的中间文件:

 

 

#make mrproper

 

然后,我们就可以对内核进行配置了:

#make menuconfig

 

 

make menuconfig是基于文本的选单式配置界面,是最为灵活的内核配置工具。我们一般使用这一配置命令。

进行配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。例如,系统如果配有SCSI卡等,需要在网络配置中选择SCSI卡的支持。

对每一个配置选项,用户有三种选择,它们分别代表的含义如下:

“Y” 将该功能编译进内核

“N” 不将该功能编译进内核

“M” 将该功能编译成可以在需要时动态插入到内核中的模块。

将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。许多功能都可以这样处理,例如像上面提到的对SCSI卡的支持、对ext2等文件系统的支持等等。  

3.     编译内核和模块

编译内核,:

 

#make    

#make –j4  启动4个进程编译内核

其中make –j4  启动4个进程编译内核

编译内核需要较长的时间(通常要几十分钟),具体与机器的硬件条件及内核的配置等因素有关。完成后产生的内核文件的位置在~/linux-2.6.17/arch/i386/boot目录下,当然这里假设用户的CPUIntel x86型的,并且你将内核源代码放在~/linux-2.6.17目录下。

如果选择了可加载模块,编译完内核后,要对选择的模块进行编译,用下面的命令编译模块并安装到标准的模块目录中:

 

#make modules_install

 

4.     配置启动文件

通常,Linux在系统引导后从/boot目录下读取内核映像到内存中。因此我们如果想要使用自己编译的内核,就必须先将它拷贝到/boot目录下。需要拷贝的文件包括压缩的内核映像文件(如前所述的zImagebzImage)和内核符号表文件(System.map)。System.mapLinux内核映像(zImage)中的符号表文件。在这个文件中记录了内核映像中的符号及其对应的地址。系统正常启动时并不会读这个符号表,一般只在调试中才用到此文件。如果没有拷贝最新的System.map,系统可能会警告此文件不是最新的。这虽然不会影响正常运行,但最好还是在编译内核后拷贝这个文件以便于内核引导出错时调试内核。

make install              

 

如果使用grub启动Linux,则编辑/boot/grub/grub.conf文件修改系统引导配置:

vi /boot/grub/grub.conf

# grub.confgenerated by anaconda

#

# Note that youdo not have to rerun grub after making changes to this file

# NOTICE:  You do not have a /boot partition.  This means that

#          all kernel and initrd paths arerelative to /, eg.

#          root (hd0,0)

#          kernel /boot/vmlinuz-version roroot=/dev/sda1

#          initrd /boot/initrd-version.img

#boot=/dev/sda1

default=0

timeout=5

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

hiddenmenu

password --md5$1$Hi8foJW7$99Xw17LB8OsdGJpl9M4.8/

title Fedora Core(2.6.17kern_experiment)

        root (hd0,0)

        kernel /boot/vmlinuz-2.6.17kern_experiment ro root=LABEL=/rhgb quiet

        initrd /boot/initrd-2.6.17kern_experiment.img

title Fedora Core(2.6.15-1.2054_FC5smp)

        root (hd0,0)

        kernel/boot/vmlinuz-2.6.15-1.2054_FC5smp ro root=LABEL=/ rhgb quiet

        initrd /boot/initrd-2.6.15-1.2054_FC5smp.img

 

好了,现在你重启系统。

再一次修改/boot/grub/grub.conf 文件,把命令hiddenmenu前加#,把timeout值修改成10。重启系统,geub引导界面会出现选择启动内核选项。试着再做一次。

最后,要清除编译时的临时文件,使用命令:

 make clean

 

在您提交的实验报告中,要求有您的计算机上grub.conf文件内容


阅读(934) | 评论(0) | 转发(0) |
0

上一篇:[zt]Linux编译内核支持bonding(kernel2.6.26)

下一篇:Mail Server实现Bonding

相关热门文章
  • 欢迎ssw218在ChinaUnix博客安...
  • 欢迎dadamouse在ChinaUnix博客...
  • 欢迎zjkida在ChinaUnix博客安...
  • 欢迎我是月下在ChinaUnix博客...
  • 欢迎wenzishaniu在ChinaUnix博...
  • linux 常见服务端口
  • 【ROOTFS搭建】busybox的httpd...
  • 什么是shell
  • linux socket的bug??
  • linux的线程是否受到了保护?...
  • IBM DS3400 盘阵怎么查看是单...
  • 启动auditd时,报错如下,怎么...
  • CGSL系统中root密码正确,但无...
  • 在CGSL系统中,如何为不同的用...
  • CGSL系统如何设置交换分区的大...
给主人留下些什么吧!~~
原创粉丝点击