分类: LINUX
2010-04-20 23:02:21
《安装过程》
下载内核,解压到/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 时会自动加入