分享

编译内核步骤详解

 guitarhua 2011-12-30

开始就是下载最新的内核,我用的FC5,内核已经很新了, 是2.6.8,在www.下载了一个最新的内核,2.6.20的。
把 kernel下载到随便一个地方,tar:之后把压缩包放到/usr/src/redhat/SOURCES/下面,其实这么也可以这样,把内核解压到 /usr/src/下面就可以了,然后进入/usr/src/就可以发现已经有2.6.20这个文件夹了,编译内核是在这个文件下面进行的。也就是说你要 进入到这个文件夹下面才可以进行之后的操作哦。
整体上分为三步:1、配置内核(就是确定哪些功能要保留在编译好的内核中,哪些功能要从内核中删除),生成一个编译配置文件.config
2、编译内核。
3、 安装内核。
之后的就是正式的步骤:
进入当前的目录/usr/src/redhat/SOURCES/linux-2.6.20
清除当前目录下编译设置:
步骤1:
$make mrproper
其实这步可以不要的。一般还是要一下吧。
该命令确保目录下没有相关的文件和配置,如果已经编译过linux内核,建议使用该命令
步骤2:
配置内核模块的功能,有几种方式可以进行界面选择:
$make config(文本的配置方式,需要用户自己写配置文件)
$make menuconfig(文本选单的配置方式,在有字符终端下才能使用)
$make xconfig(图形窗口模式的配置方式,必须支持Xwindow下才能使用)
$make oldconfig(文本配置方式,在原内核配置的基础修改时使用)
这里推荐make xconfig方式,图形窗口的配置比较直观,对应每一项相应的配置时,有三种选择:
Y--该模块编译进内核
N--该模块不编译进内核
M--该模块编译成可加载内核模块
     内核编译中各项模块功能的选择请参考我的另外一篇文章。
这 里我选择的是:menuconfig,进去之后是一个蓝色界面.总共有10多个大的条目,按enter进入,前面有[ ]的可以直接输入大写的Y/N,Y显示是一个*,而N是默认的选择就是[空白],如果你要选择就按下Y,或者不选N,当然了还有[m].其实条目下面可能 还有一个东西就是---->,也是按回车进入设置.好像还有一个X选择的,进入了就晓得拉.
这里边很多东东都要注意选啊,这个要求您对硬件,软件,网络有一定的认识,实在不知道就按默认的来吧.免得以后启动不了骂天骂地都没用哦,我可是好多次启动不了,最后才摸出窍门的…
这个步骤完成之后,系统会提醒您,next step you should run “make dep”
然后, 内核模块文件连接    :
步骤3:
#make dep (一到两分钟)
在确定要编译哪些东东之后(make *config),这个要确定依赖性用这条指令就可以完成了,也就不用麻烦您那么忙着搞了,呵呵,这个确定依赖性以后,然后就要清除一些东东了…
步骤4:
#make clean (少于一分钟)
清除一些不必要的文件,那些乱七八糟的东东是可能会导致您在编译过程中出现错误的哦,一定要做哦…
步骤5:
#make bzImage(15分钟左右)-
这个就是生成您的新核心,也就是kernel啦,所有的系统硬件软件交互都靠它了哦..

其 实可以是make zImage的,但是你要确保您所编译的这个新内核在640K之下,您就可以使用make zImage,如果比640K大,那就要用make bzImage,您要说没编译出来咋知道多大呢?我的看法是建议用bzImage,因为我编译出来的内核一般都是800~900K左右. …我是菜鸟,本帖子也是为我一样的菜鸟所写,所以. ..咱们就默认make bzImage…


假 如内核现在已经编译好了,当然越小越好哦,这时候系统会有个提示编译后的bzImage放到哪里去了,提示最后几行,已经告诉了您的新编译出的核心位置 啊,一般都在这里/usr/src/linux-2.6.20/arch/i386/boot/,这时候您要做的就是把它放到/boot目录底下去哦,不 然系统可没法启动的 …
#cp /usr/src/linux-2.6.20/arch/i386/boot/bzImage /boot/vmlinuz-2.6.20 这里好像可以不手动复制,系统最后也会在boot下面产生一个吧。
(这里其实已经把bzImage更名为vmlinuz-2.4.22,呆会在/boot/grub/grub.conf里就指定这个新内核)

