參考:
《鳥哥的linux私房菜》第26章
http://hi.baidu.com/wg_wang/item/f9375c2f00ca75c0ee10f1db
http://www.linuxdiyf.com/bbs/thread-193762-1-1.html
環(huán)境:
Wind7主機(jī)+Debian6虛擬機(jī),虛擬機(jī)軟件是VirtualBox
第一步、下載Linux源碼首先需要看一下當(dāng)前Linux使用的版本
pengdl@debian:~$ uname -r
2.6.32-5-686
可以看到,當(dāng)前使用的Linux內(nèi)核版本是:2.6.32.5
為了說明問題,我們也從網(wǎng)上下載linux-2.6.32.5(當(dāng)然也可以下載最新的版本,但是有風(fēng)險(xiǎn))。下載地址如下:
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/
我下載的是:linux-2.6.32.5.tar.xz
第二步、解壓Linux內(nèi)核將來把內(nèi)核源碼解壓到/usr/src/kernels下
mkdir -p /usr/src/kernels
tar -xJf linux-2.6.32.5.tar.xz -C /usr/src/kernels/第三步、編譯Linux內(nèi)核
清理垃圾:
cd /usr/src/kernels/linux-2.6.32.5
make mrPRoper
make clean
編譯內(nèi)核前需要配置,為了說明問題,直接將本機(jī)自帶的配置config-2.6.32-5-686拷貝到剛才解壓的目錄下(如果下載了比較新的內(nèi)核,就需對照著config-2.6.32-5-686自己配置了),并重命名為.config
cp /boot/config-2.6.32-5-686 /usr/src/kernels/linux-2.6.32.5/.config
cd /usr/src/kernels/linux-2.6.32.5
make menucongfig
修改General setup內(nèi)的Local version為pengdl,目的是防止執(zhí)行make install和make modules_install的時(shí)候跟舊的發(fā)生沖突。
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 就是執(zhí)行完make modules_install后,在/lib/modules下新生成的文件夾
此時(shí)/lib/modules和/boot下的內(nèi)容如下(其中帶有686的是系統(tǒng)原先就有的,帶pengdl的是我們新生成的,
其中之所以有以.old結(jié)尾的文件,是因?yàn)閳?zhí)行了兩次make install,實(shí)際上執(zhí)行一次就行了。手動(dòng)將*.old刪除):
debian:/usr/src/kernels/linux-2.6.32.5# ls /lib/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#第四步、更新grub
grub-mkconfig >/boot/grub/grub.cfg
可以看看新生成的grub.cfg的內(nèi)容:
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
load_env
fi
set default="2"
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
}
insmod part_msdos
insmod ext2
set root='(hd1,msdos5)'
search --no-floppy --fs-uuid --set 87115ddc-75d2-4f74-b8c4-e3796e6a244a
if loadfont /share/grub/unicode.pf2 ; then
set gfxmode=640x480
load_video
insmod gfxterm
fi
terminal_output gfxterm
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
set locale_dir=($root)/boot/grub/locale
set lang=en
insmod gettext
set timeout=5
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
insmod part_msdos
insmod ext2
set root='(hd1,msdos5)'
search --no-floppy --fs-uuid --set 87115ddc-75d2-4f74-b8c4-e3796e6a244a
insmod png
if background_image /share/images/desktop-base/spacefun-grub.png; then
set color_normal=light-gray/black
set color_highlight=white/black
else
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
fi
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Debian GNU/Linux, with Linux 2.6.32.5pengdl' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32.5pengdl ...'
linux /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32.5pengdl
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32.5pengdl (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32.5pengdl ...'
linux /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32.5pengdl
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-686
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-686
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
其中已經(jīng)有了我們新添加的內(nèi)核了:
### 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 'Debian GNU/Linux, with Linux 2.6.32.5pengdl' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32.5pengdl ...'
linux /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32.5pengdl
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32.5pengdl (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32.5pengdl ...'
linux /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32.5pengdl
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-686
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-686
}
### END /etc/grub.d/10_linux ###
如果按照上面的配置,啟動(dòng)時(shí),Linux 2.6.32.5pengdl 會(huì)放在第一個(gè),如果不手動(dòng)按上下鍵進(jìn)行選擇,那么啟動(dòng)的將是我們剛編譯出來的內(nèi)核,如何讓系統(tǒng)默認(rèn)啟動(dòng)舊的內(nèi)核呢?這里有幾種方法:
1、手動(dòng)修改grub.conf,交換舊內(nèi)核和新內(nèi)核的位置:
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-686
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-686
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32.5pengdl' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32.5pengdl ...'
linux /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32.5pengdl
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32.5pengdl (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 2c7658ba-7c5c-45f2-8117-d70fcadcdda6
echo 'Loading Linux 2.6.32.5pengdl ...'
linux /boot/vmlinuz-2.6.32.5pengdl root=UUID=2c7658ba-7c5c-45f2-8117-d70fcadcdda6 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32.5pengdl
}
### END /etc/grub.d/10_linux ###
2、或者,修改 set default="0" ,將0改為2。直接在這里改,如果再更新grub.conf,default的值又變?yōu)榱?,其中在grub.conf的最上面給出了方法:
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
我們應(yīng)該修改/etc/default/grub這個(gè)文件,將GRUB_DEFAULT=0 改為GRUB_DEFAULT=2,然后重新執(zhí)行
grub-mkconfig >/boot/grub/grub.cfg
下面是啟動(dòng)測試:(可以用上下箭頭選擇有啟動(dòng)的內(nèi)核)
注意:
因?yàn)槲沂怯玫氖荲irtualBox虛擬機(jī),更新完內(nèi)核后,需要重新安裝VirtualBox增強(qiáng)工具,增強(qiáng)工具的安裝方法參見:
http://www.CUOXin.com/pengdonglin137/p/3366765.html#a8
安裝增強(qiáng)工具的時(shí)候,會(huì)把上次安裝的增強(qiáng)工具給刪掉。
完!!
新聞熱點(diǎn)
疑難解答
圖片精選