内核源代码的获得
用户可以从获得内核的最新稳定版本。
----------------------------------------------------------------------------------------------
编译内核的一般步骤
. 拿到代码的第一步
为了排除之前用户对源代码操作所造成的干扰,使用清除命令使代码变得干净是一个良好的习惯。
清除代码的方法有以下三种:
. make clean 删除生成文件,但保存配置文件。
. make mrproper 删除生成文件与配置文件。
. make distclean 连同备份文件与补丁文件彻底删除。
--------------------------------------------------------------------------------------
. 配置之前的准备
内核的默认配置往往会加入许多不必要的功能,为了得到更精简高效的内核,基于必要功能的内核
配置显得尤为重要。
---------------------------------------------------------------------------------------
. 配置内核
配置内核的方式有以下几种:
. make config 文本模式。耗费时间,不推荐。
. make menuconfig 基于文本模式的菜单选项模式。
【选项参照表见附件】
. make oldconfig 使用已有的配置文件(.config),询问新选项。
. make xconfig 基于图形化的配置
内核配置选项方式分两种:
'*'/'M'/' '三选一,和'y'/'n'二选一,驱动通常选用三选一的方式。
选项与编译处理的对应关系如下
选项 编译过程
' ' *.c
'M' gcc *.c -> *.o
'*' gcc *.c -> *.o -> ld *.o -> uImage
配置完成后会生成一个.config文件,该配置文件为内核编译的根本参照。
/boot/下有本机正在使用的配置文件,可为升级内核或配置精简内核作蓝本。
---------------------------------------------------------------------------------------
. 编译内核
编译内核命令有下:
. make zImage 编译内核映像大小小于512K,过大会出错
. make bzImage 编译内核映像大小一般大于512K,向下兼容小于512K的内核编译
此处仅编译了内核配置菜单中被指定为'*'部分,对于驱动源代码,由于还没有定义MODULE宏
代码被编译进内核。
---------------------------------------------------------------------------------------
. 编译内核模块
. make modules 将内核配置菜单中被指定为'M'选项文件编译成.o文件
. make modules_install 将模块文件放到/lib/modules下面
modules目标在编译文件之前就定义了MODULE宏,源代码被编译成模块。
---------------------------------------------------------------------------------------
. 制作init ramdisk
. mkinitrd initrd-2.6.29 2.6.29
中间的initrd-2.6.29为映像的名字
后面2.6.29对应于/lib/modules/2.6.29目录,此命令将该目录打包生成ramdisk
linux下的模块只能在内核版本与该模块被编译的内核版本相同的系统中加载,否则有可能会造
成内核出错,所以,linux在/lib/modules/下为不同内核版本的模块建立了不同的目录,如在
内核版本为2.6.29的代码中编译的模块会被放置于/lib/modules/2.6.29中。
---------------------------------------------------------------------------------------
. 安装内核
. cp arch/CPUARCH/boot/bzImage /boot/vmlinuz-$version
. cp initrd-$version /boot/
. vim /boot/grub/grub.conf
---------------------------------------------------------------------------------------------
更直接的方法
. make & make install
此方法实为对上面几个步骤的封装。
---------------------------------------------------------------------------------------------
更快的方法
. make -j & make install
对于多核机器的多作业编译内核方式,task number一般小于CPU的最大核心数。
此方法可能会由于多核作业而造成链接顺序出错,从而导致编译了无用的内核。
---------------------------------------------------------------------------------------------
附件:
阅读(2449) | 评论(0) | 转发(0) |