曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 8616|回复: 4
打印 上一主题 下一主题

编译升级内核

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2009-5-16 18:15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CentOS5.3 系统的内核版本为
[root@localhost /]# uname -r
2.6.18-128.1.6.el5xen

准备升级内核到最新的 -2.6.29.3 版本,下载地址
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.3.tar.gz

在 CentOS 系统下,把内核压缩包复制到 /usr/src/kernels 中,然后解压缩
 tar -xvzf linux-2.6.29.3.tar.gz

然后建立一个符号链接
[root@localhost kernels]# ln -s linux-2.6.29.3 linux

删除所有配置文件和 *.o 文件
cd linux
make mrproper
make mrproper 命令确保源代码目录下没有不正确的 *.o 文件以及文件的相互依赖。若是第一次编译内核,那么这个命令可以不运行,如果是多次编译过内核,那么在编译前使用此命令。
(make mrproper  Delete the current configuration, and all generated files)

配置内核相关命令
make config ( 基于文本的最为传统的配置界面,一旦回答错误则无法返回,不推荐使用 )
make menuconfig ( 基于文本选单的配置界面,错误选择后可以返回,推荐)
make xconfig ( 基于图形窗口模式的配置界面 )
make oldconfig ( 在原来内核配置的基础上修改一些小地方 )

配置内核时选择相应的配置,有三种,含义分别为
Y -- 将该功能编译进内核
N -- 不将该功能编译进内核
M -- 将该功能编译成在需要时动态插入到内核中的模块

编译内核
1、执行 make menuconfig 后如下图示:


菜单选项说明
<1> General Setup
General Setup 选项允许配置基本的内核参数。这些选项可以配置内核如何与消息队列、内存、审核系统等互动。除非清楚自己在做什么,否则不要修改此节的设置。

