Chinaunix首页 | 论坛 | 博客
  • 博客访问: 904424
  • 博文数量: 73
  • 博客积分: 2689
  • 博客等级: 少校
  • 技术积分: 897
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-07 19:39
个人简介

一个有目标,为自己的未来努力奋斗的人

文章分类
文章存档

2015年(9)

2014年(2)

2013年(6)

2012年(11)

2011年(33)

2010年(12)

分类: LINUX

2010-11-23 22:31:28

  开始之前,先简单唠叨两句。  编译并使用一个自定义的内核,若想得到官方的支持是非常困难的。然而你可以增加学习的经验,尽管如此,使用你自己编译的内核是不允许上报bug的。如果你这样做了,将会被官方无任何解释的拒绝。
 
  如果你是以下几种情况之一,那么你将有理由去编译自己的内核:
  • 你是一个内核开发者。
  • 你需要已经编译好的内核的一个特殊的方面,并且官方网站上有没有将其编译进内核(例如,需要开启一些试验阶段的特性)。
  • 你试图调试并去除官方网站上已提供内核上的bug。
  • 官方网站上提供的内核不支持你的硬件体系结构。
  相反,如果你是以下几种情况之一,那么你最好不要编译内核:
  • 你仅仅需要编译一个特殊的驱动。为了这样做,你仅仅需要安装linux-headers源码软件包即可。
  • 你不知道你在做什么,并且如果你损坏了一些东西,想试图寻求帮助来修复它。依据发生错误时你所作的操作,你可能需要重新安装你的系统才可以修复损伤。
  感谢您耐心地看到了这里,下面让我们一起进入正题。
  1. 背景知识
   由于在32位机器上编译生成64位内核镜像文件,所以需要交叉编译环境。可以通过crosstool脚本工具自

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


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

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

小提示: 在使用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-


小提示:有些文章可能会建议你,在使用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-<your kernel version> <your kernel version>


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

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

cp initrd.img-<your kernel version> /boot/

cp arch/x86_64/boot/bzImage /boot/vmlinuz-<your linux version>
cp 
System.map /boot/System.map-<your linux version>


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

update-grub


OK! 到这里我们就可以

reboot


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

提示:cross compile是非常困难的一件事情,除非你非常有兴趣或是有大量的时间,否则建议你还是去官方网站上下载64Bit镜像文件为好。
阅读(7134) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~