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. 《剑指offer》-找到数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  2. vim的基本用法

  3. WebApi的调用-2.后台调用

    httpClient调用方式 namespace SOA.Common { //httpClient调用WebApi public class HttpClientHelper { public st ...

  4. 转载 c++指针 指针入门

    这是一篇我所见过的关于指针的最好的入门级文章,它可使初学者在很短的时间内掌握复杂的指针操作.虽然,现在的Java.C#等语言已经取消了指针,但作为一个C++程序员,指针的直接操作内存,在数据操作方面有 ...

  5. openstack Too many open files错误

    oopenstack突然web页面无法打开,页面报500错误,查看httpd日志报如下错误 [Fri Feb ::] [:error] [pid ] [remote ] IOError: [Errno ...

  6. 用jQuery监听浏览器窗口的变化

    $(window).resize(function () { //当浏览器大小变化时 alert($(window).height()); //浏览器时下窗口可视区域高度 alert($(docume ...

  7. BZOJ1008 [HNOI2008]越狱 快速幂

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1008 题意概括 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可 ...

  8. 【Java】 剑指offer(4) 替换空格

    本文参考自<剑指offer>一书,代码采用Java语言.  更多:<剑指Offer>Java实现合集 题目 请实现一个函数,把字符串中的每个空格替换成"%20&quo ...

  9. 64Bit & 32Bit HashCode

    以下为64位和32位的hash值计算方法 public class HashUtil { private static final long FNV_64_INIT = 0xcbf29ce484222 ...

  10. npm ERR! errno 1 npm ERR! chromedriver@2.35.0 install: `node install.js`

    在使用webpack+vue-cli进行vue项目构建时可能会出现一下错误,webpack@3.10.0及以上版本和vue-cli@2.9.2及以上版本会自动安装依赖(我在自己电脑上测试是这样的)不用 ...