HOME 生活记录运维/编程
作者/来源:yixinu.com
栏目:运维/编程
日期:2012-04-14 05:15:41

内核职责:

    系统初始化:检测硬件资源并引导系统

    系统进程调度

    内存管理 :为运行的进程 分配内存

    安全:SElinux上下文属性和防火墙规则

    提供缓存和加速硬件的访问

    实现标准网络协议和文件系统格式化


需要升级内核的情况:

    1、硬件更新,因内核太老无法驱动

    2、安全更新、内核出现bug


查看内核的启动信息    dmesg


核心镜像和版本

    X86_64、X86,内存不超过4G | XEN | PAE,多处理器和最大16G内存


内核下载网站 

    http://kernel.org/

    版本号中的有3位数值,第2位是偶数代表是稳定版,如果有第4位则是补丁号


查看当前内核版本

    uname -r





更新内核

    直接用rpm方式安装即可,不可用yum方式更新


内核模块

     目录 :

[root@bogon ~]# cd /lib/modules/`uname -r`/kernel/drivers


    lsmod    列出所有已经装载的模块

    modprobe    装载、卸载、列出模块

        -l    列出模块,包含部分路径 

    

    modinfo    查看模块信息


[root@bogon drivers]# modinfo 8139cp
filename:       /lib/modules/2.6.32-71.el6.i686/kernel/drivers/net/8139cp.ko
license:        GPL


    装载模块


[root@bogon ~]# modprobe qla2xxx
[root@bogon ~]# lsmod | grep qla2xxx
qla2xxx               246038  0 
scsi_transport_fc      40098  1 qla2xxx
[root@bogon ~]# 

    如果需要开机就装载某个硬件的模块,可将这行命令放在rc.local中,但是这样的问题是,rc.local是开机后,在所有的服务都启动后运行,如果某个硬件,比如硬盘接口卡这样写在rc.local中,则硬盘要在所有服务启动完毕后才能找到,如果硬盘中装有数据库,那么数据库就会就会出问题,因为服务是在rc.local之前启动的,启动时硬件没有驱动起来,找不到硬盘

    解决方法:将模块编译到内核

    


[root@bogon ~]# cd /boot
[root@bogon boot]# ls -il
……
   17 -rw-r--r--. 1 root root 12850572 Apr 14 15:48 initramfs-2.6.32-71.el6.i686.img
……
   16 -rwxr-xr-x. 1 root root  3667328 Nov 11  2010 vmlinuz-2.6.32-71.el6.i686
[root@bogon boot]# 
     vmlinuz        固化模块,不可修改

     initramfs        可再次编译



第一种方式:mkinitrd重新编译initramfs

    mkinitrd --with=模块名称  新的initramfs名称 内核版本


[root@bogon temp]# mkinitrd --with=8139cp.ko /boot/initramfs-2.6.32-71.el6.i686.new.img `uname -r` 

    编译成功

[root@bogon temp]# file /boot/initramfs-2.6.32-71.el6.i686.new.img 
/boot/initramfs-2.6.32-71.el6.i686.new.img: gzip compressed data, from Unix, last modified: Sun Apr 15 02:36:40 2012, max compression


第二种方式:手动编译

    查看 initramfs 文件格式并解压 


[root@bogon boot]# file initramfs-2.6.32-71.el6.i686.img 
initramfs-2.6.32-71.el6.i686.img: gzip compressed data, from Unix, last modified: Sat Apr 14 15:48:02 2012, max compression


[root@bogon boot]# mkdir temp
[root@bogon boot]# cp initramfs-2.6.32-71.el6.i686.img temp/
[root@bogon boot]# cd temp
[root@bogon temp]# gunzip initramfs-2.6.32-71.el6.i686.img 
gzip: initramfs-2.6.32-71.el6.i686.img: unknown suffix -- ignored

     用  -S  指定压缩包的后缀名为  .img



[root@bogon temp]# gunzip initramfs-2.6.32-71.el6.i686.img -S .img
     


    用cpio 解开文件

    cpio   -   copy files to and from archives   复制文件到归档或从归档拷出

[root@bogon temp]# ls
initramfs-2.6.32-71.el6.i686
[root@bogon temp]# cpio -i < initramfs-2.6.32-71.el6.i686 
59394 blocks
[root@bogon temp]# ls
bin                emergency  initqueue-finished            mount        proc     tmp
cmdline            etc        initqueue-settled             pre-pivot    sbin     usr
dev                init       initramfs-2.6.32-71.el6.i686  pre-trigger  sys      var
dracut-004-32.el6  initqueue  lib                           pre-udev     sysroot
[root@bogon temp]# 


    复制需要装载的模块文件


[root@bogon temp]# cp -v {,.}/lib/modules/2.6.32-71.el6.i686/kernel/drivers/net/8139cp.ko 
这条命令相当于  cp -v /lib/modules/2.6.32-71.el6.i686/kernel/drivers/net/8139cp.ko ./lib/modules/2.6.32-71.el6.i686/kernel/drivers/net/8139cp.ko
     

    移除不需要装载的模块


[root@bogon temp]# rm `find ./ -name "floppy*"`


    生成文件清单


[root@bogon temp]# find ./ > /boot/list.file
    注意file找到到文件路径,是./而不是/boot/temp/,因为./是从根开始查找 ,如果是后面那个路径 ,装载模块时就会找不到文件



./lib/libc.so.6 

     打包文件    -H  使用newc格式 


[root@bogon temp]# cpio -o -H newc < /boot/list.file >../initramfs.i.do
[root@bogon boot]# file initramfs.i.do 
initramfs.i.do: ASCII cpio archive (SVR4 with no CRC)
     压缩文件
[root@bogon boot]# gzip -S .img -9 ./initramfs.i.do 
[root@bogon boot]# file ./initramfs.i.do.img 
./initramfs.i.do.img: gzip compressed data, was "initramfs.i.do", from Unix, last modified: Sun Apr 15 03:39:28 2012, max compression

     完成 ,将重新生成的initramfs文件加入启动菜单即可 


模块装载时向它传递参数


    查看modprobe.conf配置文件该 怎么写

[root@bogon modprobe.d]# man modprobe.conf
     进入 /etc/modprobe.d/,在这个目录下生成一个  以模块名为名,.conf结尾的文件

[root@bogon modprobe.d]# pwd
/etc/modprobe.d
[root@bogon modprobe.d]# vim qla2xxx.conf
alias   qla2xxx qla2xxx.ko
options qla2xxx  ql2xlogintimeout=60
    重新生成initramfs文件,当使用mkinitrd时,系统 会自动 将/etc/modprobe.d/下的配置文件打包进去 

[root@bogon modprobe.d]# mkinitrd /tmp/initramfs.my.img `uname -r`
     完成 ,将重新生成的initramfs文件加入启动菜单即可 

分享到:

Copyright © 2013-2014 yixinu.com 湘ICP备14004402号

QQ:316686606  Email: 316686606@qq.com