这是一篇关于内核编译的文章,作者是双眼皮的猪,觉得好,所以收藏了
| 菜鸟浅谈Linux内核编译过程... |
| 菜鸟编译Linux内核 双眼皮的猪 菜鸟俺,最近研究了一下Linux内核的编译,有些许心得,望同大家分享一下,故有此文…我们这里要谈的不涉及到源码,只是一些内核编译的步骤及相关知识…因为本人是菜鸟。所以,也就希望和菜鸟们分享一下… 首先,您要确定您有一台装有Linux的系统,编译内核能够在本机上直接对本机内核进行编译,也能够从网上下载内核在其基础上进行编译.我们这里周详讲一下升级内核的方法, 您能够从www.kernel.org下载到最新的Kernel版本,我们这里以RedHat9为例(其他版本其实也都相同,只是在make menuconfig中有点不同),周详讲一下内核编译的步骤 : 首先,确认您是以root 用户登陆.把内核源码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类似的错误提示,这可是菜鸟们所要注意的哦。不然开头搞不好。后面就不用谈了哦… 1#cd /usr/src/linux-2.4.22 2#make mrproper 其实这个步骤是能够不用要的,这个目的是清除原先此目录下残留的.config和.o(object文档),假如我们是刚下载的源码,那么这一步您就能够省了:),但是假如您已编译过多次内核的话,这一步可是一定要的哦,不然以后出现很多小问题,可别怨我没告诉您….config文档我们会在后面提到… 3#make menuconfig或make config或make xconfig 这就开始编译内核了,打起十二分精神,编译不好,系统是无法启动的啦.小心应付,其实这个步骤更有其他两种方式,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” 4#make dep (一到两分钟) 在确定要编译哪些东东之后(make *config),这个要确定依赖性,这个东东,手工也能够完成的,只是….怕您要把什么东东都放下,然后花上十天半个月的来搞,还把您忙的焦头烂额,还会出错,但是我们用这条指令就能够完成了,也就不用麻烦您那么忙着搞了,呵呵,这个确定依赖性以后,然后就要清除一些东东了… 5#make clean (少于一分钟) 清除一些不必要的文档,那些乱七八糟的东东是可能会导致您在编译过程中出现错误的哦,一定要做哦… 6#make bzImage(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里就指定这个新内核) 7#make modules(耗费时间取决于您所选择编译为modules的数量) 哇哇,又一个耗费时间的步骤来了,您还是找点什么做做吧,估计也要好久哦,大概20分钟吧,这个步骤就是把您在make menuconfig里边所选择为M的东东,全部编译成模块并放在/usr/src/linux-2.4.22/下…假如您选择的M比较多的话,还是…去玩会吧,家务没做啊?功课没做啊什么的?但是假如您比较喜欢把任何东东都编进内核的话,那就无需多长时间,少选一些为M,这样很快就能够完成,我的只用了一分钟就完成了,但是假如您有很多不知道而选择默认的话,那恐怕就要好花时间了. .. 8#make modules_install hoho,这里可是安装module的步骤了,您所选择的模块编译完成后都放在/usr/src/linux-2.4.22某子目录下,哪个子目录您看一下就知道了,make modules之后会有提示的..我也忘记了,呵呵:),这多不好,而insmod连同相关指令都是从/lib/modules/linux-2.4.22下取module的啊,这个指令就是把编译好的mod放到/lib/modules下去的哦,假如开始没有Linux-2.4.22目录,(也就是说您是第一次编译2.4.22的内核),那么这条指令就会自动创建该目录,假如已有了。那就会把编译后的内核放进该目录 …您以后要把mod调进kernel的时候(insmod,modprobe)都从这里寻找.o的哦… 注意哦,假如您用的是SCSI硬盘并且采用的是ext3分区格式的话,请注意,您一定要制作initrd.img(因为SCSI卡的驱动包括在这个里边),假如您使用的是IDE硬盘,您能够跳过这一步,当然,您要是有耐心的话,这里学习一下也没什么坏处哦 mkinitrd能够制作initrd.img,一般是这么使用的,假如想具体了解的话,能够man mkinitrd,假如只想搞个initrd.img出来的话,那就mkinitrd /boot/initrd-custom.img 2.4.22就在/boot目录下创建了一个initrd-custom.img文档,也就是初始化映像…(initialed ramdisk)…里边主要有一些驱动,因为放在内核中就显得过大,所以编译进initrd.img,在启动中释放…而这个2.4.22就表示/lib/modules下面的2.4.22目录了… 到这里,以下就有两种做法哦… 一 手动更新System.map文档 他是当前正在运行的kernel的fuctions的说明,假如您编译内核后不更新System.map,假如碰到问题.,Trouble shooting就很困难了哦,您可有可能遇见很多烦人的信息哦,所以我们还是手动更新一次哦,也蛮简单的… #cp /usr/src/linux-2.4.22/System.map /boot/System.map 系统会提示您: Overwrite the ‘boot/System.map’ 敲入Y,回车 二 make install 说到make install我们这里又有点话要说哦,make install就相当于一个自动化的过程啦,因为其他东东他都会帮您做好的,假如您确实比较懒,或已对前边的步骤已很没耐心了,您就直接执行此步骤吧…当然您能够很快做好新系统了,而且能够重新从新内核启动哦,但是您可能对这中间发生的事情就不明白了哦,小时侯上课的时候老师谈什么要授之以渔,而不要授之以鱼,没办法。您要是觉得麻烦,俺就省了,俺手还觉得累,呵呵:) 还是谈谈这个过程吧,这期间,系统会把您的当前release版本号后面加上一个custom然后写到grub.conf里边去,重新启动后您就能够看到2.4.22custom的选单了 … 至于这个文档名是怎么决定出来的呢?您能够看一看/usr/src/linux-2.4.22哦,里边有个Makefile,您试一下 #head –n 5 Makefile 相信您已看出来了吧…这也就是命名的原因啦,于是您也能够自己修改您的Linux哦…自己custom一下release名称岂不爽哉… 从以上步骤来看,基本上已没有什么问题了,当然,请确认您在make menuconfig里边没有做过任何错误的事情哦,不然重新启动后,依然引导不了的,譬如fs里边一定要选中VFS,EXT3编译为M,因为现在系统一般都采用了ext3格式,您要是漏掉这个东东,加载不了分区,可别怨我没告诉您哦,当然second extended fs更是一定要选啦:) 我在编译的历史中曾有VFS:Unable to mount root fs on 00:00的经历,一直卡在那里,好久都没解决啊,但是后来终于发现应该是fs的问题,或是您的root分区没指定好啊.. 看了这么多。相信您也很累了,帖子也快到头了,因为马上就要完了…(假如上边您选择了make install,这里您就不用看了哦)最最最最后一点,我们要修改Grub.conf(假如您采用的是grub来引导的话,抱歉我不懂lilo,因为我也是菜鸟…),使系统在重新启动后能够从新的内核启动… #vi /boot/menu.lst menu.lst跟grub.conf内容是相同的哦,是个link,但是这里边可是彩色的文字,我很喜欢,就编辑他了.. 在原来的基础上添加一行: title new Linux(2.4.22) //这里您能够自己命名,也就是出现在grub启动菜单里的东东哦 kernel /vmlinuz-2.4.22 ro root=LABEL=/ 上边这行是指定kernel 的路径,记得我们前边生成一个vmlinuz-2.4.22的新内核吗?对了哦,就是他了…这里指定为他后,在您选择以这个选项启动后,就会起用这里的新内核了. 后面跟着的ro 表示是readonly,就是只读的意思咯,root=LABEL=/是指定路径 initrd /initrd.img 这里要指定为您所制作的initrd.img哦,假如这个制作错误的话,可启动不了的哦…当然,这说的是您使用的是SCSI硬盘,假如是IDE硬盘的话。您能够在这里写上no initrd取代,这样系统就不会使用intird啦,当然这个最好还是带着吧,前边我们也讲了他的作用了,主要还是一些驱动….连同系统初始化的程式… 好了,就到这里了…假如您有什么疑问,在下面跟贴讨论啊:) 本来要有好长的,但是实在因为考试太多…又要忙着毕业…所以简短的完成…对不住哦…
文章整理:西部数码--专业提供域名注册、虚拟主机服务 相关文章
热点关注
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源 网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧 行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒 网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它 服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护 软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer 网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash 程序设计 Java技术 C/C++ VB delphi 网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术 操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD |




