centos内核源码编译-编译Linux内核(上)——基于x86平台的Linux内核编译过程

编译Linux内核

第一步:下载源码并保存到Linux目录下。 我放在/usr/src目录下,其他目录也可以。 一般情况下,下载的源代码的文件格式为“linux-$版本号.tar.bz2”,例如“linux-2.6.15.5.tar.bz2”。

第二步:解压数据包。 这里需要注意的是,解压过程必须在linux下完成,不要在windows下解压,如果在windows下解压,编译内核时会出现错误,提示缺少个别文件,这是因为在windows下,文件名不区分大小写,如direct.c、Direct.c,在Linux下是区分大小写的。 在解压过程中,Windows会将这两个文件解压成一个文件,导致文件丢失。 在linux内核源代码的同一目录下有很多这样的“同名”文件。

对于.tar.bz2后缀的文件,使用tar -jxvf解压。 例如“tar -jxvf linux-2.6.15.5.tar.bz2”,解压后会在当前目录生成一个名为“linux-2.6.15.5”的文件夹。

附:(tar命令的用法解读,参考)

第三步:进入上一步生成的内核源码目录 cd linux-2.6.15.5

第四步:清除内核源代码目录中可能存在的原始编译过程中留下的中间文件。

一般可以使用make clean命令,也可以使用make distclean。

两者的区别:

make clean 仅删除中间文件,但不删除配置文件。

make distclean 消除所有。

第5步:配置内核

这里有几个命令可用:

make config:这个命令是最难用的。 必须根据命令行的提示进行一项一项的配置,而且很多项的含义我们可能根本不明白。 因此,如果您不太了解内核,请不要使用此命令。 我们这些新手可以忽略它。

make menuconfig:这个命令不错,推荐。 与make config相比,使用该命令会有菜单项辅助我们进行配置,而且结构清晰。 并且有默认设置供我们参考。

make oldconfig:比第一个好,也在命令行输出提示信息,但只提示新项的配置。也不太好用

make Xconfig:适合桌面系统,最直观。 不过,建议使用 make menuconfig。

配置时,每一项一般有Y、M、N三个选项。选择Y表示Yes,表示将此项编译到内核中; 选择N表示不编译此项; 选择M表示编译此项,但不是直接编译到内核中,而是编译成内核模块。

配置完相应的项目后,保存设置。 此时内核源码目录项中多了一个.config文件,该文件是隐藏的,只有用ls -a才能看到。 .config 文件保存了我们昨天的配置信息。

第六步:

一切都准备好了。 开始编译内核,使用的命令:make zImage 和 make bzImage。 在x86平台下,使用make zImage只能编译512K以内的内核,如果编译出的内核小于512K会报错,而使用make bzImage可以编译任意大小的内核(bzImage=big zImage)。 在其他平台上,这两个命令没有区别。

进入内核源码目录,直接:make bzImage。 此时系统开始编译,我们在前面的配置过程中选择Y项。

然后就是漫长的等待,红帽开始刷新屏幕:

这段时间我们最好先玩点别的,因为编译的过程确实很长。

二十分钟后,屏幕刷新终于结束,内核编译完成:

这时centos内核源码编译,源代码目录下的arch//boot目录中会出现一个名为bzImage或zImage的文件(取决于我们编译内核时使用的命令是make zImage还是make bzImage),这就是编译好的内核。

步骤7:编译内核模块。 使用的命令:make module。 同样在源代码目录中使用此命令。 此时系统开始编译我们在配置过程中选择的M项。

没有屏幕截图。

步骤8:安装内核模块。 使用的命令:make module_install。 执行此步骤后,系统会将内核模块从内核源代码目录复制到/lib/modules(该目录中会出现一个以内核版本号命名的文件夹,如“2.6.15.5”)。

没有屏幕截图。

第九步:制作init ramdisk。 使用 mkinitrd 命令。

如“mkiinitrd initrd-2.6.15.5 2.6.15.5”

中间的initrd-2.6.15.5可以随意命名,但最好这样命名,清晰易懂。 旁边的2.6.15.5不能随意写,是哪个版本,对应的是上一步在/lib/modules目录下生成的文件夹。 执行此步骤后,会在源码目录下生成initrd-2.6.15.5文件。

第10步:安装内核。

这一步需要将第六步编译生成的内核bzImage或zImage文件复制到/boot目录下(复制的文件名随意,但最好命名为“vmlinuz-2.6.15.6”,这是习惯)。然后生成第九步

将源码目录下的initrd-2.6.15.5文件复制到/boot下。

然后修复启动文件grub.conf,该文件位于/etc下。

在grub.conf文件中添加以下内容(添加我要安装上例中使用的2.6.15.5版本,文件名如上)

-------------------------------------------------- ------------------------------------------

title MyOwnLinux #(此处任意名称)

根 (hd0,0)

内核 /boot/vmlinuz-2.6.15.5 ro root=LABEL=/ rhgb Quietselinux=0

#上面是复制到/boot文件夹下的内核

initrd /boot/initrd-2.6.15.5 #复制到/boot目录下的init ramdisk。

-------------------------------------------------- --------------------------------

grub.conf 文件的配置说明,请参见 。

全部完成后,重启reboot

然后你会听到这样的启动界面:

最后一张图是我编译2.6.34.13时的。 之前的版本是2.6.15.5。 由于我使用的2.6.15.5的源码不是从官网下载的,所以出现了很多问题,没有成功。 最后发现它的源码有问题。 所以一定要到官网下载源码,它是稳定的。

这里,即使第七步完成了编译内核的过程,第八步中使用的“make module_install”和“mkiinitrd”命令也不属于“编译”内核的过程centos内核源码编译,而是属于安装内核的。 我上面编译的内核之所以可以直接安装在我的PC上,是因为我编译的Linux内核是基于x86平台的,而如果编译过程选择了arm等其他平台,那么编译出来的内核就无法直接安装在PC上。 编译内核时默认是基于x86平台的。 基于其他平台编译Linux内核的方式在《【学习笔记】编译Linux内核(下)》中会提到。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 centos内核源码编译-编译Linux内核(上)——基于x86平台的Linux内核编译过程 https://www.wkzy.net/game/171027.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务