热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

RedHat8.0下完整的内核编译步骤和说明

文章标题:RedHat8.0下完整的内核编译步骤和说明。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  ***********************************************************************
  *以下步骤有很多都是很初级的命令或解释,因为偶是linux新手,
  *在编译过程中走了很多弯路,花了大量时间找各种解决办法,所以
  *把相应的命令都写了出来,希望对跟偶一样的才入门不久而又想
  *编译内核的新手有所帮助!
  *
  * kilvon 05-Mar-2003
  **********************************************************************
  
  基本编译情况说明:偶目前的版本是: RedHat linux 8.0
  (机器有双操作系统:linux和windows 2000)
  内核版本是 2.4.18-14,硬件是笔记本compaq 的某一型号,
  下载的内核版本是2.4.20(在www.kernel.org上可以找到),
  推荐编译内核时使用高版本,而不是在以前的版本上编译,
  原因见第7.1步的说明
  
  在编译开始前,建议先在windows下用相关软件对硬件做一个
  详细统计,包括硬件类型,厂家,芯片版本等等,特别是笔记本
  和品牌机,因为二者很多部件都是OEM其它厂家的,并把它打印
  出来以供配置内核时使用.(linux下也可以用:系统工具->
  硬件浏览器来查看)
  
  另外建议在身旁准备几张纸和笔,随时把你认为重要的信息记下来,
  当然包括错误信息了,以帮助以后判断和解决问题.
  
  1.将内核源码包linux-2.4.20.tar.bz2 copy至/usr/src目录下:
  #cp linux-2.4.20.tar.bz2 /usr/src
  #cd /usr/src
  
  2.将指向以前内核版本的symbol link删除
  #rm -f linux-2.4
  
  3.用以下命令解开压缩包
  #bzip2 -d linux-2.4.20.tar.bz2
  #tar -xvf linux-2.4.20.tar
  
  4.创建新的symbol link以链接到刚解开的源码所在目录
  #ln -s linux-2.4.20 linux-2.4
  
  5.进入到以后编译时用的工作目录虾:
  #cd /usr/src/linux-2.4
  
  6.该命令保证源代码目录下没有不正确的.o文件(即object文件,编译c语
  言时生成的,目的是下一步编译成可执行码时link之用)以及文件的相互
  倚赖关系.第一次编译刚下载的源码包不用此命令,但如果多次使用这
  些源码编译内核,那么一定要先运行本命令.
  #make mrproper
  
  7.为了不影响已经可用的内核(比如安装linux时装入的内核),现在需要
  保存以前的可用的内核(以使得编译失败仍然可以"方便的"启动linux),
  并且我们要对本次编译的内核标识一个容易辨认的标记,以下几步与
  编译暂时无关.
  
  7.1偶使用grub作为boot manager,所以要修改grub.conf文件,
  #cp /boot/grub/grub.conf /boot/grub/grub.conf.bck
  (建议有条件打印一份原始的grub.conf文件,原因见第7.4步)
  #emacs /boot/grub/grub.conf
  (emacs小提示: ctrl+ x +s 为保存结果,ctrl + x +c为关闭emacs,
  删除n行文字为:先把光标放在要删除文字的起始处 ctrl + u,然后敲入要
  删除的行数,比如4,最后ctrl + k)
  
  下面是偶的grub.conf内容:
  default=1
  timeout=10
  splashimage=(hd0,6)/grub/splash.xpm.gz
  title Psyche (2.4.18-14 standard)
  root (hd0,6)
  kernel /vmlinuz-2.4.18-14.standard ro root=/dev/hda8
  initrd /initrd-2.4.18-14.standard.img
  title Windows 2000
  rootnoverify (hd0,0)
  chainloader +1
  
  注意kernel...和initrd...两条语句,因为要与以下改动对应:
  #rm -f /boot/System.map
  #rm -f /boot/vmlinuz
  #cp /boot/System.map-2.4.18-14 /boot/System.map-2.4.18.standard
  #ln -s /boot/System.map-2.4.18.standard /boot/System.map
  #cp /boot/vmlinuz-2.4.18-14 /boot/vmlinuz-2.4.18-14.standard
  #ln -s /boot/vmlinuz-2.4.18-14.standard /boot/vmlinuz
  #cp /boot/initrd-2.4.18-14.img /boot/initrd-2.4.18-14.standard.img
  (initrd只用了copy,因为偶是编译一个高版本的内核,而不是同一个版本
  内核的重新编译,编译高版本的好处在于系统会建立另外的目录而不会
  用新编译的(可能是错的)版本覆盖以前的版本,看一下/lib/modules目录
  就明白了.)
  
  7.2如何知道你的根目录"\"在哪个partition上? 命令为:
  #df
  以下是偶机器的部分输出:
  Filesystem 1K-blocks Used Available Use% Mounted on
  /dev/hda8 4137264 2136592 1790508 55% /
  ...
  
  看看你的系统根目录装在哪里很重要,因为后面你将会看到系统安装编译好的内核时在grub.conf插入的命令中root=LABEL=/ hdc=ide-scsi
  可能会引发系统引导时的如下错误:
  VFS: Cannot open root device "" or 00:00
  Please append a correct "root=" boot option
  Kernel panic: VFS: Unable to Mount root fs on 00:00
  所以要在grub.conf里修改其命令为:root=/dev/hda8
  
  7.3好了,做完这些准备工作后,我们要--
  重启一下机器,:)不要急,应为要先确认7.1步的工作的正确性,以免把7.1错误
  带入以后的步骤中.(编译内核一定要非常小心谨慎,不能急躁,否则,嘿嘿...)
  
  7.4如果在重启过程中系统有问题,可以在grub的引导界面上临时改动grub引
  导参数,相关命令有:
  e -编辑引导命令
  ESC键 -回到上级目录
  o -插入一行命令
  b -开始引导系统
  d -删除一行
  其实你可以把grub控制台上的命令都删了(只影响本次启动),然后按照
  /boot/grub/grub.conf里的命令手工在grub控制台上敲进去,也是一样的效果.
  
  7.5如果你能使用重新配置的grub命令正确启动系统,那么让我们开始真正的
  编译工作吧!!!!
  
  7.6先保证我们在编译的工作目录下:
  #cd /usr/src/linux-2.4
  然后编辑Makefile(这个文件是用来控制编译用的),找到这一行:
  EXTRAVERSION =
  修改为(以偶本次编译为例,也可以是任意的合法字符串,比如"-sema-v.4")
  EXTRAVERSION = -kilvon.001
  
  8.偶是在X Window下编译:
  #make xconfig
  
  8.1如果你是在文本模式下,用
  #make menuconfig
  
  8.2其实编译步骤里最难的就是内核参数的配置,我在这里耗费了很多时间,
  更惨的是开始并没有认识到这一点,以为是那些命令的使用...所以,接着看吧:
  
  
  8.3选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块(哪些较远?看各人对linux和操作系统概念的理解程度了,还有就是看所配置项的help),有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。下面对常用的选项分别加以介绍:
  
  /1. Code maturity level options
  代码成熟等级。此处只有一项:
  prompt for development and/or incomplete code/drivers
  如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须
  把该项选择为Y了;否则可以把它选择为N。
  
  /2. Loadable module support
  对模块的支持。这里面有三项:
  
  Enable loadable module support:
  除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。
  Set version information on all module symbols:
  可以不选它。
  Kernel module loader:
  让内核在启动时有自己装入必需模块的能力,建议选上。
  
  /3. Processor type and features
  CPU类型,选项很多,不一一介绍了,有关的几个如下:
  
  Processor family:
  根据你自己的情况选择CPU类型。
  High Memory Support:
  大容量内存的支持。可以支持到4G、64G,一般可以不选。
  Math emulation:
  协处理器仿真,协处理器是在386时代的宠儿,现在早已不用了。
  MTTR support:MTTR支持。可不选。
  Symmetric multi-processing support:
  对称多处理支持。除非你富到有多个CPU,否则就不用选了。
  
  /4. General setup
  这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:
  
  Networking support:
  网络支持,必须选,没有网卡也建议选上。
  PCI support:
  PCI支持,必选.
  PCI access mode:
  PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。
  Support for hot-pluggabel devices:
  热插拔设备支持,可选.
  PCMCIA/CardBus support:
  PCMCIA/CardBus支持,有PCMCIA就必选了。
  System V IPC
  BSD Process Accounting
  Sysctl support:
  以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。
  如果你不是使用BSD,就按照缺省吧。
  Power Management support:电源管理支持,可选上,特别是笔记本.
  Advanced Power Management BIOS support:高级电源管理BIOD支持。
  
  /5. Memory Technology Device(MTD)
  MTD设
