现在我们来学习在Linux下编译内核。
编译之前,必须知道为什么要编译内核以及内核是一个什么样的东西。
Linux操作系统包括四个部分:
实用工具集;shell;系统程序和运行期库;内核
内核所起的作用——可以为其他所有的程序以及服务提供运行环境,分配各种软硬件资源
在操作系统中,内核的作用类似于人的大脑。
由于LInux操作系统,是一个开源软件,开放所有的源代码,这为我们定制内核提供了便利条件;
在Windows操作系统中,我们常常被很多问题困扰,比如说我们的操作系统在使用一段时间之后,会发现运行速度越来越慢,操作系统所在的磁盘分区容量越来越多,但是由于windows系统不开源,我们不知道为什么会出现这种情况。不过在linux中,由于所有的内核代码都是开放的,所以只要我们有足够的能力,就可以对这个内核进行定制,以满足我们自己的需求。
这种定制包括:
我们的硬件功能很强,包括很多附加设备。但是使用的linux操作系统目前没有打开对这些功能和设备的支持,因此可以通过内核编译去获取这些功能。
反过来,如果我们的硬件功能很弱,而linux系统中自带的很多功能和硬件的支持我们都不需要,也可以通过内核定制和编译去掉这些功能以加强我们的系统性能。或者杜绝一些错误和漏洞的存在。
总之,因为linux系统中给我们提供了定制内核的条件(开源),我们就应该和有能力使用这个条件去打造适合我们自己需要的操作系统。
好了,我们知道了为什么要进行内核编译,下面来演示一下内核编译的步骤:
1.在编译之前,我们要了解当前计算机的软硬件信息。
由于/proc目录下存储的是当前内存的运行值,其实这个文件夹不是硬盘中的数据,而是内存中的数据,因此我们可以通过
这个目录下的文件来获得当前系统的硬件环境信息。
比如说cpu、内存、文件系统、pci设备、版本等相关信息。
大家看到了,我们刚才通过less命令看到了cpuinfo meminfo pci filesystem partition version等信息
2.然后第二步,开始获取内核源代码包:
内核源代码包获取分两种情况,第一种是通过在系统安装光盘中获得当前系统的内核源码,这种内核包的格式多数是rpm的
第二种是通过在www.kernel.org获得更高版本的内核源码,这种内核包的格式多数是tar.gz的
我们现在来讨论第一种方法,从光盘获取——需要挂载第二张光盘。大家刚才看到的这个37M的软件包就是内核源码包
如果没有安装的话,我们使用rpm -ihv kernel-source-2.4.20-8.i386.rpm命令来安装,
如果成功,该包会安装在/usr/src目录下,产生一个linux-2.4.20的文件夹,里面就是内核源码的内容
3.但是上面这一步的执行,需要系统的一些底层环境的支持,也就是说需要事前在系统中具备和安装相应的软件包。
否则无法安装内核包,或者安装内核包之后,会在下一步操作中提示出错。
这些软件包括:gcc ncurses make dev86 glibc-kernheader cpp binutils
那么我们现在先来检查一下——使用rpm -qa | grep packagename就行
好了,看来该装的软件都已经有了,所以执行rpm -ihv kernel-source-2.4.20-8.i386.rpm就行了。
4.安装完成之后,我们的/usr/src目录里面就有了内核的源码文件:
就是刚才显示出来的两个目录,其实都是一个目录,另一个链接文件指向的是linux-2.4.20目录,
所以cd /usr/src cd linux-2.4.20
5.现在开始编译:(由于2.4和2.6内核的编译方法不是完全一样,所以我们分开两种情况讨论)
编译2.4内核: 编译2.6内核
第一步:make mrproper --清理内核源代码树(清理垃圾信息) make mrproper
第二步:make menuconfig --配置内核以及内核模块 make menuconfig
(相关的命令还有make config、make oldconfig、make xconfig)
(交互问答式)(通过旧内核生成)(图形界面下编译)
我们在这里推荐使用make menuconfig 这
种方法操作最方便最直接
在进入内核配置菜单之后,原则上,自己有把握的可以更改,没有把握的切记不要乱改,否则会导致编译失败。
另外更改的时候,如果出现*,表示编译进入内核————随系统启动而启动
M,表示编译进入模块————不随系统启动而启动,在需要的时候调用
(一些不重要的外部驱动程序就可以作为内核模块编译,这样内核不会过大,也不会影响启动速度)
空,表示不编译进入内核也不编译进入模块————放弃这个功能,如果系统不支持这类功能,可以放弃
好了下面开始更改。
大家看到了,我改了不少。现在我都不知道能否编译成功。
但其中有一点需要注意:NTFS一定要编译进入内核而不是模块;另外,没有把握的不要乱改;
还有,内核编译我认为具有很大随机性,编译不成功很正常,比如说我现在的更改就不能保证可以成功。
完成之后,将配置起一个名字,另外最后将其保存。
最后退出的时候,提示保存,这里会将刚才的配置保存为一个名称为.config的配置文件,不管我们使用make menuconfig还是
make oldconfig、make xconfig、make config,最终都为了生成这个.config文件,以后所有的操作,就会根据这个文件中的内容进行
这个文件,存储的就是我们刚才所做的改动,可以less .config查看一下
第三步:make dep --生成依赖性关系
第四步:make bzImage --生成新内核 make (2.6内核中将左边三个步骤简化为make)
第五步:make modules --编译内核模块
这三个步骤执行的时间比较长,所以,慢慢等吧!刚才这一步是执行时间最长的一步。
第六步:make modules_install --安装内核模块
第七步:make install --安装内核
(所有的编译步骤最好在字符界面下进行,否则在图形界面下速度会比较慢)
另外上面所提到的所有步骤,任何一步完成之后都要检查有没有出错,就是有没有显示error的字样,如果显示任何一步出错都要退回到
make mrproper重来
大家看到了,我们所有的步骤我刚才都执行完了,没有报错,似乎情况还不错。
但是不要高兴太早,还要进行进一步测试:
1. vi /etc/grub.conf ---->查看是否有新的内核启动项生成(刚才带custom这一项就是新的内核启动项,这步没问题)
2. ls /boot ---->查看是否有新的内核文件vmlinuz生成(刚才带custom这一项就是新的内核文件,这步也没有问题)
现在差不多行了,但是还要重启,看是否可以新的内核启动系统
以新的启动项进入:
看来已经可以进入系统了,但是在sendmail服务这里会比较慢应该事先将该服务关闭,不过这不会影响新的内核启动。继续等待。。。
我现在已经成功进入系统了,那么执行uname -a 检查一下我们现在是否使用新内核:
显示使用的内核是2.4.20-8custom,证明内核编译成功!
大功告成!
分享到:
相关推荐
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 安装光盘或 www.kernel.org 下载内核源代码。...
- **编译内核**:使用`make`命令编译内核。这一步可能会花费较长时间,具体取决于硬件性能。 - **测试内核**:在目标平台上测试新编译的内核,确保所有必要的功能正常工作。 #### 四、编译Linux内核 编译Linux...
首先,实验的目的是熟悉Linux操作,特别是通过编译内核来了解其工作原理。这要求实验者具备一定的Linux基础,包括命令行操作、权限管理等。在硬件和软件环境中,实验者使用了Windows 7作为宿主机,通过VMware ...
执行 make 命令编译内核,生成 vmlinux 文件。然后,执行 make modules 和 make modules_install 命令编译和安装内核模块。 步骤 3: 编写模块文件及 Makefile 编写模块文件,例如 hello.c,包含了模块的初始化和...
本文将深入探讨如何在Linux环境下编译内核,并解决可能遇到的问题。 首先,理解内核是操作系统的核心,它管理着系统资源,如内存、处理器时间,以及与硬件设备的交互。Linux内核是开源的,这意味着用户可以根据自己...
在Redhat4Linux系统上编译内核是一项高级的系统管理员任务,涉及到操作系统的核心构建过程。这不仅可以让你根据特定需求定制内核,还能让你更好地理解Linux的内部运作机制。以下是一份详细的步骤指南,涵盖了从获取...
Linux内核编译需要注意的几点是编译内核需要root权限,需要备份重要数据,需要安装Linux系统和软件gcc-2.95.3,需要收集硬件信息,需要删除符号链接,需要生成configure文件,需要编译内核,需要安装内核模块,需要...
Linux 内核编译选项是 Linux 内核编译过程中的一个重要步骤,它决定了 Linux 内核的功能和性能。本文将对 Linux 内核编译选项进行详细的解析,以帮助读者更好地理解 Linux 内核编译选项的含义和作用。 一、代码成熟...
本篇文章主要讲述了编译Linux内核及调试内核模块的过程,以帮助读者掌握编译内核调试内核模块的基本方法。下面是文章中所涉及的知识点: 1. 获取内核源码:文章中讲述了如何从网上下载Linux内核源码,并将其解压缩...
* 通过本次实验,学会了重新编译内核的方法,也对Linux系统下的shell指令操作更加熟悉了 六、讨论、心得 * 通过本次实验,了解了编译内核的步骤和注意事项 * 了解了Linux内核和发行版本的区别 * 通过实践,掌握了...
- **`include`**: 存储了编译内核所需的头文件。例如,`include/asm-arm` 包含与ARM体系结构相关的头文件。 - **`init`**: 包含内核的初始化代码,如`main.c` 和 `Version.c`,这些文件是研究内核的起点。 - **`mm`*...
- **编译Linux内核**: 执行`make bzImage`命令编译内核映像文件`bzImage`,并使用`make modules`和`make modules_install`命令编译并安装内核模块。 - **修改Grub配置**: 修改Grub配置文件以支持新编译的内核,确保...
3. 使用MinGW32的命令行编译内核。 4. 配置Bochs作为x86模拟器,创建包含内核的硬盘映像。 5. 在Bochs中运行编译后的内核,观察启动过程。 通过这个过程,你不仅能够深入了解Linux内核的编译过程,还能掌握一些跨...
本文将深入探讨“Linux-kernel.zip”中的主题,包括Linux编译内核、内核调试以及80386的分段机制,这些都是Linux系统管理员和开发者必备的知识点。 首先,让我们了解一下Linux编译内核的过程。当需要对内核进行定制...
在编译内核之前,需要备份当前正在使用的内核,以防止新内核出现问题时无法恢复。备份可以通过复制`boot`目录下的旧内核文件(如vmlinuz和System.map)实现。此外,还需要更新引导加载器(如GRUB或LILO)的配置,...
linux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具Bochslinux内核编译工具...
3. 编译内核:使用 make 命令编译内核,生成可执行文件。 4. 安装内核:使用 make modules_install 和 make install 命令安装内核。 二、VMware 环境下 Linux 内核编译过程 在 VMware 环境下编译 Linux 内核需要...
首先,编译Linux内核是一个多步骤的过程,主要包括以下几个步骤:下载解压Linux内核源码、安装软件依赖包、清除编译过程中产生的中间文件、配置内核选项、编译内核源码、安装编译出的内核以及重启系统加载新内核。...