kernel

 
    内核编译         
    编译前一定要注意把 selinux 关闭,和根分区要有足够的空间
     
    为什么重新编译内核
      新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等
    为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:
        1 、自己定制编译的内核运行更快(具有更少的代码)
       2 、系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)
        3 、不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞
       4 、将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些
     
    内核编译模式
      要增加对某部分功能的支持,比如网络之类,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模块(module)动态调用。如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块
     
     
    软件准备
    http://www.kernel.org/pub/linux/kernel/
    下载需要的 kernel 版本
    http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/
    下载需要的内核更新工具版本
    http://www.kernel.org/pub/linux/utils/kernel/hotplug/
    # 下载 2.6 USB 设备的支持
     
    red hat 更新源下载下面相应的 rpm 新光盘中的包就行
    mkinitrd - * .i386.rpm
    lvm2 - * .el5.i386.rpm
    device-mapper - * .el5.i386.rpm
     
     
    安装必要软件
    安装 rpm
    rpm -ivh --nodeps mkinitrd- * .i386.rpm
    rpm -ivh --nodeps lvm2- * .el5.i386.rpm
    rpm -ivh --nodeps device-mapper- * .el5.i386.rpm
    --nodeps
    不检查包的依赖关系
    --force
    如果不能安装在加上强制安装选项
     
    安装module-init-tools工具
    [root@zzh module-init-tools-3.11.1]# ./configure --prefix= /
    make moveold
    make all install
    ./ generate-modprobe.conf /etc/ modprobe.conf
    make moveold将把系统原来的modutils工具程序改名为*.old这步非常重要, 这将使得以继续使用原有的系统, 因为新的module-init- tools工具包实际上是倚赖原来*.old程序来加载内核模块.
     
    安装hotplug (可选对 USB 支持)
    [root@zzh hotplug-2004_09_23]# make install
     
     
    安装内核
    kernel 解压到 /usr/src/ 目录
    [root@zzh /]# yum install ncurses*
    如果没有这个文件不能开启图像界面
    [root@zzh /]# rm -rf /usr/src/linux /
    删除 linux 目录,如果之前内核没有升级过这个目录是没有的
    [root@zzh /]# ln -s /usr/src/ linux-2.6.31.1/ /usr/src/linux
    做个软连接
     
    默认情况下x86 CPU系列下面这一步可以省略
    # rm -rf /usr/include/asm /usr/include/linux /usr/include/scsi
    # ln -s /usr/src/linux/include/asm-i386 /usr/include/asm
    # ln -s /usr/src/linux/include/linux /usr/include/linux
    # ln -s /usr/src/linux/include/scsi /usr/include/scsi
     
    可根据需要修改内核源代码可省去日后再修改了(可选)  
    [root@zzh /]# vim /usr/src/linux/include/linux/posix_types.h
    设置fd_set支持的最大数量  
    define __FD_SETSIZE    6553 5
         
    [root@zzh /]# vim /usr/src/linux/include/linux/fs.h
    设置最大打开文件数量(TCP连接数量)
    define INR_OPEN 6553 5
    define NR_FILE 6553 5
    define NR_RESERVED_FILES 128
     
     
    配置选项
    [root@zzh linux]# make mrproper
    确保源代码目录下没有不正确的 .o文件以及文件的互相依赖
    [root@zzh linux]# make menuconfig
    进入/usr/src/linux / 目录配置内核选项
    进入菜单界面来配置内核
     Y-将该功能编译进内核
     N-不将该功能编译进内核
     M-将该功能编译成可以在需要时动态插入到内核中的模块
    模块支持
    Enable loadable module support   --->
    [*]    Module unloading
     
    虚拟接口支持
    Device Drivers   --->
    Block devices   --->
    <*>    Loopback device support
     
    磁盘支持
    Device Drivers   --->
    Multiple devices driver support (RAID and LVM)   --->
    <*>    Device mapper support
     
    对应网卡支持
    Device Drivers   --->
    Network device support   --->
    Ethernet (10 or 100Mbit)   --->
    <*>   nForce Ethernet support
     
    文件系统
    File systems  --->
    <*> Ext3 journalling file system support
    [*] Ext3 extended attributes
    [*] Ext3 POSIX Access Control Lists
    [*] Ext3 Security Labels
    [*] JBD (ext3) debugging support
     
    NTFD 支持
    File systems   --->
    DOS/FAT/NT Filesystems   --->
    <*> NTFS file system support
     
    more /usr/src/linux/ .config
    可以查看指定的模块是否已被选中
     
    编译
    make dep
    建立编译时所需的从属文件, 注意:内核从未编译过此步可跳过
    make clean
    清除内核编译的目标文件, 注意:如果内核从未编译过此步可跳过
    make -j n
    数字n是多进程编译,加快编译速度,注意: 此命令已完成make bzImage及make modules的工作
    make modules
    编译可加载模块
    make modules_install
    安装可加载模块
    make install
    安装新内核
     
    启用新内核
    [root@zzh /]# cp /usr/src/linux/arch/ i386/boot/bzImage /boot/vmlinuz- 2.6.31.1
    [root@zzh /]# cp /usr/src/linux/System.map /boot/System.map- 2.6.31.1
     
    [root@zzh /]# rm -rf /boot/System.map /boot/vmlinuz
    删除之前编译用的连接
     
    [root@zzh /]# ln �Cs /boot/vmlinuz-2.6.31.1 /boot/vmlinuz
    [root@zzh /]# ln �Cs /boot/System.map-2.6.31.1 /boot/System.map
     
     
    修改Grub启动管理器
    # new-kernel-pkg --mkinitrd --depmod --install 2.6.31.1
    在/boot目录下执行以下命令
    这时候你的/boot下会生成一个initrd-2.6.31.1.img并且你的grub.conf文件也作了相应更改
     
    [root@zzh /]# df
    查看根分区对应的实际的分区
    /dev/hda3       /
     
    [root@zzh /]# vim /etc/grub.conf
    将kernel行的LABEL=/换成根目录所在的实际分区
    default= 0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS ( 2.6.31.1)
    root (hd0,0)
    kernel /vmlinuz- 2.6.31.1 ro root= /dev/hda3 rhgb quiet
    initrd /initrd- 2.6.31.1.img

你可能感兴趣的:(职场,kernel,休闲,内核升级)