2014/02/26

[Linux] Ubuntu12.04下利用QEMU + chroot來編譯Linux Kernel (二)

參考上篇設定,利用QEMU執行Ubuntu,且連上網路。下載完Linux Kernel後,就可以準備來進行編譯Linux的Kernel了。細節可以參考這篇http://linux.vbird.org/linux_basic/0540kernel.php,目標是Ubuntu 12.04採用3.2版Kernel改成3.5版的Kernel。

查詢目前Kernel版本
\>uname -r

關掉QEMU後,要來編譯Linux核心,首先利用chroot切換到子系統的目錄下,su代表是用帳號登入,也就是子系統的帳號
$ sudo chroot partition env -i TERM=xterm su brown

接著,切換目錄到要編譯的Linux Kernel資料夾下
\>cd /usr/src/linux-3.5.5

然後把原本可能有編譯過殘留的.o檔清除
\>make mrproper
\>make clean

使用目前的.config檔作為menuconfig .config預設檔
\>cp /boot/config-3.2.0-23-generic-pae .config

進入muconfig修改細項,細項選擇參考這篇
\>make menuconfig
可以在Local version版本的地方,可以加上自己命名的版本,然後選擇automatically append,作為版本辨識用。

再來就正式進入編譯Makefile了
\>make modules
這個步驟會花點時間,所以就做其他事情去吧!

跑完之後換build bzImage
\>make bzImage
同樣也會花點時間,成功之後應該會看到下圖。
成功的產生了vmlinux和System.map的檔案。

再來要安裝編譯好的核心,離開chroot和卸載partition
\> exit
$ sudo umount partition
$ sudo losetup -d /dev/loop0

開機QEMU的Ubuntu 12.04
$ qemu-system-i386 -net nic -net user -hda disk.img -m 2047
進入kernel的資料夾下
\>cd /usr/src/linux-3.5.5

安裝編譯好的modules以及install安裝開機的選單
\>sudo make modules_install
\>sudo make install
成功後會看到下圖
可以看到有把3.5.5brown的Kernel連結到/boot的資料夾下。

修改 grub2 設定檔,在 GRUB_HIDDEN_TIMEOUT=0 的前面加上 '#'。
\> sudo vi /etc/default/grub
:i/GRUB_HIDDEN_TIMEOUT=0 à #GRUB_HIDDEN_TIMEOUT=0
:wq

最後重開機
\>sudo reboot

就會看到開機選單
採用了新編譯的Kernel版本,3.5.5brown,開機之後進入查詢Linux Kernel版本
就可以看到成功的替換了新版本的Kernel了。

沒有留言:

張貼留言