Linux内核升级&补丁安装手册(二)

第二步:给2.4.31内核打补丁,重新编译内核加载新特性
下载squashfs3.1-r2.tar.gz补丁文件,这个版本是针对与2.4内核的,如果你是2.6内核系统的话,需要下载对应2.6版本的。
先打补丁。将squashfs3.1-r2.tar.gz拷贝到/usr/src下

CODE:
[root@l数据库专家 认证lhost src]# tar -zxvf squashfs3.1-r2.tar.gz
[root@l数据库专家 认证lhost src]# cd linux
备份我们升级内核用到的配置文件
CODE:
[root@l数据库专家 认证lhost linux]# cp .config ../backup.config
进行上次编译后的清理
CODE:
[root@l数据库专家 认证lhost linux]# make mrproper
为了将2.4.31的内核跟打过补丁的内核区分开来或者不至引起错误,我们在makefile中添加自定义版本信息来进行区分。
[root@l数据库专家 认证lhost linux]# vi Makefile
修改
CODE:
EXTRAVERSION =
CODE:
EXTRAVERSION = -cucme
保存。
下来需要给内核打补丁
CODE:
[root@l数据库专家 认证lhostlinux]#patch -p1 < ../squashfs3.1-r2/linux-2.4.31/squashfs3.1-patch
patching file fs/Config.in
patching file fs/Makefile
patching file fs/squashfs/inode.c
patching file fs/squashfs/Makefile
patching file fs/squashfs/squashfs2_0.c
patching file fs/squashfs/squashfs.h
patching file include/linux/fs.h
patching file include/linux/squashfs_fs.h
patching file include/linux/squashfs_fs_i.h
patching file include/linux/squashfs_fs_sb.h
patching file init/do_mounts.c
patching file lib/Config.in
然后把配置文件拷贝回来,在make menuconfig中再次进行修改。(这次的工作主要是添加squashfs文件系统)
CODE:
[root@l数据库专家 认证lhost linux]# cp ../backup.config ./.config
由于我们这次编译内核的意图明确,所以可以直奔主题,因为其它的选项都已经选择好了。
CODE:
[root@l数据库专家 认证lhost linux]#make menuconfig
 
我们直接寻找进入
File systems --->项
可以看到多了一项新的特性,那就是squashfs文件系统
在上面用Y进行选择,这个时候又出现了一个选项

不要轻易决定要不要选,看看squashfs的文档
 
CODE:
[root@l数据库专家 认证lhost squashfs3.1-r2]# less INSTALL
There are a set of options which are intended for use by embedded systems with
low memory. At the "Additional options for memory-constrained systems" prompt,
please say NO unless you're using an embedded system! Saying Y here allows you
to specify cache sizes and how Squashfs all数据库专家 认证tes memory.
 
所以对于这个特性我们选择N。
好了config已经结束,退出。
 
CODE:
#make dep
[root@l数据库专家 认证lhost linux]# make clean
[root@l数据库专家 认证lhost linux]# make bzImage
 
接着
 
CODE:
[root@l数据库专家 认证lhost linux]# make modules
[root@l数据库专家 认证lhost linux]# make modules_install
 
提示
depmod: *** Unresolved symbols in /lib/modules/2.4.31-cucme/kernel/crypto/autoload.o
depmod: crypto_alg_lookup
depmod: *** Unresolved symbols in /lib/modules/2.4.31-cucme/kernel/crypto/proc.o
depmod: crypto_alg_sem
depmod: crypto_alg_list
depmod: *** Unresolved symbols in /lib/modules/2.4.31-cucme/kernel/drivers/sound/soundcore.o
depmod: open
depmod: read
depmod: lseek
depmod: close
depmod: *** Unresolved symbols in /lib/modules/2.4.31-cucme/kernel/drivers/sound/wavefront.o
depmod: open
depmod: read
depmod: close
忽略。
 
CODE:
[root@l数据库专家 认证lhost linux]# cp System.map /boot/System.map-2.4.31-cucme
[root@l数据库专家 认证lhost linux]# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.31-cucme
[root@l数据库专家 认证lhost linux]# cd /boot/
[root@l数据库专家 认证lhost boot]# rm -fr System.map
[root@l数据库专家 认证lhost boot]# rm -fr vmlinuz
[root@l数据库专家 认证lhost boot]# ln -s System.map-2.4.31-cucme System.map
[root@l数据库专家 认证lhost boot]# ln -s vmlinuz-2.4.31-cucme vmlinuz
 
安装内核
 
CODE:
[root@l数据库专家 认证lhost boot]# cd /usr/src/linux
[root@l数据库专家 认证lhost linux]# new-kernel-pkg --install --depmod --mkinitrd 2.4.31-cucme
depmod: *** Unresolved symbols in /lib/modules/2.4.31-cucme/kernel/crypto/autoload.o
depmod: crypto_alg_lookup
depmod: *** Unresolved symbols in /lib/modules/2.4.31-cucme/kernel/crypto/proc.o
depmod: crypto_alg_sem
depmod: crypto_alg_list
depmod: *** Unresolved symbols in /lib/modules/2.4.31-cucme/kernel/drivers/sound/soundcore.o
depmod: open
depmod: read
depmod: lseek
depmod: close
depmod: *** Unresolved symbols in /lib/modules/2.4.31-cucme/kernel/drivers/sound/wavefront.o
depmod: open
depmod: read
depmod: close
 
没有必要去重新make menuconfig设法去掉这些错误。
修改grub.conf文件
 
CODE:
[root@l数据库专家 认证lhost linux]# cd /boot/
[root@l数据库专家 认证lhost boot]# vi grub/grub.conf
 
可以看到

跟升级时一样修改[根目录对应的分区和默认的启动项].
检查无误重启reboot
启动OK,进行检查
内核版本
 
CODE:
[root@l数据库专家 认证lhost root]# uname -a
Linux l数据库专家 认证lhost.l数据库专家 认证ldomain 2.4.31-cucme #1 SMP Tue Jul 10 10:49:29 CST 2007 i686 i686 i386 GNU/Linux
 

文件系统(看squashfs是否编译进内核)
 
CODE:
[root@l数据库专家 认证lhost root]# cat /proc/filesystems
nodev rootfs
nodev bdev
nodev proc
nodev sockfs
nodev tmpfs
nodev shm
nodev pipefs
ext2
nodev ramfs
iso9660
nodev devpts
squashfs
ext3
nodev usbdevfs
nodev usbfs
nodev autofs
 

我们看到了squashfs文件系统。
测试squashfs
CODE:
[root@l数据库专家 认证lhost root]# cd /usr/src/squashfs3.1-r2/squashfs-tools/
[root@l数据库专家 认证lhost squashfs-tools]# make
[root@l数据库专家 认证lhost squashfs-tools]# cp mksquashfs unsquashfs /usr/sbin/
[root@l数据库专家 认证lhost root]# mksquashfs /home/307.rm /mnt/test.img
Parallel mksquashfs: Using 1 processor
Creating little endian 3.0 filesystem on /mnt/test.img, block size 65536.
Little endian filesystem, data block size 65536, compressed data, compressed metadata, compressed fragments
Filesystem size 1583.37 Kbytes (1.55 Mbytes)
97.93% of uncompressed filesystem size (1616.90 Kbytes)
Inode table size 132 bytes (0.13 Kbytes)
79.52% of uncompressed inode table size (166 bytes)
Directory table size 22 bytes (0.02 Kbytes)
100.00% of uncompressed directory table size (22 bytes)
Number of duplicate files found 0
Number of inodes 2
Number of files 1
Number of fragments 0
Number of symbolic links 0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 1
Number of uids 1
root (0)
Number of gids 0

进入mnt下查看下。
 
CODE:
[root@l数据库专家 认证lhost root]# ll -a /mnt/
total 1596
drwxr-xr-x 2 root root 4096 Jul 10 11:30 .
drwxr-xr-x 21 root root 4096 Jul 10 11:23 ..
-rwx------ 1 root root 1622016 Jul 10 11:30 test.img
 
我们看到了生成的test.img镜像文件。
关于内核的升级和补丁过程我这两周来就总结这点经验,对于一个老手来说或许是很简单的一件事情,但是对于初学者应该会提供一些帮助吧,当然这里的补丁不一定是squashfs了,也可以是iptables等等。

你可能感兴趣的:(linux,职场,休闲)