推荐阅读
  • 本文主要说明了Linux是什么,Linux发展历史,以及同Linux系统有关的 ... [详细]
  • mysql和php的关系理解(php技术和mysql怎么结合)
    本文目录一览:1、apachephpmysql他们是什么关系 ... [详细]
  • ANSI
    ANSI是什么编码?用Notepad创建一个文本文件text.txt,其默认编码格式为ANSI(乍看之下,还以为是ASCII ... [详细]
  •  像Slashdot这样的论坛上常常有人在攻击GNU,他们的观点在我看来完全是缺乏历史知识和不尊重历史。当GNU倡导称Linux为GNU/Linux时,这些人声称GNU企图从Linus ... [详细]
  • emacs和auctex的安装
    2019独角兽企业重金招聘Python工程师标准emacs是linux下的一个文本编辑器,相当于windows下的winedt的功能。auctex是emacs的 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 原文地址:https:www.lujun9972.winblog20210924如何更改url-package访问http时的user-agent-headerindex.html ... [详细]
  • shell学习文档
    2019独角兽企业重金招聘Python工程师标准为什么要进行shell编程在Linux系统中,虽然有各种各样的图形化接口工具,但是shell仍然是 ... [详细]
  • 首个支持苹果M1的Linux发行版来啦!
    👇👇关注后回复“进群”,拉你进程序员交流群👇👇文|白开水出品|OSC开源社区(ID&#x ... [详细]
author-avatar
手机用户2502925587
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有