`
61party
  • 浏览: 1100665 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Linux内核编译

 
阅读更多

如何编译Linux内核? 相信你会得到很多种不同的答案,而我在写此文章之前,总是获得一些编译错误的结果。
如何你总是遇到编译错误或者失败,其实很多情况下是你下载的内核版本的问题,就是在高版本GCC中编译低版本的内核,造成编译失败。如果你对编译内核一悉莫展,在网上Google到很多种编译方法,但都失败的情话。倒不如看看内核的README文档,或者在内核目录下运行make help。它将会告诉许多你所不知的秘密。
1. Linux系统编译内核的通用方法
内核代码中的README文件对编译过程有非常 详细介绍,下而介绍的方法是Linux内核通用的编译方法,它是Makefile文件已定义好的编译过程。

1) 下载源代码(以2.6.28为例)

2) 解压,并把它放到/usr/src/目录下

gzip -d linux-2.6.28.1.tar.gz
tar -xvf linux-2.6.28.1.tar
mv -rf linux-2.6.28.1 /usr/src
3) 在/usr/src/建立一个软链接到linux-2.6.28.1目录
cd /usr/src
ln -s linux-2.6.28.1 linux
4) 清理源代码(如果是之前已生成一些中间文件可运行此命令,否则不必了)
make mrproper
5) 生成config文件
cp /boot/config-`uname -r` ./.config
make menuconfig
在make menuconfig的配置界面中,先选择Load config file, 把该才拷贝的文件加载进来再进行修改,修改完成后,直接选Exit,然后在提示中选择保当前配置文件。
6) 编译
make
7) 安装模块
make modules_install
该命令会把模块及相关文件放到目录/lib/modules/2.6.18.1/下,并不会与当前内核产生冲突,除非内核版本是一样的。
8)安装内核
make install
该命令会把内核相关文件(bzImage, initrd.img,System.map .config)放到/boot/目录下,文件名均带有内核版本名,与其它版本相关区别。
如果系统安装了LILO,它会自己把该内核的启动加进来。如果是grub程序,那要看情况而定。我在Fodera系统中,它会自动添加该启动项到/boot/grup/menu.lst文件中,而在Ubuntu中则不会,需要手动添加。添加完也,即可重启进行新内核。
2. Ubuntu内核编译方法。
上面介如的通常方法适合于所有的Linux系统,Ubuntu也不例外。Ubuntu同样提供了编译内核的方法。而且方法非常简单,把上述第6)和7)步换成下面这一命令即可。
make-kpkg --initrd --append-to-version <your_tag> kernel_image kernel_headers
其中<your_tag>是你给内核名字在版本号的基础上加上你指定的字符串,如果你打算直接使用内核版本号作为内核名字,则把--append-to-version和它的参数从命令行中去掉。个人建议你不要使用该选项,因为内核名字就是uname -r的运行结果,使得有时编译新的模块程序时,uname -r 和 make kernelrelease结果不一致。
该命运行完毕后,生成两个deb包,其它一个是内核和模块的包;另一个是头文件的deb包。如果不需要,可在命令行上把kernel_header去掉。
安装内核变异常简单,只需安装一个生成的内核映象的deb包。使用如下命令:
dpkg - i linux-image-2.6.28.1_2.6.28.1-10.00.Custom_i386.deb
安装完后,所有的事情也就完成了,连/boot/grub/menu.lst的启动菜单项都修改好了,你所要做的事情就是重启系统而已。
使用这种方法的好处是不言而喻的:你只需要在一台Ubuntu上编译好一个较新的内核,就可以在整个实验室中升级,何乐而不为呢?
3. Fodera 内核编译方法
很抱歉,目前还未有找到很准确的Fodera内核编译方法,后面会补上。但这里介绍的方法仍然适后Fodera系统,那就是象Ubuntu一样,把内核编译成为一个rpm包。而且非常简单,只需把上面的第6)和7)步换成下面的命令:
make rpm-pkg
运行完后,内核rpm包位于目录/usr/src/rpm/RPMS/i386/kernel-2.6.28.1.i386.rpm下,使用rpm -i kernel-2.6.28.1.i386.rpm命令即可安装。
安装rpm完成后,请检查/boot/grup/menu.lst文件是否有新内核的启动,若否请手工添加。

内核删除:
有时我们基于各种原因可能删除一些老的内核,基本步骤如下:
1. 查看当前系统的内核版本,千万不要删除错了
#uname -r 或者 uname -a
2. 对于通过rpm方式安装的内核,删除就很简单了。直接用rpm -e 相应的内核版本就能删除掉了。
对于手工编译安装的内核,删除起来稍微就要麻烦些了。
(1)、修改 /etc/grub/grub.conf 或 /etc/grub/menu.lst ,删除那些不想要的内核选项。
(2)、删除 /lib/modules/相对应的内核版本的目录
(3)、删除 /boot/相对应的内核版本的文件
对于Ubuntu系统:
$dpkg –get-selections|grep linux-image //查看内核版本名称
$sudo apt-get remove 内核版本(如:linux-image-2.6.15-23-386)

原文地址 http://blog.csdn.net/linyt/archive/2009/03/16/3995435.aspx

http://www.loosky.net/?p=309

分享到:
评论

相关推荐

    linux内核编译原理

    linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核...

    Linux内核编译与裁剪

    ### Linux内核编译与裁剪 #### 一、Linux版本特点 Linux内核版本的命名规则对于理解和追踪内核的发展至关重要。版本号通常由三部分组成:`VERSION.PATCHLEVEL.SUBLEVEL`,有时还会附加一个`EXTRAVERSION`。 - **...

    操作系统Linux内核编译实验报告.docx

    操作系统Linux内核编译是一项对Linux系统有深入理解的重要实践,它涉及到系统核心的构建、配置和安装。在这个实验报告中,我们主要关注的是在Ubuntu Kylin 13.04环境下,如何编译和安装一个新的Linux内核,并且如何...

    linux内核编译文档

    Linux 内核编译文档 本文档旨在为 Linux 新手提供一个详细的 Linux 内核编译指南,帮助他们从基础开始学习 Linux 系统。编译内核对于 Linux 新手来说可能有一些困难,但通过本文档的指导,读者可以轻松地完成内核...

    linux内核编译各个选项的含义[参照].pdf

    Linux 内核编译选项详解 Linux 内核编译选项是 Linux 内核编译过程中的一个重要步骤,其中包含了许多选项,用于控制内核的行为和功能。在本文中,我们将详细介绍 Linux 内核编译选项的含义和作用。 代码成熟度选项...

    Linux内核编译实验

    ### Linux内核编译实验知识点概述 #### 一、实验目的 本次实验旨在通过实践学习以下内容: 1. **理解Linux内核源代码的目录结构及其各目录的主要功能**:通过对Linux内核源代码目录的深入研究,了解不同目录的作用...

    基于Arm的Linux内核编译指导及bootloader

    为了使这些设备运行Linux操作系统,我们需要理解Linux内核编译过程以及bootloader的工作原理。本篇文章将深入探讨这两个关键知识点。 首先,让我们从Linux内核编译开始。Linux内核是操作系统的核心部分,它负责管理...

    Linux内核编译步骤

    Linux 内核编译步骤 Linux 内核编译是一个复杂的过程,需要了解 Linux 内核的结构和编译过程。下面是 Linux 内核编译的详细步骤: 步骤 1: 下载 Linux 内核源代码 在编译 Linux 内核之前,需要下载 Linux 内核的...

    Linux内核编译全过程详解

    ### Linux内核编译全过程详解 #### 一、前言 在深入了解Linux内核编译的过程中,我们将聚焦于kernel 2.6.7版本,并详细阐述整个编译流程中的关键步骤与注意事项。对于想要深入了解Linux内核工作原理及定制化需求的...

    Linux内核编译命令

    ### Linux内核编译命令详解 #### 一、概述 Linux内核是开源操作系统的核心部分,负责管理和协调硬件资源以及为应用程序提供服务。对于开发者来说,掌握如何编译Linux内核至关重要,因为这能帮助他们根据特定需求...

    linux-内核编译各个选项的含义

    Linux 内核编译选项解析 Linux 内核编译选项是 Linux 内核编译过程中的一个重要步骤,它决定了 Linux 内核的功能和性能。本文将对 Linux 内核编译选项进行详细的解析,以帮助读者更好地理解 Linux 内核编译选项的...

    linux内核编译实验报告

    ### Linux内核编译实验知识点总结 #### 一、实验目的 - **了解Linux内核编译**: 学习如何从源代码构建Linux内核,理解内核编译的基本流程和关键技术点。 - **掌握内核配置**: 掌握如何通过`menuconfig`等工具配置...

    at91sam9260的linux内核编译详解

    ### at91sam9260的Linux内核编译详解 #### 一、引言 在嵌入式系统开发领域,对特定硬件平台进行Linux内核编译是一项至关重要的技能。本文将详细介绍如何为at91sam9260-ek开发板编译Linux内核,帮助读者掌握这一过程...

    Linux内核编译全过程详解(kernel2.6.7)[参考].pdf

    Linux 内核编译全过程详解(kernel 2.6.7) Linux 内核编译是一个复杂的过程,它需要仔细的规划和执行。在这个过程中,需要了解内核编译的各个阶段,包括编译前准备、编译配置、编译过程和运行内核的常见问题。下面...

    linux内核编译工具Bochs

    linux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具...

    linux内核编译.pdf

    linux内核编译.pdf

    VMware环境下Linux内核编译过程详细解析

    VMware 环境下 Linux 内核编译过程详细解析 在 VMware 环境下编译 Linux 内核是一件复杂的事情,需要了解 Linux 内核编译过程和 VMware 环境的特点。本文将详细介绍 VMware 环境下 Linux 内核编译过程,包括编译...

    linux内核编译最完整过程成功案例

    根据提供的文件信息,本文将详细解释Linux内核的编译过程。这不仅涉及到了Linux内核本身的编译步骤,还...以上是关于Linux内核编译最完整过程的成功案例的详细介绍,希望能帮助到正在学习或实践Linux内核编译的读者。

Global site tag (gtag.js) - Google Analytics