2011年3月1日 星期二

[linux]make kernel part1

呼,今天考完中山,這禮拜要繼續衝。

紀錄一下kernel 編譯結果

環境:Ubuntu 10.04 LTS
NB:HP Presorio V3000

第一次build linux kerenl,編譯完kernel之後遇到重新開機卻無法順利開機問題。

build steps如下:
1.下載linux-2.6.37.2.tar.bz2
2.cd linux-source
3.cp /boot/config-2.6.32-28-generic .config
4.make clean
5.sudo make menuconfig
6.Load .config file , exit and saved.
7.make-kpkg --revision 0.0.1 --initrd kernel_image kernel_headers
8.build done.
9.dpkg -i linux-headers-2.6.37.2_0.0.1_amd64.deb
10.dpkg -i linux-image-2.6.37.2_0.0.1_amd64.deb

以上,build 完之後,有正常產生headers 及image,然後下完指令dpkg -i,reboot 電腦,選擇Ubuntu,Linux 2.6.37.2 卻無法正常開啟。
顯示的msg如下:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)



後來經過前輩指導,在ubuntu 10.04以後的版本,在最後還要多一個步驟建立 initrd的image檔

cd /boot
sudo mkinitramfs -k -o initrd.img-2.6.37.2_0.0.1_amd64 2.6.37.2_0.0.1_amd64
sudo update-grub2

ref http://www.question-defense.com/2010/09/26/how-to-recompile-your-ubuntu-10-10-kernel-for-patching-or-to-add-support-for-a-specific-device


Update 一下資訊:

1.下載linux-2.6.37.2.tar.bz2
2.cd linux-source
3.cp /boot/config-2.6.32-28-generic .config
4.make clean
5.sudo make menuconfig
6.Load .config file , exit and saved.
7.make-kpkg --revision 0.0.1 --initrd kernel_image kernel_headers
8.build done.
9.dpkg -i linux-headers-2.6.37.2_0.0.1_amd64.deb
10.dpkg -i linux-image-2.6.37.2_0.0.1_amd64.deb
***11.sudo update-initramfs -c -k 2.6.37.2
12.sudo update-grub
13.reboot

2 則留言:

  1. 以下轉自ptt 的artf08

    作者: artf08 (大珍奶,珍奶大) 看板: Linux
    標題: Re: [問題] 編譯核心問題
    時間: Sun Feb 27 12:50:27 2011

    在下新手獻曝,其實也只不過是一些股溝來的步驟(ubuntu10.04,10.10,mint皆測過)
    但至少我確定下面這些步驟,我自己試過從rc3~rc5都沒問題
    提供想自己編譯kernel玩玩的人參考
    我只知道這樣做OK,對於步驟有問題的話請各位高人幫忙解答

    1.下載最新的內核 www.kernel.org
    (目前最新是kernel 2.6.38),保存到主目錄(/home/user/ 或~/)

    2.解壓軟件包:
    tar xvf linux-2.6.38-rc6.tar.bz2

    3.使用默認的.config 文件:
    sudo cp /boot/config-2.6.xx-xx-generic ~/linux-2.6.38-rc6

    4.make & install:
    cd linux-2.6.38-rc6
    sudo make menuconfig
    (參考完鳥哥的舊資料後,看懂得部分就自訂,不懂得就預設)
    (這邊會出現警告,因為少了編譯需求的某lib,補齊即可)
    sudo make
    (靜待3小時,1.5G的舊電腦,近期的應該也要1小時左右吧,我猜)
    sudo make modules_install
    sudo make install

    5.創建 initrd:
    sudo update-initramfs -k 2.6.38-rc6 -c

    6.升級grub:
    sudo update-grub

    7.重啟就變成新kernel了

    回覆刪除
  2. update info
    before build kernel:
    1.apt-get install libncurses5-dev
    2.apt-get install kernel-package

    回覆刪除