Linux 内核编译

  Linux操作系统一直在不断的发展和完善,内核版本也在不断地更新。对于Linux的用户来说,如果不想显得自己太"Low",学会编译安装Linux 内核就变得非常重要。下面简单介绍一下编译和安装内核的过程。

事实上Linux 支持的硬件系统是很多的,比如X86、ARM等等。本文只介绍基于X86系统的编译。

  巧妇难为无米之炊,要想编译内核首先得拿到内核的源代码吧。到www.kernel.org 网站上download一个,并在Linuxx系统下用"tar xzvf $version "解压开。这里我下载的是Linux-3.19.3.所以执行

的是" tar xzvf Linux-3.19.3 "。解压完成的文件夹里面就是庞大的Linux 内核代码。下面开始介绍编译过程。

 编译的过程大致可以分为4步

  1.配置内核,得到配置文件 .config

  2.编译内核,得到 内核映像 zImage 和 内核模块映像 initrd-$version 

  3.安装内核

  4.清除文件

      1.配置内核

       为啥要配置内核?很简单,因为内核是适用于多个系统的,我们要根据自己的硬件系统制定出匹配的软件系统。

进入解压开的内核源代码根目录,执行 “make menuconfig”命令,,会出现如下的界面:

这里就是内核配置的菜单项,我们可以一项一项的选择,可是这么多选项,要知道哪个是需要的,哪个是不需要的可不是件容易的事儿。懒人自有懒人的方法,咱不是已经有了自己Linux系统么,咱看看现在系统的配置,仿照它就行。到/boot/目录下找到配置文件,这里我的是 config-2.6.32-279.el6.i686 文件。将这个文件copy 到内核根目录下。然后选择上面的 <load> ,进去以后将文件名填好。选择<OK>回到上面的界面,选择 <save>,将文件名命名为.config 然后退出。

回到内核根目录使用 ls -a 查看配置文件,如果有个.config 的文件则说明配置成功了。

  2. 编译内核

  其实编译内核可以细分为4步:

  2.1 编译内核文件:使用make bzImage 命令开始编译,整个编译过程非常漫长,可以达到15+分钟,如果电脑残点的可以用到半个小时。编译完成后会在 arch/X86/boot/下找到一个bzImage

的内核映像文件。

  2.2 编译内核模块:首先为啥有了内核文件还有个内核模块呢?因为整个Linux操作系统是非常庞大的,如果所有的文件都放在bzImage 里,那系统就会显得非常臃肿而且占空间。并且有些服务平时是不会用到的,所以就把这些需要用到才加载的文件编译成内核模块,等用到的时候在加载到内存运行。那怎么编译内核模块呢?很简单,执行命令 make modules 就行。编译好的内核模块散落在各个文件夹里,后缀都是 .ko 。

2.3 将编译好的内核模块/lib modules/目录下:make modules_install。执行完这个命令之后到/lib/modules/目录下可以看到相应的目录<我的就有两个目录2.6.32-279.el6.i686 和 3.19.3>

  2.4 制作initramdisk:将编译好的内核模块文件打包成一个文件,执行命令 mkinitrd  initrd-$version  version 如我的就是 mkinitrd  initrd-3.19.3  3.19.3。完成以后会在目录下出现内核模块文件 initrd-3.19.3 。至此,编译阶段完成。

  3.安装内核:经过前面的编译阶段,我们得到了两个文件,分别是 bzImage 和initrd3.19.3 ,所谓的安装其实就是将这两个文件copy 到/boot/目录下,然后修改启动项/etc/grub.conf里面的加载内核文件和内核模块文件就行。最后重启电脑即可用到我们刚刚编译好的内核。

  4.清除文件:安装完成以后我们还得把内核代码里留下的痕迹清理。执行命令 make distclean 即可。

至此,编译安装内核的工作已经完成。

时间: 2024-10-06 03:01:32

Linux 内核编译的相关文章

Linux内核编译过程分析