步骤6:
#make modules(耗费时间取决于您所选择编译为modules的数量)
哇 哇,又一个耗费时间的步骤来了,您还是找点什么做做吧,估计也要好久哦,大概20分钟吧,这个步骤就是把您在make menuconfig里边所选择为M的东东,全部编译成模块并放在/usr/src/linux-2.4.22/下…如果你选择的M比较多的话,还是…去 玩会吧,家务没做啊?功课没做啊什么的?不过如果您比较喜欢把所有东东都编进内核的话,那就不需要多长时间,少选一些为M,这样很快就可以完成,我的只用 了一分钟就完成了,不过如果您有很多不知道而选择默认的话,那恐怕就要好花时间了. ..
步骤7:

#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目录了…
步骤8:
#make install
说 到make install我们这里又有点话要说哦,make install就相当于一个自动化的过程啦,因为其他东东它都会帮您做好的,如果您确实比较懒,或者已经对前边的步骤已经很没耐心了,您就直接执行此步骤 吧…当然您可以很快做好新系统了,而且可以重新从新内核启动哦,但是您可能对这中间发生的事情就不明白了哦,小时侯上课的时候老师谈什么要授之以渔,而不 要授之以鱼,没办法。您要是觉得麻烦,俺就省了,俺手还觉得累,呵呵:)
还是谈谈这个过程吧,这期间,系统会把您的当前release版本号后面加上一个custom然后写到grub.conf里边去,重新启动后您就可以看到2.4.22custom的选单了 …

至于这个文件名是怎么决定出来的呢?您可以看一看/usr/src/linux-2.4.22哦,里边有个Makefile,您试一下

一般的可以认为到这里就算完成了内核的编译和安装,最后的shell可以告诉你生成了什么东西就是.config文件,还有一个zimage文件,好像还有一个什么东西我不记得了.
重启,就会看到还有一个问题,在grub启动的选择里面,有3个冬冬,一个是windows一个是最新的版本的内核,还有一个以前的内核版本,我尝试过了,最新的可以进去,老的版本是不可以进去的,应该是config文件,还有一个zimage文件被新的内核给覆盖了吧.
然 后就是解决这里没有的启动选项,记得以前就设置过grub,cd /etc,之后vi ./grub.conf,把第一个2改变成1,或者0,即从windows启动或者linux,下面有3个title,把老版本的那个title相关的东 西全部给删除了就可以了,重启了就可以了.呵呵
再看就可以看见grub的启动选项里面就只有两个了,之前千万不要删除错了title就可以了.
我的这一切都很顺利没有遇到error,make的时候有一些警告,都是说什么没有初始化,或者说过时了,过时就过时了没有关系.不要鸟他们.
注意事项:
1.在配置时,在一个项上,按Y就是把一个功能编译到核心中,按N就是去该功能,按M就是将该功能编译成模块,
并且,不是所有的功能都能编译成模块,通常是一些驱动程序可以编译成模块。

2. 配置时,有几个项必须被编译到内核,而不能去掉或是编译成模块,否则编译好的内核肯定不能正常启动。这几个模块是File System菜单下的Ext3 journalling file system support子项下所有的项。注意,Ext3 journalling file system support下面又含有两个子项:Ext3 extended attributes和JBD(ext3) debugging support,这些项全部选中Y,以便将其编译进内核。
3.如果上面的都做过了,开机时,新内核还是不能正常 使用,那么,就进入旧内核,把/etc/selinux中的config
中的SELINUX项给禁止掉即可。
4.对于笔记本电脑,带DVD-光驱的,注意,还必须选中File System项下的Micellaneous Filesystem support下的
UFS开关的一项,否则有可能启动不了。
0人
了这篇文章

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多