ubuntu10.10下核心編譯,解決開機啟動出現Could not load /lib/modules/…/modules.dep的問題

來源:互聯網
上載者:User

一:下載核心源碼的方法:

1、ubuntu 下下載核心源碼:apt-get install linux-source

 

尋找核心源碼包:apt-cache search kernel-source,之後安裝對應的源碼包,也可直接執行apt-get install linux-source

 

在此種情況下下載的核心源碼可能與當前使用的核心版本不同(我的ubuntu核心為2.6.35-22,而下載下來的核心為2.6.35.11)。

 

2、下載特定版本的Linux核心,可以參考:http://forum.ubuntu.org.cn/viewtopic.php?t=134404 Linux編譯核心詳解

例:$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.2.tar.bz2

 

二、編譯源碼

安裝完核心源碼後,進入/usr/src/後解壓,解壓完成後:

1、make menuconfig:配置核心

2、make:編譯核心

3、make modules_install :將編譯得到的核心模組複製到/lib/modules/<kernel-version>/目錄下;

4、安裝核心:make install

(啟動設定檔grub.cfg是/boot/grub/grub.cfg(fedora是在menu.lst檔案中))

 

三、make install

此時只是把壓縮的核心鏡像vmlinuz拷貝到了/boot下,還沒有產生initrd.img,如果此時在grub.cfg檔案中增加新編譯的核心鏡像的話(將其他核心版本的img作為此核心的img),開機後會出現:Could not load /lib/modules/.../modules.dep

 

到這裡本來已經絕望了,感覺浪費了這麼久的時間竟然失敗啊!在網上找著了,有人提供了一個方案,就是使用initramfs-tools產生initrd.img,命令如下:update-initramfs -c -k 2.6.35.2之後會利用lib/modules下的檔案產生initrd.img-2.6.35.2(位置在boot檔案夾下),修改grub.cfg的img的路徑。重新啟動選擇2.6.35.2,啟動成功!參考http://www.linuxquestions.org/questions/debian-26/modprobe-fatal-could-not-load-lib-modules-modules-dep-335214/

 

在啟動的過程中發現,ubuntu預設啟動下是看不到grub的啟動菜單的(在多系統的機器上可以看到,但虛擬機器中無法看到),因此需要修改grub.cfg中關於時間的控制即timeout,有兩個地方:

if [ "${recordfail}" = 1 ]; then
set timeout=-1
else
set timeout=10
fi

if keystatus; then
if keystatus --shift; then
set timeout=-1
else
set timeout=0
fi
else
if sleep --interruptible 3 ; then
set timeout=0
fi
fi
fi

前者為系統失敗或成功的等待時間,後者為啟動時按住shift或不按shift的等待時間,在虛擬機器中可以在啟動時按住shift或者直接把後者的timeout全部改為10.參考資料:http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=323524

 

四、備忘:

1、vmlinuz是可引導的、壓縮的核心

2、initrd.img的作用:initrd.img是Linux啟 動過程中很重要的一個檔案,如果你編譯核心時將一部分功能編譯為可載入模組。如果系統的一些裝置的驅動編譯為可載入模,那麼啟動時如果沒有指定 INITRD=/path_to_initrd.img,那麼系統啟動或者會失敗,或者啟動後會有裝置無法使用(像網卡或者其它裝置)。如果沒指定initrd.img或者指定的initrd.img中並沒有包含正確的驅動模組,則系統啟動時會掛起,並報告"kernel panic: VFS: Unable to mount root fs on 08:06"的錯誤。

3、需提高:對於只是順利的走完整個流程,對於各步驟的細節很不清楚,如對核心的配置(menuconfig),核心源碼makefile的瞭解,以及產生vmlinuz和img的過程和兩個檔案的作用都不清楚,還需要再對其進行深入分析和學習!

 

 

參考資料:

1、ubuntu論壇上關於編譯核心源碼的流程,很詳細,早找到這個就不會費這麼大勁了:

http://forum.ubuntu.org.cn/viewtopic.php?t=134404

2、關於解決Could not load /lib/modules/.../modules.dep問題的方法:

http://www.linuxquestions.org/questions/debian-26/modprobe-fatal-could-not-load-lib-modules-modules-dep-335214/

3、vmlinuz和initrd.img的作用:

http://blogold.chinaunix.net/u3/100815/showart.php?id=2026646

4、Linux核心官方原始碼路徑:http://www.kernel.org/pub/linux/kernel/v2.6/

5、關於grub啟動菜單的顯示:http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=323524

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.