编译升级内核2.6.15-2.6.17

首先安装内核编译环境:

  
  
  
  
  1. apt-get install debhelper modutils kernel-package libncurses5-dev 

参考《Debian 参考手册 第 7 章 - Debian下的 Linux 内核》

方法一:
1. 下载源代码包:http://www/kernel.org/pub/linux/kernel
2.

  
  
  
  
  1. debian:~# tar jxf linux-2.6.17.tar.bz2 
  2. debian:~# cd linux-2.6.17 
  3. debian:~/linux-2.6.17# cp /boot/config-2.6.15 .config 
  4. debian:~/linux-2.6.17# make 
  5. debian:~/linux-2.6.17# make modules 
  6. debian:~/linux-2.6.17# make modules_install 
  7. debian:~/linux-2.6.17# make install 
  8. debian:~/linux-2.6.17# mkinitrd -o /boot/initrd.img-2.6.17 2.6.17 
  9. debian:~/linux-2.6.17# update-grub 


方法二:

  
  
  
  
  1. debian:~# tar jxf linux-2.6.17.tar.bz2 
  2. debian:~# cd linux-2.6.17 
  3. debian:~/linux-2.6.17# cp /boot/config-2.6.15 .config 
  4. debian:~/linux-2.6.17#make-kpkg --revision 20060622 --initrd binary 


上层目录生成5个 .deb文件

  
  
  
  
  1. linux-doc-2.6.17_20060622_all.deb 
  2. linux-image-2.6.17_20060622_i386.deb 
  3. linux-source-2.6.17_20060622_all.deb 
  4. linux-headers-2.6.17_20060622_i386.deb 
  5. linux-manual-2.6.17_20060622_all.deb 

 

  
  
  
  
  1. debian:~/linux-2.6.17#dpkg -i linux-image-2.6.17_20060622_i386.deb 
  2. debian:~/linux-2.6.17#mkinitrd -o /boot/initrd.img-2.6.17 2.6.17 
  3. debian:~# update-grub 


ps: 《Debian 参考手册 第 7 章 - Debian下的 Linux 内核》
7.1.1 Debian 标准方式

关心一下有关 kernel-package、gcc、binutils 和 modutils 的错误报告。在需要时使用较新的版本。

在 Debian 系统中用源码编译自定义内核要特别小心。用 make-kpkg 的 --append_to_version 选项来创建多重内核镜像比较安全。

  
  
  
  
  1. # apt-get install debhelper modutils kernel-package libncurses5-dev 
  2. # apt-get install kernel-source-2.4.18 # 使用最新版本 
  3. # apt-get install fakeroot 
  4. # vi /etc/kernel-pkg.conf # 输入我的名字和 email 
  5. $ cd /usr/src # 创建目录 
  6. $ tar --bzip2 -xvf kernel-source-2.4.18.tar.bz2 
  7. $ cd kernel-source-2.4.18 # 如果这是你的内核源码 
  8. $ cp /boot/config-2.4.18-386 .config # 将当前配置设定为默认配置 
  9. $ make menuconfig # 按自己的喜好来定制 
  10. $ make-kpkg clean # 必须执行这步(per: man make-kpkg) 
  11. $ fakeroot make-kpkg --append_to_version -486 --initrd \ 
  12. --revision=rev.01 kernel_image \ 
  13. modules_image # modules_image 可以是 pcmcia-cs* 等。 
  14. $ cd .. 
  15. # dpkg -i kernel-image*.deb pcmcia-cs*.deb # 安装 


make-kpkg kernel_image 实际上执行了 make oldconfig 和 make dep。如果没使用 initrd 就不要使用 --initrd 选项。

如 果想加载 pcmcia-cs 模块或内核 pcmcia 源码中没有的模块,应该在 make menuconfig 后选“General setup —>”进入“PCMCIA/CardBus support —>”,配置“< > PCMCIA/CardBus support”选项(例如,取消复选项)。

对于 SMP 机器,参照 kernel-pkg.conf(5) 的说明设置 CONCURRENCY_LEVEL。

initrd = init ramdisk,是一个启动时存在于内存的文件系统。initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本 的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要 的模块。这样的一个好处就是在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成的最后阶段,根文件系 统可以重新mount到其他设备上。
Linux启动一定要用initrd么?
不必,如果把需要的功能全都编译到内核中(非模块方 式),只需要一个内核文件即可,initrd能够减小启动内核的体积并增加灵活性。如果你的内核以模块方式支持某种文件系统(例如ext3, UFS),而启动阶段的驱动模块(如jbd)放在这些文件系统上,内核是无法读取文件系统的,从而只能通过initrd的虚拟文件系统来装载这些模块。
这里有些人会问: 既然内核此时不能读取文件系统,那内核的文件是怎么装入内存中的呢?答案很简单,Grub是file-system sensitive的,能够识别常见的文件系统。
initrd文件是怎么生成的?
使用mkinitrd命令,这个命令其实是一个Bash脚本
#file `which mkinitrd`
/sbin/mkinitrd: Bourne-Again shell script text executable
该脚本先建立一个8M的空文件,并在此上建立一个文件系统,并拷贝相应的的文件。
一个默认RedHat Fedora Core 2, 它的initrd是什么内容
(跟系统的硬件相关)?

  
  
  
  
  1. # file initrd-2.6.5-1.358.img 
  2. initrd-2.6.5-1.358.img: gzip compressed data, from Unix, max compression 
  3. # mv initrd-2.6.5-1.358.img initrd-2.6.5-1.358.gz 
  4. # gzip -d initrd-2.6.5-1.358.gz 
  5. # ll 
  6. -rw-r--r-- 1 root root 8192000 Jan 14 11:32 initrd-2.6.5-1.358 
  7. # mkdir /mnt/loop 
  8. # mount -o loop initrd-2.6.5-1.356 /mnt/loop 
  9. ………… 中间修改此文件系统,等等………… 
  10. # umount loop 
  11. # cd /boot 
  12. # gzip -9 initrd-2.6.5-1.356 
  13. # mv initrd-2.6.5-1.356.gz initrd-2.6.5-1.356.img 

 

你可能感兴趣的:(linux,Debian,内核,休闲,编译升级内核)