<2>
  • Enable loadable module support  --->

    使能可加载模块的支持。一般情况下,在计算机检测到新硬件时,它会自动安装驱动模块( 如果有的话 ).
    以上选项,默认即可。一般不要启用 Forced Module Unloading ,因为这会导致卸载其他硬件依赖的模块,而且不是所有的开发人员都记得在模块上配置正确的数字签名。
    Loadable module support 都使得用户不必把所有的驱动都包括在主内核中,避免了内核变得大而笨拙。

    <3> Block Layer

    Block Layer 子菜单可以配置内核如何与存储设备交互。
    其中,Support For Large Block Device 选项默认开启。该选项对于支持大于 2TB 驱动器的访问 --- 或对大于 2TB 设备上配置的逻辑卷或 RAID 阵列访问。

    <4> Processor Type and Features

    这里,可以为 CPU 自定义 Linux 内核。该选项大致上相当于可以直接在计算机安装各种 kernel-x.cputype.rpm 包。
    在选择处理器的类型后,可以配置下面其他几个选项:
        对称多处理支持;
        管理 CPU 吞吐量的抢占式调度;
        高内存支持,如果内存超过 4GB 或 64GB 的话;
        计时器频率
        支持多 CPU 和 Toshiba 或 Dell 笔记本( 其中选 M,它使相关的驱动模块在文件中可用)
    <5> Power Management

    Power Management Options 子菜单允许配置 Advanced Power Management(APM) 或 Advanced Configuration and Power Interface( ACPI ),以及和 CPU 关联的电源管理设置,这对延长笔记本计算机的寿命是非常关键的。
    ACPI 默认是开启的。

    <6> Bus Options

    Bus Options 菜单选项允许通过指定的总线调整硬件通信。

    <7> Executable File Formats

    在多数情况下没有必要修改 Executable File Format 选项。当 Linux 可执行文件链接程序库时,它们通常是 Executable and Linkable Format (可执行和可链接格式,ELF)。随着从 1995 转向 ELF,只有最老的程序还要求对 a.out 和 ECOF 二进制格式的支持( ECOFF 是 Extended COFF 的简写,这种格式用于 MPS 和 Alpha 处理器,这两种处理器都用于工作站和嵌入式系统)。
    使用了 <*> Kernel support for MISC binaries 这一项( 默认使用 )能够帮助需要解释器运行的程序,如 java、Python、或 .NET。

    <8> Networking

    在各种 Networking 菜单中能配置基本网络软件和具体设备。
    Networking Options 子菜单主要用于配置网络软件。虽然可以激活其他协议栈,如 IPX/SPX,但很多选项是和 linux 与 internet 的主要协议 TCP/IP 有关的。如:
    Networking Packet Filtering ( 代替了 ipchains )子菜单允许内核使用 iptables 支持防火墙。ipchans 和 ipfwadm 命令已经作废,它们是内核 2.2 和 2.0 中的命令。

    <9>  Device Drivers  --->
    大部分硬件设备的驱动都包括在这个菜单中。

    <10> Firmware Drivers  --->
    固件驱动

    <11> File systems  --->
    文件系统

    <12> Kernel hacking  --->
    此菜单支持能帮助用户调试驱动或其他内核问题的驱动程序。使用该菜单的一般是开发人员。

    <13>Security options  --->
    此菜单包括和安全性相关的模块,包括身份验证密钥、网络访问控制、BSD级别安全性和对 U.S National Security Agency (NSA) 的相对脚心的支持。

    <14>Cryptographic API  --->
    Linux 支持各式各样的加密接口和算法,这里提供相关的 API 。

    <15>Virtualization (NEW)  --->
    虚拟化支持

    <16>Library routines  --->
    此菜单包括 CRC 32 校验和支持,对数据流的 zlib 压缩和解压缩支持,以及快速排序数据算法。

    编译内核

    首先,确定依赖关系
    make dep
    这个命令现在似乎已经没什么用了。

    清理临时文件
    make clean

    编译内核
    make bzImage    #避免编译出来的内核过大

    make zImage      #编译后出来的内核大
    成功后,末尾有类似于如下信息:
    Root device is (8, 7)
    Setup is 12812 bytes (padded to 13312 bytes).
    System is 2193 kB
    CRC 2b8a03b2
    Kernel: arch/x86/boot/bzImage is ready  (#1)

    编译可加载内核模块
    make modules

    安装编译的模块
    make modules_install

    创建模块链接
    /sbin/depmod -a

    更换内核
    cd /usr/src/linux
    cp System.map /boot/System.map-2.6.29.3
    cp arch/i386/boot/bzImage /boot/linuz-2.6.29
    new-kernel-pkg --mkinitrd --depmod --install 2.6.29

    至此,应该说已经完成了。因为GRUB里的 menu.lst 文件已经被修改,故无需再人工修改了。
  • 4917

    主题

    5879

    帖子

    3万

    积分

    GROAD

    曲径通幽,安觅芳踪。

    Rank: 6Rank: 6

    积分
    34382
    沙发
     楼主| 发表于 2009-8-6 18:04:36 | 只看该作者

    编译

    make bzImage

    make modules

    make modules_install             /* 此步骤 bzImage 会被拷贝到 /boot 目录下 */

    make install        

    mkinitrd                                       /* 创建一个与新内核相匹配的新的 ramdisk */

    完毕后,重启即可使用新内核,menu.lst 文件也已相应被更改,无需手动编辑添加。

    4917

    主题

    5879

    帖子

    3万

    积分

    GROAD

    曲径通幽,安觅芳踪。

    Rank: 6Rank: 6

    积分
    34382
    板凳
     楼主| 发表于 2009-10-2 15:36:16 | 只看该作者

    .config

    在内核配置完后,最终产生一个填满选项的 .config 文本文件,它一般保存在内核配置目录下。但是如果使用的是厂商内核,这个文件一般会在 /boot 目录下看到,如:/boot/config-2.6.27.29-0.1-pae

    通常需要将这个 .config 备份起来,以便以后每次解开一个新内核或使用 make mrproper 命令清理内核源代码后使用。一旦有了一个可以正常工作的内核配置,就可以将它输入到新的内核源代码配置文件中使用,只需将它拷贝为新的内核源代码目录下的 .config 文件,并运行 make oldconfig 命令导入配置文件即可,这样做的好处是避免了对内核的重新配置。

    4917

    主题

    5879

    帖子

    3万

    积分

    GROAD

    曲径通幽,安觅芳踪。

    Rank: 6Rank: 6

    积分
    34382
    地板
     楼主| 发表于 2009-10-8 21:02:09 | 只看该作者

    丢失 Module.symvers ?

    原因可能是执行了 make mrproper  命令的缘故。

    1、删除掉原来的内核()
    2、再解压缩内核源文件
    3、编译内核 (make  /  make modules_install    /  make bzImage     /      make install )

    在 make 后即可产生 Module.symvers 文件。

    4917

    主题

    5879

    帖子

    3万

    积分

    GROAD

    曲径通幽,安觅芳踪。

    Rank: 6Rank: 6

    积分
    34382
    5#
     楼主| 发表于 2009-11-7 02:17:02 | 只看该作者

    ubuntu 下生成 initrd 镜像

    mkinit 命令使用 mkinitramfs 来代替,如:
    mkinitramfs -o initrd.img-2.6.31.5
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

    GMT+8, 2024-4-29 19:02 , Processed in 0.081851 second(s), 21 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表