用户管理  |   用户注册                                                                                    首 页软件下载教程中心办公指南flash动画文档下载办公公文

www.4oa.com - 中科软件园

投递文章 用户管理 投稿指南 资讯通告 :
站内搜索: 您的位置中科软件园 > 教程中心 > 操作系统 > Linux > 安装经验 > 教程内容

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

2005-5-21 16:52:28  来源:本站整理  作者:不详 【 投递文章
内容提要:****以下步骤有很多都是很初级的命令或解释,因为偶是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] [2] [3]  下一页

(评论内容只代表网友观点,与本站立场无关!)[ 全部评论 ]

网友评论:

    用户名:

    评   分:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

                 (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 -有事点这里