一、升级SUSE内核
1、查看当前系统内核版本
cat /proc/version
rpm -qf /boot/vmlinuz
2、备份原kernel的启动文件
cp /boot/vmlinuz /boot/vmlinuz.old
cp /boot/initrd /boot/initrd.old
3、安装新内核
rpm -Uvh new_kernel.rpm
二、降级Suse内核
rpm -Uvh –force old_kernel.rpm
三、Suse内核配置
当前内核结构存储在/proc/config.gz中,
1、要修改配置,需以root用户到/usr/src/linux*目录下执行:
zcat /proc/config.gz >.config
make oldconfig
make oldconfig命令以/usr/src/linux*/.config做为内核配置的临时模板,当前系统内核中所有新的选项都会被扫描。
如果没有使用.config,则默认使用当前内核源码配置
2、命令行下配置
make menuconfig
3、X-window下配置
make xconfig
四、内核模块
硬件发展速度太快,内核更新速度相对慢,使用新的硬件设备就需要使用驱动程序,让kernel认识这个新设备。
Linux中配置驱动有两种方式:
1、将驱动程序编译到内核中,这样编译出来在内核体积很大。
2、将驱动程序编译成一个模块,kernel在需要时再加载这个模块,这样编译出来的内核体积小,
在编译内核时,选择驱动程序是否编译到内核中。
在系统启动时,bios或者 boot loader.需要加载内核,所以,最好情况下是尽可能的减小内核大小,加快启动速度。
像ext2,SCSI驱动等一些小的驱动程序,适合编译到内核中;
而像声卡、msdos、isofs这些在系统启动时并不需要,可以做为模块来加载,不要编译到内核中,减小内核大小
内核模块位于/lib/modules/目录下
1、hwinfo命令可以打印出当前系统中的硬件信息
hwinfo –help
hwinfo –scsi 可以查看某一个模块的信息
2、模块相关的一些命令
insmod
从/lib/modules/及其子目录下查找模块,然后加载模块到kernel中。2.6之后尽量使用modprobe代替insmod命令
rmmod
卸载指定的模块。当某个模块不再需要时,可以从内核中卸载。
例如,isofs模块,只有在CD-ROM没有mount时才可以卸载
depmod
在/lib/modules/下创建一个modules.dep文件,详细说明了所有模块之间的附属关系。
当系统启动时,会自动创建这个文件
modprobe
加载、卸载一个指定的模块。
modprobe会检查/etc/modprobe.conf文件,加载模块
lsmod
查看当前系统中加载了那些模块,哪些模块使用了它们
modinfo
查看某个模块的信息
std:~ # modinfo ide_disk
filename: /lib/modules/2.6.16.21-0.8-default/kernel/drivers/ide/ide-disk.ko
description: ATA DISK Driver
alias: ide:*m-disk*
license: GPL
vermagic: 2.6.16.21-0.8-default 586 REGPARM gcc-4.1
supported: yes
depends: ide-core
srcversion: 83FCEE80754F82BEA4B03A0
3、/etc/modprobe.conf
系统启动时,会读取/etc/modprobe.con、/etc/modprobe.conf.local和/etc/modprobe.d目录,根据这些文件与目录相关内容加载模块
更详细信息查看man modprobe.conf
五、编译内核
将内核编译成一个”bzImage”
如果配置过程中,加载了过多的模块。造成内核过大,在编译过程中会报错
cd /usr/src/linux*
make clean
make bzImage
make clean
make vmlinux
上面命令也可以写成一行
make clean bzImage
make clean vmlinux
完成后,到/usr/src/linux/arch//boot下查找名称为vmlinux.gz的文件,这个是内核的压缩镜像
如果没有文件,说明编译过程不成功
make bzImage 2>&1 | tee kernel.out
make clean vmlinux 2>&1 | tee kernel.out