虚拟机软件是VirtualBox

虚拟机软件是VirtualBox。第一步、下载Linux源码

首先需要看一下当前Linux使用的版本

[email protected]:~$ uname -r

2.6.32-5-686

可以看到,当前使用的Linux内核版本是:2.6.32.5

为了说明问题,我们也从网上下载linux-2.6.32.5(当然也可以下载最新的版本,但是有风险)。下载地址如下:

ftp://ftp.kernel.org/pub/linux/kernel/v2.6/

我下载的是:linux-2.6.32.5.tar.xz

 

Wind7主机+Debian6虚拟机,虚拟机软件是VirtualBox

第三步、编译Linux内核

清理垃圾:

cd /usr/src/kernels/linux-2.6.32.5

虚拟机软件是VirtualBox。make mrproper

make clean

编译内核前需要配置,为了说明问题,直接将本机自带的配置config-2.6.32-5-686拷贝到刚才解压的目录下(如果下载了比较新的内核,就需对照着config-2.6.32-5-686自己配置了),并重命名为.config

虚拟机软件是VirtualBox。cp     /boot/config-2.6.32-5-686    
/usr/src/kernels/linux-2.6.32.5/.config

虚拟机软件是VirtualBox。cd   /usr/src/kernels/linux-2.6.32.5

make menucongfig

修改General setup内的Local version为pengdl,目的是防止执行make
install和make modules_install的时候跟旧的发生冲突。

make bzImage  -j4

make modules  -j4

make modules_install

make install    

制作initrd镜像

mkinitramfs     2.6.32.5pengdl   -o    /boot/initrd.img-2.6.32.5pengdl

其中2.6.32.5pengdl 就是执行完make
modules_install后,在/lib/modules下新生成的文件夹

此时/lib/modules和/boot下的内容如下(其中带有686的是系统原先就有的,带pengdl的是我们新生成的,

其中之所以有以.old结尾的文件,是因为执行了两次make
install,实际上执行一次就行了。手动将*.old删除):

debian:/usr/src/kernels/linux-2.6.32.5# ls //modules/

2.6.32-5-686  2.6.32.5pengdl

debian:/usr/src/kernels/linux-2.6.32.5# ls /boot/

config-2.6.32-5-686        System.map-2.6.32-5-686

config-2.6.32.5pengdl      System.map-2.6.32.5pengdl

config-2.6.32.5pengdl.old  System.map-2.6.32.5pengdl.old

grub                       vmlinuz-2.6.32-5-686

initrd.img-2.6.32-5-686    vmlinuz-2.6.32.5pengdl

initrd.img-2.6.32.5pengdl  vmlinuz-2.6.32.5pengdl.old

debian:/usr/src/kernels/linux-2.6.32.5# 

 

第二步、解压Linux内核

将来把内核源码解压到/usr/src/kernels下

mkdir -p /usr/src/kernels

 

tar -xJf linux-2.6.32.5.tar.xz -C /usr/src/kernels/

 

 

参考:

《鸟哥的Linux私房菜》第26章

 

第四步、更新grub

grub-mkconfig >/boot/grub/grub.cfg

可以看看新生成的grub.cfg的内容:

#

#   EDIT THIS FILE

#

# It  automatically generated by grub-mkconfig using templates

# from /etc/grub.d  settings from /etc//grub

#

 

### BEGIN /etc/grub.d/00_header ###

 [ -s $prefix/grubenv ]; 

  load_env

fi

 =

 [  ]; 

   saved_entry=

  save_env saved_entry

   prev_saved_entry=

  save_env prev_saved_entry

   boot_once=

fi

 

 savedefault {

   [ -z  ]; 

    saved_entry=

    save_env saved_entry

  fi

}

 

 load_video {

  insmod vbe

  insmod vga

  insmod video_bochs

  insmod video_cirrus

}

 

insmod part_msdos

insmod ext2

 root=

search --no-floppy --fs-uuid -- 87115ddc-75d2-4f74-b8c4-e3796e6a244a

 loadfont /share/grub/.pf2 ; 

   gfxmode=640x480

  load_video

  insmod gfxterm

fi

terminal_output gfxterm

insmod part_msdos

insmod ext2

 root=

search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

 locale_dir=($root)/boot/grub/locale

 lang=en

