linux 内核cpx86_64,在x86_32环境下编译x86_64linux内核

很好的一片博客,以前看过,再去搜的时候,花了很久时间才搜到,记录下来。

http://blog.chinaunix.net/uid-24585858-id-2125490.html

开始之前,先简单唠叨两句。  编译并使用一个自定义的内核,若想得到官方的支持是非常困难的。然而你可以增加学习的经验,尽管如此,使用你自己编译的内核是不允许上报bug的。如果你这样做了,将会被官方无任何解释的拒绝。

如果你是以下几种情况之一,那么你将有理由去编译自己的内核:

你是一个内核开发者。

你需要已经编译好的内核的一个特殊的方面,并且官方网站上有没有将其编译进内核(例如,需要开启一些试验阶段的特性)。

你试图调试并去除官方网站上已提供内核上的bug。

官方网站上提供的内核不支持你的硬件体系结构。   相反,如果你是以下几种情况之一,那么你最好不要编译内核:

你仅仅需要编译一个特殊的驱动。为了这样做,你仅仅需要安装linux-headers源码软件包即可。

你不知道你在做什么,并且如果你损坏了一些东西,想试图寻求帮助来修复它。依据发生错误时你所作的操作,你可能需要重新安装你的系统才可以修复损伤。   感谢您耐心地看到了这里,下面让我们一起进入正题。

背景知识    由于在32位机器上编译生成64位内核镜像文件,所以需要交叉编译环境。可以通过crosstool脚本工具自

动化配置。下载该工具可以通过点击下面的连接

http://www.kegel.com/crosstool/#download

下载后,在使用该工具时,最好先看看使用说明。

http://www.kegel.com/crosstool/crosstool-0.43/doc/crosstool-howto.html

这将会使你节省大量的时间,转而去做更多的工作^_^

小提示:在使用crosstool工具时,需要创建数个目录,当然也可以自定义设置,但是如果你选择在/opt/目录或是其他具有root权限的目录中创建的话,那么这时为了减少对后续工作的不必要的麻烦,建议你可以使用如下命令设置一下上述目录的使用权限:

chown -R .

user为你当前用户的名称

2. 编译内核

不管是交叉编译还是其他方式的编译,内核编译过程大体上可以分为以下几步(但这里主要讲解交叉编译,其余情况直接将make命令行编译选项去掉即可):

第一步:产生配置文件和Makefile

这里的配置文件是.config。可以通过命令:

make ARCH=x86_64 CROSS_COMPILE=X86_64-linux-gnu- oldconfig/muneconfig

产生。在该命令执行过程中,需要用户参与内核参数的配置。这些配置最终将会决定你的内核所具有的特性。命令执行完成后,配置文件.config和规则文件Makefile将会被生成。

第二步:编译并生成压缩内核镜像文件bzImage(该文件名也由.config文件来决定)

执行如下命令即可。

make ARCH=x86_64 CROSS_COMPILE=X86_64-linux-gnu-

小提示

0818b9ca8b590ca3270a3433284dd417.png:有些文章可能会建议你,在使用make编译内核时可以利用多核参数选项(-j2),可以加快编译速度。但这里根据我的编译经验来告诉你,最好不要使用该选项。因为目前阶段多核协同工作技术还不成熟,在编译时总是会出现编译不完全致使新内核无法正常引导的情况。

第三步:编译内核模块(modules)

在.config文件生成过程中,你会看到很多'm'的配置选项。这些选项就是在这里起作用的。它来告诉编译器哪些部分以内核模块的方式进行组织。好了,下面就是目标模块的生成命令:

make ARCH=x86_64 CROSS_COMPILE=X86_64-linux-gnu- modules

第四步:安装内核模块

可以通过下面的命令,将第三步中生成的模块安装到modules/目录中。

make ARCH=x86_64 CROSS_COMPILE=X86_64-linux-gnu- modules_install

第五步:生成内核镜像文件

该镜像是系统在boot时使用的文件。可以通过下面的命令生成:

mkinitramfs ARCH=x86_64 CROSS_COMPILE=X86_64-linux-gnu- -o initrd.img-

3. 配置新内核的启动引导环境

对于刚编译生成的内核,若想让它成功引导系统需要完成下面的工作:

cpinitrd.img- /boot/

cp arch/x86_64/boot/bzImage /boot/vmlinuz-

cpSystem.map/boot/System.map-

最后,生成启动项配置文件

update-grub

OK! 到这里我们就可以

reboot

系统了。正常情况下,新内核会被顺利的加载并执行。但是如果编译内核时,你的配置不正确,或是使用的编译器过低,或是被链接入镜像文件的资源版本过低,就会出现引导失败的情况。这是你就要好好检查编译环境和配置文件了,然后重新进行2中的操作,修正new kernel中的bug.

提示:cross compile是非常困难的一件事情,除非你非常有兴趣或是有大量的时间,否则建议你还是去官方网站上下载64Bit镜像文件为好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值