日期:2014-05-16  浏览次数:20563 次

转载(菜鸟浅谈Linux内核编译过程...)

[原创] 菜鸟浅谈Linux内核编译过程...


http://www.chinaunix.net 作者:双眼皮的猪??发表于:2008-07-17 10:43:05
【发表评论】 【查看原文】 【Linux讨论区】【关闭】

菜鸟编译Linux内核?????????????????
?????双眼皮的猪??????????
??菜鸟俺,最近研究了一下Linux内核的编译,有些许心得,望同大家分享一下,故有此文…我们这里要谈的不涉及到源码,只是一些内核编译的步骤及相关知识…因为本人是菜鸟。所以,也就希望和菜鸟们分享一下…?
首先,您要确定您有一台装有Linux的系统,编译内核可以在本机上直接对本机内核进行编译,也可以从网上下载内核在其基础上进行编译.我们这里详细讲一下升级内核的方法,?
您可以从www.kernel.org下载到最新的Kernel版本,我们这里以RedHat9为例(其他版本其实也都一样,只是在make?menuconfig中有点不同),详细讲一下内核编译的步骤?:?
首先,确认您是以[color=red]root?用户[/color]登陆.把内核源码cp到/usr/src目录底下(请确认您是以root的身份在进行操作,否则会返回Permission?Denied的提示):?
mkdir?/usr/src/linux-2.4.22?
cp?2.4.22.tar.bz2?/usr/src/linux-2.4.22?(我用的是2.4.22的kernel)?
解压缩之,熟悉linux系统的朋友应该会知道:?
bunzip2?***.tar.bz2?|?tar?xvf??
进入到/usr/src/linux-2.4.22目录,,请确定您是在此目录下操作,而且保证您所敲入的命令是正确的,不然会返回No?rule?to?make?target?***,stop类似的错误提示,这可是菜鸟们所要注意的哦。不然开头搞不好。后面就不用谈了哦…?
[color=red]1#cd?/usr/src/linux-2.4.22?
2#make?mrproper[/color]?
其实这个步骤是可以不用要的,这个目的是清除原先此目录下残留的.config和.o(object文件),如果我们是刚下载的源码,那么这一步您就可以省了:),但是如果您已经编译过多次内核的话,这一步可是一定要的哦,不然以后出现很多小问题,可别怨我没告诉你….config文件我们会在后面提到…?
[color=red]3#make?menuconfig或make?config或make?xconfig[/color]?
这就开始编译内核了,打起十二分精神,编译不好,系统是无法启动的啦.小心应付,其实这个步骤还有其他两种方式,make?config以及make?xconfig,make?config是一个一个的回答问题,命令行方式,您如果回答错了一个,您就不能改正了哦(所以不推荐这种编译方式),make?menuconfig和make?xconfig提供了更友好的操作方式,不过make?menuconfig需要ncurse包,而make?xconfig也需要某个东东,好象是tk,忘记了,一般都安装了,俺就不提了,如果没有您可没法运行的哦.什么你不知道什么是ncurse和tk是什么?那我就不说了,去www.google.com去搜索一下吧...?
这里边很多东东都要注意选啊,这个要求您对硬件,软件,网络有一定的认识,实在不知道就按默认的来吧.免得以后启动不了骂天骂地都没用哦,我可是好多次启动不了,最后才摸出窍门的…?
这个不是这个帖子的主题(其实我很想写的,但是没人合作,一个人写又太累,再加上我最近也忙考试,所以…)所以我们就略过哦…?
在make?menuconfig中,有的让您选择[*],有的让您选择[M],有的让你选择[],*表示选中直接加载进kernel,而M则表示会在后面的make?modules中编译成modules,让您随时可以通过insmod和modprobe调入内核…个人认为Linux的这个功能确实非常非常的棒…而这可是其他操作系统所没有的哦.?..而make?*config的目的就是生成.config文件.至于想知道.config文件是干啥子的,看一下就知道了…J?
这个步骤完成之后,系统会提醒您,next?step?you?should?run?“make?dep”?
[color=red]4#make?dep??[/color](一到两分钟)?
在确定要编译哪些东东之后(make?*config),这个要确定依赖性,这个东东,手工也可以完成的,只是….怕您要把什么东东都放下,然后花上十天半个月的来搞,还把您忙的焦头烂额,还会出错,不过我们用这条指令就可以完成了,也就不用麻烦您那么忙着搞了,呵呵,这个确定依赖性以后,然后就要清除一些东东了…??
[color=red]5#make?clean??[/color](少于一分钟)?
清除一些不必要的文件,那些乱七八糟的东东是可能会导致您在编译过程中出现错误的哦,一定要做哦…?
[color=red]6#make?bzImage[/color](15分钟左右)-?
哦,这个可是最最最重要的啦.这个就是生成您的新核心了,不要告诉我您不知道核心是什么啊,也就是kernel啦,所有的系统硬件软件交互都靠它了哦..?

其实可以是make?zImage的,但是你要确保您所编译的这个新内核在640K之下,您就可以使用make?zImage,如果比640K大,那就要用make?bzImage,您要说没编译出来咋知道多大呢?我的看法是建议用bzImage,因为我编译出来的内核一般都是800~900K左右.?…我是菜鸟,本帖子也是为我一样的菜鸟所写,所以.?..咱们就默认make?bzImage…?
还要注意哦,这段时间你是没法做事的,你会看见屏幕上一行一行的字往下跑,不用担心哦,你可以选择把这些标准输出上的东东都重定向到/dev/null去哦,这样您就看不到这些东东了,当然,你也可以把它放在背景执行啊,在运行要开始的时候在后面加上一个&符号,这个表示是后台运行…如果您怕这些会对您编译内核有什么影响(其实没什么影响哦),那您干脆就这样,按Alt+F2,直接打开另一个虚拟终端,在那里边做事,等到编译完的时候。机器会咚的一声通知您的哦,您要真不想等的话,就去玩会吧,听听歌什么的,过会再回来,这里可是考验您耐心的时候哦,如果这您都没耐心,那后面还有个耗时的步骤哦,还是忍忍吧,为了不让系统浪费资源,你还是忍忍哦,成功后您一定会很高兴的…?
假如您的内核现在已经编译好了,当然越小越好哦J,这时候系统会有个提示编译后的bzImage放到哪里去了,提示最后几行,已经告诉了您的新编译出的核心位置啊,一般都在这里哦(我这里是RedHat9),/usr/src/linux-2.4.22/arch/i386/boot/,这时候您要做的就是把它放到/boot目录底下去哦,不然系统可没法启动的?…?
#cp?/usr/src/linux-2.4.22/arch/i386/boot/bzImage?/boot/vmlinuz-2.4.22?
(这里其实已经把bzImage更名为vmlinuz-2.4.22,呆会在/boot/grub/grub.conf里就指定这个新内核)?

[color=red]7#make?modules[/color](耗费时间取决于您所选择编译为modules的数量)?
哇哇,又一个耗费时间的步骤来了,您还是找点什么做做吧,估计也要好久哦,大概20分钟吧,这个步骤就是把您在make?menuconfig里边所选择为M的东东,全部编译成模块并放在/usr/src/linux-2.4.22/下…如果你选择的M比较多的话,还是…去玩会吧,家务没做啊?功课没做啊什么的?不过如果您比较喜欢把所有东东都编进内核的话,那就不需要多长时间