insmod gettext

 timeout=5

###  /etc/grub.d/00_header ###

 

### BEGIN /etc/grub.d/05_debian_theme ###

insmod part_msdos

insmod ext2

 root=

search --no-floppy --fs-uuid -- 87115ddc-75d2-4f74-b8c4-e3796e6a244a

insmod png

 background_image /share/images/desktop-base/spacefun-grub.png; 

   color_normal=light-gray/black

   color_highlight=white/black

   menu_color_normal=cyan/blue

   menu_color_highlight=white/blue

fi

###  /etc/grub.d/05_debian_theme ###

 

### BEGIN /etc/grub.d/10_linux ###

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  quiet

    echo    

    initrd    /boot/initrd.img-2.6.32.5pengdl

}

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  

    echo    

    initrd    /boot/initrd.img-2.6.32.5pengdl

}

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  quiet

    echo    

    initrd    /boot/initrd.img-2.6.32-5-686

}

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  

    echo    

    initrd    /boot/initrd.img-2.6.32-5-686

}

###  /etc/grub.d/10_linux ###

 

### BEGIN /etc/grub.d/20_linux_xen ###

###  /etc/grub.d/20_linux_xen ###

 

### BEGIN /etc/grub.d/30_os-prober ###

###  /etc/grub.d/30_os-prober ###

 

### BEGIN /etc/grub.d/40_custom ###

# This file provides an easy way  add custom menu entries.  Simply type the

# menu entries you want  add after this comment.  Be careful   change

# the 

###  /etc/grub.d/40_custom ###

 

### BEGIN /etc/grub.d/41_custom ###

 [ -f  $prefix/custom.cfg ]; 

  source $prefix/custom.cfg;

fi

###  /etc/grub.d/41_custom ###

其中已经有了我们新添加的内核了:

### BEGIN /etc/grub.d/10_linux ###

Found linux image: /boot/vmlinuz-2.6.32.5pengdl

Found initrd image: /boot/initrd.img-2.6.32.5pengdl

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  quiet

    echo    

    initrd    /boot/initrd.img-2.6.32.5pengdl

}

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  

    echo    

    initrd    /boot/initrd.img-2.6.32.5pengdl

}

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  quiet

    echo    

    initrd    /boot/initrd.img-2.6.32-5-686

}

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  

    echo    

    initrd    /boot/initrd.img-2.6.32-5-686

}

###  /etc/grub.d/10_linux ###

如果按照上面的配置,启动时,Linux 2.6.32.5pengdl
会放在第一个,如果不手动按上下键进行选择,那么启动的将是我们刚编译出来的内核,如何让系统默认启动旧的内核呢?这里有几种方法:

1、手动修改grub.conf,交换旧内核和新内核的位置:

### BEGIN /etc/grub.d/10_linux ###

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  quiet

    echo    

    initrd    /boot/initrd.img-2.6.32-5-686

}

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  

    echo    

    initrd    /boot/initrd.img-2.6.32-5-686

}

 

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  quiet

    echo    

    initrd    /boot/initrd.img-2.6.32.5pengdl

}

menuentry 

    insmod part_msdos

    insmod ext2

     root=

    search --no-floppy --fs-uuid -- 2c7658ba-7c5c-45f2-8117-d70fcadcdda6

    echo    

    linux    /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro  

    echo    

    initrd    /boot/initrd.img-2.6.32.5pengdl

}

###  /etc/grub.d/10_linux ###

2、或者,修改 set default=”0″ 
,将0改为2。直接在这里改,如果再更新grub.conf,default的值又变为了0,其中在grub.conf的最上面给出了方法:

#

#   EDIT THIS FILE

#

# It  automatically generated by grub-mkconfig using templates

# from /etc/grub.d  settings from /etc//grub

#

我们应该修改/etc/default/grub这个文件,将GRUB_www.602.net,DEFAULT=0
改为GRUB_DEFAULT=2,然后重新执行

grub-mkconfig >/boot/grub/grub.cfg

下面是启动测试:(可以用上下箭头选择有启动的内核)

安装增强工具的时候,会把上次安装的增强工具给删掉。

《鸟哥的Linux私房菜》第26章

环境:
Wind7主机+…

环境:

发表评论

电子邮件地址不会被公开。 必填项已用*标注