http://pan.baidu.com/s/1ntqLA7v 其中是我总结生成的一些文档,以便于理解当我们输入make uImage后,系统是怎么一步一步生成uImage的,我采用的是逆向分析的方法. Linux内核的编译结构还是挺复杂的,我分析的还不到位,文档还有欠缺. 下面是缩略图,在共享的目录中有一个swf的文件,可以用浏览器打开,然后就可以动态的阅读了,同时还提供了通过网页.PDF以及word阅读的文件. Linux内核编译过程分析,布布扣,bubuko.com

Linux内核编译及系统裁剪之一

Linux内核编译方法详解及系统裁剪之一详解 我们的内核是由两部分组成的: 1,内核核心 核心文件的路径是/boot/vmlinuz-内核版本号 如下图-> 2,内核模块(ko:kernel object,内核对象) ko文件的路径是/lib/modules/内核版本号/下的所有文件 如下图-> 我们的内核有两种设计风格: 1,单内核设计风格 Linux的内核就属于是单内核设计风格的,不过Linux的单内核设计风格采用了微内核设计风格的模块化设计思想,所以使得我们的Linux内核的核心可以被设

Linux内核编译完整过程

Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过程中的一些实际经验. 内核简介 内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性. Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可

Linux内核编译和替换小结

Linux内核编译和替换小结 一 准备工作 1 当前Linux 环境 系统版本为 3.8.13.13-cdos 2 下载内核源码 在网站 www.kernel.org ,选择合适的版本下载. 本次下载版本为官方最新开发版本 linux-3.17.tar.xz ? 二 内核编译 1 解压源码 当前系统的源码位置为 /usr/src/linux-headers-3.8.13.13-cdos 新的源码解压到 /opt/linux-3.17,使用命令 #tar xvf linux-3.17.tar.xz

linux内核编译与开发

一.Linux内核简介linux kernel map: linux 系统体系结构: linux kernel体系结构: arm有7种工作模式,x86也实现了4个不同级别RING0-RING3,RING0级别最高, 这样linux用户代码运行在RING3下,内核运行在RING0,这样系统本身就得到了 充分的保护 用户空间(用户模式)转到内核空间(系统模式)方法: ·系统调用 ·硬件中断 linux kernel 体系结构: 虚拟文件系统VFS: VFS(虚拟文件系统)隐藏各种文件系统的具体细节,

Linux内核编译 Ubuntu 14.04.3 server 升级至3.19.8

读书笔记:<Linux内核设计与实现>,原书第3版,陈莉君 康华 译 第2章:从内核出发     2.3节:编译内核 实验: ============================================================ 系统环境:VM虚拟机 Ubuntu 14.04.3 LTS server版 任务:编译安装新的内核 注意:不要跨大版本,我在3.19版本内 耗时:2小时 所有版本的内核: https://www.kernel.org/pub/linux/kernel

linux内核编译,配置本机驱动

1.前言  编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多驱动,不懂硬件的我们,看到都头大.本人第一次安装gentoo的时候,内核编译了5次,前4次主要失败原因是以太网卡驱动.无线网卡驱动.显卡驱动.声卡驱动都没一次性配置正确.虽然gentoo提供了genkernel命令,可以自动帮你编译内核,但还是想自己手工尝试下. 2.获取本机驱动信息 既然跟内核挂钩

Linux内核编译与安装

平台:虚拟机Ubuntu10.04 内核版本:3.0.80 ---------------------------------------------------------------------------------------------------- 内核的编译分为两种:X86平台和ARM嵌入式平台 一.X86 平台:虚拟机Ubuntu10.04 内核版本:3.0.80 1.下载(并安装)源码:linux-3.0.08 https://www.kernel.org/pub/linux/

Linux内核编译、管理以及kickstart和引导镜像制作

其实内核就是系统上面的一个文件,包含了驱动主机各项硬件的检测程序与驱动模块,而Linux的内核是单内核体系,且是模块化的 内核的组成部分: 核心文件:/boot/vmlinuz-VERSION 模块文件:/lib/modules/VERSION/ *.ko: 模块间或许存在依赖关系: ramdisk: 非必须性内容:只是用于实现内核在无法加载根文件设备时提供 内核模块管理: lsmod命令:列出已经装载的模块 另一种办法:# cat /proc/modules modinfo: 查看指定模块的详