2008年04月27日
 
    整理了一下Linux内核编译的方法,原始内核版本为Linux-2.4.20.8,新内核版本为Linux-2.4.22,其它内核版本编译方法类似。
    一 准备工作
    首先当然是获得内核了,可以到
    http://www.kernel.org/
    下载。
    获得内核压缩包后(假设为linux-2.4.22.tar.gz),先将其复制到/usr/src目录下,然后转到/usr/src目录并进行解压操作,命令如下(假设当前目录为内核包所在目录)
     cp linux-2.4.22.tar.gz /usr/src
     cd /usr/src
     tar -zxvf linux-2.4.22.tar.gz
    二 生成编译所需要的配置文件
    首先进入解压后的内核文件,命令如下
     cd /usr/src/linux-2.4.22
    然后输入make menuconfig,可以调出内核配置界面,在该界面上可以以图形的方式生成编译内核所需要的配置文件,非常方便!
    下图是它的主界面
    
    一般选择默认值即可,即按Esc键退出,选择yes保存设置,如下图所示:
    
    到此,所有准备工作完毕,下面进入实际编译阶段了。
    三 开始编译
    主要包括以下几步操作。
    1.输入make dep,这行命令的意思是让系统对内核代码进行预处理。
    2.输入make bzlmage后开始编译,可能需要比较长的时间完成该过程,视具体机器性能而定。
    3.输入make modules开始编译模块
    4.输入make modules_install开始安装模块
    5.输入make install将编译好的内核进行安装。
    一般来说,以上过程不会遇到什么异常情况
    四.编译完成
    编译完成后的内核是这个文件
     /usr/src/linux-2.4.22/arch/i386/boot/bzlmage
    如下所示:
    
    
    
    五.修改启动程序配置以及新内核的启动
    编译完成后可以进入引导程序(boot loader)的配置文件看看,对于不同的引导程序(LILO和GRUB),其配置文件所在路径不同。
     对于LILO,路径为:/etc/lilo.conf
     对于GRUB,路径为:/boot/grub/menu.lst
    本系统为GRUB引导,因此进入/boot/grub/menu.lst,命令如下
     cd /boot/grub
     vi menu.lst
    文件内容如下图所示:
    
    可见,boot loader已经可以加载两种版本的内核了,在该文件中可以很容易修改一些信息,如默认加载的内核版本,引导程序停留时间,修改内核在引导界面的名称等等。
    重新启动机器,可以看到,此时在引导界面可以有两种版本的内核进行选择了,如下图所示。
    
    我们选择linux-2.4.22,也就是刚刚编译好的内核,正常进入后可以通过/proc/version文件以确定当前启动的内核版本确实为2.4.22,命令如下
     cd /proc
     vi version
    version文件内容如下:
    
    可见,内核编译成功!

