Chinaunix首页 | 论坛 | 博客
  • 博客访问: 679872
  • 博文数量: 183
  • 博客积分: 9166
  • 博客等级: 中将
  • 技术积分: 1920
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-31 16:17
文章分类

全部博文(183)

文章存档

2010年(159)

2009年(24)

分类:

2010-04-05 19:02:35

《安装过程》

下载内核,解压到/usr/src目录下。备份原来/usr/include目录下的asm、Linux、scsi文件夹。

在/usr/include目录下建立asm、Linux、scsi的软链接分别到新内核目录/usr/src/linux/include/下对应的文件夹。转入内核所在目录,通过下列步骤开始编译新内核:

make mrproper

make menuconfig

make dep

make zImage

make modules

make modules_install depmod -a

make install

1.download linux-2.6.5.tar.gz

2.cp linux-2.6.5.tar.gz /usr/src

3.cd /usr/src

4.mv linux linux_old

5.tar xvzf linux-2.6.5.tar.gz

bzip2 -d linux-2.6.5.tar.bz2

tar -xvf linux-2.6.5.tar

或者 tar jxvf linux-2.6.5.tar.bz2

6.cd /usr/include

rm -rf asm linux scsi

ln -s /usr/src/linux/include/asm-i386 asm

ln -s /usr/src/linux/include/linux linux

ln -s /usr/src/linux/include/scsi scsi

7.cd /usr/src/linux

make mrproper (检查有无不正确的.o 文件和依赖关系,使用刚下载的完整的源程序包进行

编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一

下这个命令。)

8.make config 或 make menuconfig (推荐) 或  make xconfig

选择完返回MainMenu,选择save and exit,退出配置窗口并关闭超级用户终端。现在可以

退出xwindows 了,回到文本环境(这样做可以加快内核编译速度)执行最后操作

9.make dep

10.make zImage

若想做成启动盘的形式可make zdisk ,若kernel 大于512K,应用make bzImage (推荐)

11.make modules 

make modules_install depmod -a

12.cp /usr/src/linux/arch/i386/boot/zImage  /boot (用的是make zImage) 

cp /usr/src/linux/arch/i386/boot/bzImage /boot (用的是make bzImage)

13.修改lilo.conf 或grub.conf(添加)

image=/boot/zImage( 或bzImage)

label=new

root=...

14. lilo & grub

lilo -v 使改动生效。建议保留旧内核的项目,避免编译失败。通常grub 配置文件在下面

三个地方

(根据发行版的不同):

/etc/grub.conf

/boot/grub/menu.lst

/boot/grub/grub.conf

15. shutdown -r now

如果你的kernel 支持内存镜像,就用mkinitrd 命令制作一个镜像文件,然后拷贝到/boot 路径下

要这么做,也要记得在make menu 的时候记得选择内核镜像ram image,并且不能安装为模块,否则

initrd 就不会运作。生成映像文件,否则有时系统启动时会找不到/根分区。

mkinitrd /boot/initrd-.2.4.20-8.img 2.4.20-8

initrd.img 就是initrd-2.4.20-8.img 文件的链接

#ln -s initrd-2.4.20-8.img initrd.img

有的时候mkinitrd 失败,只要加上:--without-scsi-module 就可以通过了。

把旧内核源文件下的.config 文件拷贝到新内核源文件下,

如cp /usr/src/linux-2.4.22/.config /usr/src/linux-2.6.5/

然后在新内核目录下运行make oldconfig,如果想改动什么,可以make menuconfig,但是一定要先 make oldconfig。然后就编译内核,很容易:make bzImage make modules make modules_install 

make install  然后到/boot 看看是不是已经有新内核文件了,再看/boot/grub/grub.conf 是否已

经加载了新内核。

shutdown -r now

cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.5 

(新内核的bzImage 的位置也有可能在/usr/src/linux/i386/下)

cp /usr/src/linux/System.map /boot/System.map-2.6.5

make clean

没有make clean 之前,如果增加了新的模块,可以直接make menuconfig && make moduels && make

modules_install,不需要全部重新来过。如果你以后还要利用这次编译的成果,也可以省略这一步,如果你想直接删除源代码目录,也可以省略这一步。

一些升级内核前的备份过程:

cd /boot/

mv System.map  System.map.Old    【备份System.Map && vmlinuz】

mv vmlinuz  vmlinuz.Old

cd /usr/src/

ln -s linux-2.6.5 linux

进入/usr/include 目录下,将asm、scsi、linux 三个目录改名

【备份/usr/include 下的asm、scsi、linux】

[root@localhost /usr/include]# mv asm asm.OFF

[root@localhost /usr/include]# mv scsi scsi.OFF

[root@localhost /usr/include]# mv linux linux.OFF

建立指向新内核的位置到第三步中被改名的原目录

[root@localhost /usr/include]# ln -s /usr/src/linux/include/asm-i386 asm

[root@localhost /usr/include]# ln -s /usr/src/linux/include/scsi scsi

[root@localhost /usr/include]# ln -s /usr/src/linux/include/linux linux

检验# ls /boot

如果看到了vmlinuz-2.6.0 和System.map-2.6.0 ,那么恭喜你,成功了!

如果你是用make install 安装的,还会看到个config-2.6.0 文件

cd /boot/

ln -s vmlinuz-2.6.5 vmlinuz

ln -s System.map-2.6.5 System.Map

(上面的两步的作用是保护真正的内核镜像不受损坏)

vmlinuz 是压缩的内核二进制可执行文件

#du -sh vmlinuz-2.6.5 用来查看新的内核有多大

如果你的Kernel 配置支持Modules 的话,解决那些问题是比较简单的

只要编译那些.o 文件就可以啦.

比如我的声卡经常Irq 和IO 不对, 我就到/usr/src/linux/drivers/sound 目录下

gcc -o configure configure.c

./configure

选好IO,IRQ 等等,

make

cp sound.o /lib/modules/2.0.34/misc

rmmod sound

insmod sound init_trace=1

测试一下.直到成功为止.比在/usr/src/linux 下, make menuconfig ;

make dep;make clean;make zImage;.... 好多了.

怎么给内核打补丁?

# cd /usr/src/linux

# bzip2 -dc patch-xxx.bz2 | patch

PATCH 文件拷贝到/usr/src 下:

#patch -p0 < patch-2.2.16

#gzip -cd patch-2.4.x-pre2-ac1.gz|patch -p1 -s -N -E -d 源码目录

可以使用这种方式来安装任何补丁,而不用管它的文件名了

用lsmod 看当前装入的module, insmod/rmmod 增删module. 对于fs,network 方面的module, kernel 是可以

自动动态装载的(通过kerneld, 要用时自动insmod) 而对于与硬件相关的module(如网卡,SCSI 卡等), 则需

自己手工加入, 或用RedHat Control Panel 中的kernelcfg 来选择module(写于/etc/conf.modules(?), 那

样则boot kernel 时会自动加入

阅读(3728) | 评论(0) | 转发(0) |
0

上一篇:天道--1

下一篇:有趣的大学生定律

给主人留下些什么吧!~~