`
xp9802
  • 浏览: 1204263 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Linux 内核编译步骤及配置详解

阅读更多

前言
   Linux内核是操作系统的核心,也是操作系统最基本的部分。


   Linux内核的体积结构是单内核的、但是他充分采用了微内核的设计思想、使得虽然是单内核、但工作在模块化的方式下、并且这个模块可以动态装载或卸 载;Linux负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。如是我们在了解Linux内核的基础上根据自己的需 要、量身定制一个更高效,更稳定的内核,就需要我们手动去编译和配置内核里的各项相关的参数和信息了。
注意、如果两个内核模块的版本不完全相同是不可以跨版本使用的。

正文
   首先我们要去获得Linux内核的压缩文件、获得的路径很多了、最直接的就是去内核官网获得了(http://www.kernel.org),也可以到各镜像站上去下载、这里就不再说明了。

注意:/usr/src;一般而言、我们制做linux内核的时候源码一般放在这个路径下、并且有一个链接叫linux什么的、所以展开时应该放在这个路径下。

   我这里下载有一个3.13.2版本的内核、展开时指定一个展开路径就可以了,文件比较大、70多M、可能需要点时间的。
   # tar xf linux-3.13.2.tar.xz -C /usr/src/

   wKioL1MapH-Bjd82AABmpA1PjrU567.jpg
   展开之后在/usr/src/这个目录下就看到了生成一个linux-3.13.2的文件了

   为以后使用方便、我们给他创建一个链接:
   # ln -sv linux-3.13.2 linux

   wKiom1MapNKh74XPAAB5IEKw_vI902.jpg
   我们cd到linux目录里面看一下里面的文件看:
   # cd /usr/src/linux

   wKioL1MapOHQgrpoAACzmJ7T90Q230.jpg
   里面的目录我这里就不一一介绍了、有兴趣的朋友可以去了解一下哦。
   到下一步就是去配置内核了、这步配置内核的方法有多种、每一个make就是一种方法、我们只在选一种就可以了:

复制代码
   make config:遍历选择所要编译的内核特性
   make allyesconfig:配置所有可编译的内核特性
   make allnoconfig:并不是所有的都不编译,而是能选的都回答为NO、只有必须的都选择为yes。
   make menuconfig:这种就是打开一个文件窗口选择菜单,这个命令需要打开的窗口大于80字符的宽度,打开后就可以在里面选择要编译的项了
   下面两个是可以用鼠标点选择的、比较方便哦:
   make kconfig(KDE桌面环境下,并且安装了qt开发环境)
   make gconfig(Gnome桌面环境,并且安装gtk开发环境)
   menuconfig:使用这个命令的话、如果是新安装的系统就要安装gcc和ncurses-devel这两个包才可以打开、然后再里面选择就可以了、通这个方法也是用得比较多的:
复制代码

wKiom1MapVCCGRSaAAMP-pFlTno636.jpg

   如果想方便点又不想用别的方法那就复制当前系统上的/boot/config-版本-平台,这个文件到/usr/src/linux/.config覆 盖这个文件,再改一下里面的配置信息;哪些用得着就保留、哪些用不着就删除了都可以、有什么新的也可以加进来、这就是按自己的需求来配置了;

wKioL1MapU-xI3JzAAGGyCZYZIg932.jpg

 

   注意:如果编译是在远程连接上的话、make会出问题的、如果远程连接断开的话那运行的进程是不是也都断开了、这个make的进程一定是当前系统上运行的子进程、有些一旦父进程挂了、子进程也将不复存在、俗话说:皮之不存毛将焉附,是这个道理吧;

   所以我们使用一个叫screen这个命令来操作,没安装自己安装上就是了、可以在一个窗口上启动n个虚拟的桌面,即使退出了也会保留之前的内容,切换进screen就可以看到窗口标题栏上的screen标志了:

   wKiom1Mapd_w1zGTAAEcrGcM8i0433.jpg

   # screen -ls:可以查看当前启用了多少个screen
   按Ctrl+a,松开再按d可以隐藏screen桌面
   因为编译内核需要比较长的时间、所以我们在screen上编译、然后再把screen桌面隐藏就可以了;
   重新接入screen:
   # screen -r 跟上screenID就可以了
   然后我们就开始编译吧;(我这里编译差不多用了两小时、make的时候我不指定cpu的核心数、默认就是用一个核来编译、所以很久)

   # make

   wKiom1MappTS0l7PAADEZe4oUD8150.jpg

   编译好了之后我们就可以进行下一步了:
   # make modules_install
   这步完了之后你可以查看一下/lib/modules/目录下就会生成一个以版本号命名的一个文件模块了
   wKiom1Mawq7yelmIAABNeTaicBs308.jpg

    modules之后再往下走、敲命令吧
   # make install
   安装完之后会在/boot/目录下生成一个内核文件vmlinuz-3.13.2、还有几个跟你当前编译的版本一样的文件、可以ls去看一下:
   # ls /boot/

   wKioL1MaxPbj4wuFAAD2w1YRV1Q097.jpg
   如果没出什么问题到这里我们应该算是编译好了一个新内核了;可以到grub.conf配置文件时看一下:
   # vim /boot/grub/grub.conf

   wKiom1Maxdiy9RmsAAGyhgb-QWs068.jpg

   好了、要不我们重启一下看看、OK、重启吧!如果顺利的话就可以进到内核选择界面了,选项我们编译的新内核就OK了,好了、到这就结束了!

wKioL1Maxz2ge3GNAAC6wW-iFY0072.jpg
   总结一下我们的安装步骤:

复制代码
       1、获取内核源码,解压至/usr/src
           # tar xf linux-3.13.5.tar.xz -C /usr/src
           # ln -sv /usr/src/linux-3.13.5  /usr/src/linux
       2、配置内核特性(选择一种方法就可以了)
           make config:遍历选择所要编译的内核特性
           make allyesconfig:配置所有可编译的内核特性
           make allnoconfig:并不是所有的都不编译
           make menuconfig:这种就是打开一个文件窗口选择菜单
           make kconfig(KDE桌面环境下,并且安装了qt开发环境)
           make gconfig(Gnome桌面环境,并且安装gtk开发环境)
       3、编译内核
           # make [-j #] : #号最多为CPU物理核心总数的两倍,这样会快点哦            
       4、安装内核模块
           # make modules_install
       5、安装内核
           # make install
       6、验正并测试
           # cat /boot/grub/grub.conf
           查看新内核是否已经添加, 而后重启系统并测试
复制代码

结束:
   其实编译一个新的内核好像也不是很难是吧、跟我们之前源码编译的httpd的步骤差不多、也就是第一步麻烦点、细心点就OK了,当然如果有什么不对的地方还望各路诸侯多多提点!

分享到:
评论

相关推荐

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

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

    Linux内核编译全过程详解

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

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

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

    linux内核编译步骤

    ### Linux内核编译步骤详解 对于Linux新手而言,自行编译内核可能是一项艰巨的任务。本文将详细介绍从准备环境到最终使用自定义内核的整个过程,旨在为初学者提供一个较为完整的指南。 #### 一、安装内核源码 在...

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

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

    Linux内核编译实验

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

    linux内核编译实验报告

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

    linux内核移植配置编译详解

    在压缩包文件“linux内核移植配置编译详解”中,可能包含了详细的步骤指南、实例教程、常见问题解答等资源。这些内容可以帮助读者从基础到进阶,全面掌握Linux内核移植的各个环节。通过学习,读者可以了解如何查找和...

    at91sam9260的linux内核编译详解

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

    linux内核编译详解

    ### Linux内核编译详解:核心知识概览 #### 一、内核的重要性与特性 内核作为操作系统的心脏,负责管理系统的关键资源,包括进程、内存、设备驱动、文件和网络系统,直接决定了系统的整体性能和稳定性。Linux的...

    Linux内核编译过程详解

    Linux内核编译过程详解是一项对技术有一定要求但并非难以完成的任务。首先,你需要了解Linux内核的作用,它是操作系统的核心,负责管理硬件资源、提供系统调用接口以及调度进程等。当你需要定制内核功能或者更新到...

    浅谈Linux内核的重编译

    Linux内核的重编译是一项涉及多步骤的技术活动,旨在根据特定需求调整内核配置,以支持新硬件、优化性能或增强安全性。通过了解和掌握内核源代码的组织结构以及配置、编译的流程,Linux用户能够更好地利用这一强大的...

    Linux内核3.0.4内核编译过程

    ### Linux内核3.0.4编译过程详解 #### 一、背景介绍 随着Linux内核的发展,每个新版本都带来了性能优化和技术改进。Linux内核3.0.4作为较早期的一个版本,虽然距离最新版本已经有些年头,但它的编译流程对于初学者...

    linux 内核配置编译

    【Linux内核配置编译详解】 在Linux操作系统中,内核是系统的核心部分,负责管理硬件资源、提供系统调用接口以及实现各种服务。对于特定的硬件平台,如PowerPC架构,内核需要进行定制和编译以适应其特性。本文主要...

    linux内核编译笔记

    ### Linux内核编译知识点详解 #### 一、编译环境准备 在开始编译Linux内核之前,首先需要确保你的开发环境满足以下条件: 1. **下载内核源码**:可以从官方网址(`http://www.kernel.org/pub/linux/kernel/v2.6/`...

    Linux内核编译

    ### Linux内核编译知识点详解 #### 一、编译内核的准备工作 在开始Linux内核编译之前,需要完成一系列准备工作以确保编译过程能够顺利进行。 **1. 获取Root权限** - 输入指令:`su root` - 再输入root账户密码...

    内核编译详解

    Linux内核编译详解是针对Linux操作系统核心进行定制和优化的重要过程,尤其对于系统开发者和高级用户来说,了解并掌握这一技术至关重要。在本文中,我们将深入探讨如何编译Linux内核3.8版本,包括下载、配置、修改和...

    linux内核编译详解.pdf

    ### Linux内核编译详解知识点总结 #### 一、内核概述 - **定义与作用**:内核作为操作系统的核心,负责管理系统中的进程、内存、设备驱动程序、文件和网络系统,直接影响系统的性能和稳定性。 - **源代码公开性**...

Global site tag (gtag.js) - Google Analytics