内核职责:
系统初始化:检测硬件资源并引导系统
系统进程调度
内存管理 :为运行的进程 分配内存
安全:SElinux上下文属性和防火墙规则
提供缓存和加速硬件的访问
实现标准网络协议和文件系统格式化
需要升级内核的情况:
1、硬件更新,因内核太老无法驱动
2、安全更新、内核出现bug
查看内核的启动信息 dmesg
核心镜像和版本
X86_64、X86,内存不超过4G | XEN | PAE,多处理器和最大16G内存
内核下载网站
版本号中的有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文件加入启动菜单即可