zoukankan      html  css  js  c++  java
  • Linux 内核编译

    注:该文章部分内容摘录自以下链接。

    http://www.cnblogs.com/zhunian/archive/2012/04/04/2431883.html

    创建内核的第一步是创建一个 .config 文件,此文件含有内核的选项,像是文件系统、SCSI、网络功能支持等。有许多功能可以直接编译到内核,也可编译成模块。对于每一个配置选项,你有下列三种选择:

    • 编译进内核(回答“yes”)
    • 编译成模块(回答“m”)
    • 不想要该功能(回答“no”)

    Linux 开发者提供三种方法让你产生 .config 文件,分别是 make confg(命令行), make menuconfig(文本模式的菜单环境), make xconfig(GUI 菜单窗口)。

    在创建好 .config 文件之后,下一步是稍微修改 Makefile 的内容,使你新建的内核与 Linux distribution 随附的通用内核有所区别。

    VERSION = 2
    PATCHLEVEL = 4
    SUBLEVEL = 31
    EXTRAVERSION = 

    建议你将 EXTRAVERSION 改成其他有意义的值,例如 -p4custom,如此产生出来的内核版本是2.4.31-p4custom。

    编译步骤:

    1 切换工作目录

      cd /usr/src/linux-2.6

    2 产生 .config 文件

      zcat /proc/config.gz > .config

    如果你有当前内核的配置,请将它复制到工作目录下的 .config 中,然后执行 make oldconfig

      cp /boot/previous-config .config

      make oldconfig

    3 调整内核选项

      make menuconfig(在文字终端环境下)

      make xconfig(在X窗口系统环境下)

    4 清理前次编译过程遗留下的文件,第一次编译时刻省略

      make clean

    5 开始编译

      make

      2.6.x 版内核把 make dep, make bzImage, make modules 三个步骤整合成了一个 make

    6 安装模块

      make modules_install

    7 安装

      make install

    例如:当前系统为CentOS Linux release 6.0 (Final),内核版本为2.6.32-71.el6.i686.由于最近内核出现最新的漏洞(linux kernel 又爆内存提权漏洞,2.6.39 内核无一幸免,所以将内核升级至3.2.2最新版本。

    1. 查看当前系统内核

    # uname -r
    2 2.6.32-71.el6.i686

    2. 下载linux-3.2.2内核包

    # cd ~
    # wget -c http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.2.tar.bz2
    # tar jxvf linux-3.2.2.tar.bz2
    # cd linux-3.2.2

    3. 配置内核并安装

    # make mrproper  #清除环境变量,即清除配置文件
    # make menuconfig  #在菜单模式下选择需要编译的内核模

    找到以下选中选项并选中networking support → networking options → network packet filtering framework(netfilter)

    (1).core netfilter configuration

    • 勾中”Netfilter connection tracking support” -m state相关模块是依赖它的,不选则没有。
    • 将netbios name service protocal support(new) 编译成模块,不然后面升级iptables后启动时会出错
    • 勾中“Netfilter Xtables support (required for ip_tables)”

    (2).IP: Netfilter Configuration

    • 将 “IPv4 connection tracking support (require for NAT)” 编译成模块。
    • 勾中IP tables support (required for filtering/masq/NAT) 。
    • 将 “Full NAT” 下的 “MASQUERADE target support” 和 “REDIRECT target support” 编译成模块

    (3).其它模块可以根据自己的需要进行选择,若不懂可以参考内核配置手册.

    # make clean #确保所有东西均保持最新状态.
    # make bzImage #生成内核文件
    # make modules #编译模块
    # make modules_install #安装模块
    # make install #安装

    4. 编辑 /etc/grub.conf 文件,将 default=1 改为 default=0

    # cat /etc/grub.conf
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE: You have a /boot partition. This means that
    # all kernel and initrd paths are relative to /boot/, eg.
    # root (hd0,0)
    # kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
    # initrd /initrd-[generic-]version.img
    #boot=/dev/sda
    default=1
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS Linux (3.2.2)
    root (hd0,0)
    kernel /vmlinuz-3.2.2 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
    initrd /initramfs-3.2.2.img
    title centos (2.6.32-71.el6.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-71.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
    initrd /initramfs-2.6.32-71.el6.i686.img

    5. 重启系统,并查看内核

    # reboot # uname -r
    3.2.2


     

  • 相关阅读:
    C++类型前置声明
    Qt 引用头文件 QT_BEGIN_NAMESPACE QT_END_NAMESPACE
    Qt emit的使用
    特定于类的内存管理---《C++必知必会》 条款36
    C++深入理解虚函数
    使用网页预加载顶部进度条
    简单读取 properties文件
    win2012r2 关闭中英文悬浮小方框显示
    bootstrap的Alerts中 可以放置p标签 设置 align="center" 用来设置文本居中
    char和String 在jsp java代码中与jstl代码中的区别
  • 原文地址:https://www.cnblogs.com/ivantang/p/4711955.html
Copyright © 2011-2022 走看看