自己动手编译Linux内核的更多相关文章

  1. 如何解决编译linux内核(解决声卡问题),遭遇fatal error: linux/limits.h: 没有那个文件或目录

    最近帮一位上海的朋友搞一块小板,在ubuntu15.04 vivid上已经加载了对应了.ko驱动包 但关键是系统根本就枚举不到该声卡ALC5640,试了OpenSUSE也是一样的结果,看来是内核漏加载 ...

  2. Centos下编译Linux内核

    Linux内核编译是一件简单却费事的事.但是独立的编译linux内核会帮助你很好的理解Linux内核的工作机理. 首先编译linux内核我们需要在当前linux操作系统下安装gcc编译器,因为我是Ce ...

  3. 编译linux内核时出错

    在编译linux内核的时候使用make menuconfig 可能出现下面的错误 *** Unable to find the ncurses libraries or the*** required ...

  4. Mac下重新编译Linux内核

    Mac下重新编译Linux内核 操作系统实验,要求添加系统调用并重新编译内核,这里记录一下编译内核的过程 0.下载VirtualBox 博主一直用parallel desk,但因为驱动等问题,在PD上 ...

  5. 为什么要编译Linux内核?

    新的内核修订了旧内核的bug,并增加了许多新的特性.如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译Linux内核. 通常,更新的内核会支持更多的硬件,具 ...

  6. 编译Linux内核(Mac OS平台)

    操作系统第一次实验需要编译Linux内核,我之前在Mac上一直使用的都是Parallels Desktop这个软件,所以这次也将课程网站上提供的Ubuntu安装在了PD上,但是编译完内核后无法进入Ub ...

  7. 自定义配置编译linux内核

    1 编译linux内核原因一般情况下,我们是不需要重新去编译linux内核的,但如果你发现你需要修改内核的某个部分或者说你需要的某个模块并没有编译进内核,那里你可以通过重新编译内核来满足你的需求,比如 ...

  8. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #2 如何编译Linux内核

    HACK #2 如何编译Linux内核 本节介绍编译Linux内核的方法.当发现bug而修改源代码或者添加新功能时,就需要对内核进行重新编译,生成二进制映像文件.另外,如果想要使用发布版内核中无效的功 ...

  9. make 编译 linux 内核是单线程的任务 才用-j4命令使用4 线程加速

    今天使用 make 编译 linux 内核,发现CPU只用了30%多一点,而我的电脑是4核的,所以如果没有意外的话,make 编译 linux 内核的任务是用单线程做的. 又了解到,使用-j4参数可以 ...

随机推荐

  1. Javascript事件设计模式(七)

    一:事件设计概述 事件机制可以使程序逻辑更加符合现实世界,在JavaScript中很多对象都有自己的事件,例如按钮就有onclick事件,下拉列表框就有 onchange事件,通过这些事件可以方便编程 ...

  2. 在.NET环境下使用KAFKA

    近日基于项目的解耦与削峰需求,决定在项目中引入消息队列.因为同时项目部分业务已经迁移到Java上,所以消息队列组件又要兼顾Java环境下的使用,选来选去对比了RabbitMQ.RocketMQ和Kaf ...

  3. gitlab的docker安装,非标准端口,如何处理?

    这个问题的定义是: 如果我们不是用的80端口对外提供服务, 但gitlab的docker容器里的nginx却是80端口, 那么,在我们clone代码时,带的Http地址也会是80端口,这显然会出现问题 ...

  4. [转] JavaScript 运行机制详解:再谈Event Loop

    一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...

  5. P2152 [SDOI2009]SuperGCD 未完成

    辗转相减求a,b的gcd其实可以优化的: 1.若a为偶数,b为奇数:gcd(a,b)=gcd(a/2,b) 2.若a为奇数,b为偶数:gcd(a,b)=gcd(a,b/2) 3.若a,b都是偶数:gc ...

  6. centos6.9上mongdb安装

    一.设置yum源 vi /etc/yum.repos.d/mongodb.repo [mongodb-org-3.2] name=MongoDB Repository baseurl=https:// ...

  7. Python String 方法详解

    官网文档地址:https://docs.python.org/3/library/stdtypes.html#string-methods 官网 公号:软测小生ruancexiaosheng 文档里的 ...

  8. P1562 还是N皇后

    P1562 还是N皇后原来,就会位运算搞八皇后,当复习一下.可行的位置是1,其他是0比如11011到下一行的时候,对应的左斜线和右斜线要移一位 #include<iostream> #in ...

  9. 虚拟机克隆后导致两台机器的IP都不显示的解决方法

    centos7中输入ifconfig出现ens33,没有eth0,也没有ip,不能上网,输入ifconfig后如下图 之前在网上也找了很多的方法,比如删除文件70-persistent-ipoib.r ...

  10. Spark函数式编程进阶

    函数式编程进阶 1.函数和变量一样作为Scala语言的一等公民,函数可以直接复制给变量: 2.函数更长用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是匿名函数赋值给 ...