欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Linux內(nèi)核編譯失敗的一些解決方案

大步's Blog   發(fā)布時(shí)間:2015-07-03 17:50:06   作者:佚名   我要評(píng)論
這篇文章主要介紹了關(guān)于Linux內(nèi)核編譯失敗的一些解決方案,以initrd影響啟動(dòng)的問(wèn)題作為重點(diǎn)講解,需要的朋友可以參考下

相信有無(wú)數(shù)的人,有編譯內(nèi)核失敗的記錄, 99% 的原因就是和文件系統(tǒng),硬件驅(qū)動(dòng)有關(guān),比如沒(méi)有找到 SCSI 卡.但對(duì)這些問(wèn)題大家都無(wú)從下手,都是亂測(cè)試.
因?yàn)槲夜芾砉舅械姆?wù)器的內(nèi)核定制,優(yōu)化和升級(jí)。下面我要教大家一些技巧,來(lái)幫助大家少失敗些.來(lái)編譯一個(gè)自己可以用的全新的內(nèi)核。

內(nèi)核常識(shí)

我們先要了解一點(diǎn).一個(gè)內(nèi)核有哪些東西.

比如我們:


復(fù)制代碼
代碼如下:
rpm -ql kernel

可以見(jiàn)到如下的信息


復(fù)制代碼
代碼如下:
/boot/System.map-2.6.24.4
/boot/config-2.6.24.4
/boot/vmlinuz-2.6.24.4
/lib/modules/lib/modules/2.6.24.4
/lib/modules/2.6.24.4/build
/lib/modules/2.6.24.4/kernel

見(jiàn)到?jīng)],其實(shí)沒(méi)有什么東西,主要就上面幾個(gè)在 boot 下的文件 ,和在 /lib/modules 下的模塊文件.
System.map 內(nèi)核符號(hào)映射表,顧名思義就是將內(nèi)核中的符號(hào)(也就是內(nèi)核中的函數(shù))和它的地址能聯(lián)系起來(lái)的一個(gè)列表。
config 內(nèi)核編譯的配置文件,make oldconfig 就需要使用這個(gè)文件.
vmlinuz 這就是真實(shí)的可引導(dǎo)的、壓縮的內(nèi)核。

好了,由上面我們知道,這個(gè)和系統(tǒng)其它東西沒(méi)有關(guān)系了,所以刪除一個(gè)內(nèi)核也就是刪除這幾文件.

大家可以參考一下前些日子我寫的[Linux]編譯一個(gè) RHEL 定制的內(nèi)核 rpm 包 .

Initrd 的了解和檢查

我今天要講的是最影響啟動(dòng)的東西 initrd .大家會(huì)想,這是什么,內(nèi)核中都沒(méi)有,其它這個(gè)是內(nèi)核包安裝完后根據(jù)每個(gè)不同的硬件生成的.硬件不一樣這個(gè)不一樣.下面這個(gè)是很官方的介紹:
initrd是“initial ramdisk”的簡(jiǎn)寫。initrd一般被用來(lái)臨時(shí)的引導(dǎo)硬件到實(shí)際內(nèi)核vmlinuz能夠接管并繼續(xù)引導(dǎo)的狀態(tài)。圖中的initrd- 2.4.7-10.img主要是用于加載ext3等文件系統(tǒng)及scsi設(shè)備的驅(qū)動(dòng)。

比 如,使用的是scsi硬盤,而內(nèi)核vmlinuz中并沒(méi)有這個(gè)scsi硬件的驅(qū)動(dòng),那么在裝入scsi模塊之前,內(nèi)核不能加載根文件系統(tǒng),但scsi模塊 存儲(chǔ)在根文件系統(tǒng)的/lib/modules下。為了解決這個(gè)問(wèn)題,可以引導(dǎo)一個(gè)能夠讀實(shí)際內(nèi)核的initrd內(nèi)核并用initrd修正scsi引導(dǎo)問(wèn) 題。initrd-2.4.7-10.img是用gzip壓縮的文件,initrd實(shí)現(xiàn)加載一些模塊和安裝文件系統(tǒng)等功能。

所以我們現(xiàn)在知道了,如果是一個(gè)奇怪的硬件,但是不能正常使用,就是 initrd 默認(rèn)沒(méi)有加載,要不就是內(nèi)核沒(méi)有加進(jìn)去.

下面根據(jù)導(dǎo)致失敗的原因進(jìn)行一下分類處理

新內(nèi)核啟動(dòng)失敗后: 在原有老系統(tǒng)中使用 modprobe 和 lsmod 來(lái)確認(rèn)需要加載的模塊

我們知道了 initrd 影響啟動(dòng),那我們要怎么樣來(lái)確認(rèn)是不是加載全了硬件啦. initrd 很大程度上是靠 lsmod 出來(lái)的模塊,還有 /etc/modprobe 的指示來(lái)做的.當(dāng)然 也可以用 lspci 之類來(lái)確認(rèn).
如下


復(fù)制代碼
代碼如下:
cat /etc/modprobe.conf
alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptscsi
alias scsi_hostadapter2 mptspi
alias scsi_hostadapter3 mptsas
alias scsi_hostadapter4 mptscsih
alias scsi_hostadapter5 ata_piix</p> <p># lsmod
Module Size Used by
iptable_filter 7300 1
ip_tables 18132 1 iptable_filter
xt_tcpudp 7680 1
x_tables 19204 2 ip_tables,xt_tcpudp
ipv6 245092 32

我們發(fā)現(xiàn),這臺(tái)機(jī)器有一些別的機(jī)器上沒(méi)有的硬件,就是 mpt 的相關(guān)內(nèi)容.如果在上面重新編譯內(nèi)核,沒(méi)有加載這幾個(gè)模塊,就一定會(huì)啟動(dòng)失敗.

使用原因老系統(tǒng)中可以正常啟動(dòng)的 initrd 來(lái)確認(rèn)新內(nèi)核需要加載的模塊

好了.上面還是我們看得見(jiàn)的,要是我們看不見(jiàn),但啟動(dòng)失敗怎么辦
我們可以解開 initrd.img 來(lái)看原始加載那些模塊.


復(fù)制代碼
代碼如下:
cd /boot/
mkdir tmp
cp initrd*****.img tmp
cd /tmp
zcat intrd**img | cpio -id
cat init

好了,我們主要注意下面這些內(nèi)容


復(fù)制代碼
代碼如下:
echo "Loading scsi_mod.ko module"
insmod /lib/scsi_mod.ko
echo "Loading sd_mod.ko module"
insmod /lib/sd_mod.ko
echo "Loading mptbase.ko module"
insmod /lib/mptbase.ko
echo "Loading mptscsi.ko module"
insmod /lib/mptscsi.ko
echo "Loading mptspi.ko module"
insmod /lib/mptspi.ko
echo "Loading mptsas.ko module"
insmod /lib/mptsas.ko
echo "Loading mptscsih.ko module"
insmod /lib/mptscsih.ko
echo "Loading jbd.ko module"
insmod /lib/jbd.ko
echo "Loading ext3.ko module"
insmod /lib/ext3.ko

根據(jù)上面這些,和你原來(lái)的,看看你是不是沒(méi)有這些信息中提到的模塊.沒(méi)有,就快點(diǎn)加上吧,用這些方法處理后,99% 是能啟動(dòng)的,在不能啟動(dòng)我也幫不到你了

重新修改 initrd 的內(nèi)核


復(fù)制代碼
代碼如下:
gzip -cd initrd-2.6.34.2.img | cpio -imd --quiet find . | cpio -co | gzip -9 > /tmp/initrd-2.6.34.2.img

編譯內(nèi)核你可以知道的東西

為新核心重命名
我 們?cè)诰幾g內(nèi)核之前, 可以先修改Makefile中的版本信息,打開/usr/src/Linux/Makefile。在開始部分有一個(gè)變量EXTRAVERSION可以自行 定義。修改這個(gè)變量,比如改成 “EXTRAVERSION=-ChinaCache”后,編譯出的核心版本號(hào)就會(huì)顯示成2.6.24-ChinaCache。
但實(shí)際上, 從2.6.8的版本起可在內(nèi)核版本號(hào)后面添加個(gè)性化字符串. 所以也就沒(méi)有必要修改Makefile了: () Local version – append to kernel release
如果你即修改了Makefile中的EXTRAVERSION, 又在配置時(shí)定義了local version. 那么local version所定義的字符串將位于末尾, 緊跟在EXTRAVERSION的值之后.

depmod
功能:分析可加載模塊的依賴性,生成modules.dep文件和映射文件。
用法:

復(fù)制代碼
代碼如下:
depmod [-b basedir] [-e] [-F System.map] [-n] [-v] [version] [-A]
depmod [-e] [-F System.map] [-n] [-v] [version] [filename...]

描述:
Linux內(nèi)核模塊可以為其它模塊提供提供服務(wù)(在代碼中使用EXPORT_SYMBOL),這種服務(wù)被稱作"symbols"。若第二個(gè)模塊使用了這個(gè)symbol,則該模塊很明顯依賴于第一個(gè)模塊。這些依賴關(guān)系是非常繁雜的。

depmod 讀取在/lib/modules/version 目錄下的所有模塊,并檢查每個(gè)模塊導(dǎo)出的symbol和需要的symbol,然后創(chuàng)建一個(gè)依賴關(guān)系列表。默認(rèn)地,該列表寫入到/lib/moudules /version目錄下的modules.dep文件中。若命令中的filename有指定的話,則僅檢查這些指定的模塊(不是很有用)。

若命令中提供了version參數(shù),則會(huì)使用version所指定的目錄生成依賴,而不是當(dāng)前內(nèi)核的版本(uname -r 返回的)。

mkinitrd 命令的使用
功能:建立要載入ramdisk的映像文件。
用法:mkinitrd [-fv][--omit-scsi-modules][--version][--preload=<模塊名稱>][--with=& lt;模塊名稱>][映像文件][Kernel 版本]

描述:mkinitrd可建立映像文件,以供Linux開機(jī)時(shí)載入ramdisk。

參數(shù):
-f 若指定的映像問(wèn)家名稱與現(xiàn)有文件重復(fù),則覆蓋現(xiàn)有的文件。
-v  執(zhí)行時(shí)顯示詳細(xì)的信息。
–omit-scsi-modules 不要載入SCSI模塊。
–preload=<模塊名稱> 指定要載入的模塊。
–with=<模塊名稱> 指定要載入的模塊。
–version 顯示版本信息

相關(guān)文章

  • linux系統(tǒng)不同對(duì)象升級(jí)方法詳細(xì)介紹

    在Linux環(huán)境下,升級(jí)的對(duì)象可以是一般的軟件,可以是編譯器,也可以是系統(tǒng)的內(nèi)核,甚至是系統(tǒng)本身。下文就分別講講對(duì)不同對(duì)象的升級(jí)方法,需要的朋友可以參考一下
    2015-10-22
  • Ubuntu 15.10系統(tǒng)10月22日發(fā)布 采用Linux Kernel 4.2內(nèi)核

    Ubuntu最后一個(gè)版本Ubuntu 15.10即將發(fā)布,最終版將采用Linux內(nèi)核為4.2版,具體說(shuō)來(lái),Ubuntu 15.10進(jìn)入凍結(jié)階段后,其軟件棧和內(nèi)核都不會(huì)再有升級(jí),這能夠讓開發(fā)者更好地進(jìn)
    2015-10-13
  • Linux如何禁止系統(tǒng)內(nèi)核Kernel自動(dòng)升級(jí)避免不必要的麻煩

    Linux系統(tǒng)在進(jìn)行升級(jí)的時(shí)候內(nèi)核也會(huì)跟著更新,有時(shí)為了避免不必要的麻煩,如何禁止系統(tǒng)內(nèi)核Kernel自動(dòng)升級(jí),可以看看下面的文章
    2015-06-25
  • Linux操作系統(tǒng)內(nèi)核啟動(dòng)參數(shù)詳解

    這篇文章主要介紹了Linux操作系統(tǒng)內(nèi)核啟動(dòng)參數(shù)詳解,本文講解了常用的設(shè)備無(wú)關(guān)啟動(dòng)時(shí)參數(shù)、內(nèi)核開發(fā)和調(diào)試的啟動(dòng)時(shí)參數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-06-03
  • 存儲(chǔ)技術(shù)原理分析:基于Linux 2.6內(nèi)核源代碼 PDF掃描版[MB]

    《存儲(chǔ)技術(shù)原理分析》適合作為高校計(jì)算機(jī)相關(guān)專業(yè)本科生和研究生學(xué)習(xí)操作系統(tǒng)的輔助和實(shí)踐教材,也適合作為L(zhǎng)inux愛(ài)好者學(xué)習(xí)內(nèi)核的參考書籍。
    2015-05-09
  • Linux內(nèi)核的文件預(yù)讀詳解

    這篇文章主要介紹了Linux內(nèi)核的文件預(yù)讀詳解,本文講解了來(lái)自磁盤的需求、來(lái)自程序的需求、預(yù)讀的概念、Linux的預(yù)讀架構(gòu)、預(yù)讀算法概要等內(nèi)容,需要的朋友可以參考下
    2015-04-09
  • Ubuntu 13.10安裝最新Linux內(nèi)核的可行方法

    Linux內(nèi)核剛推出的時(shí)候還不能使用,需要等待一段時(shí)間,下面小編給大家介紹個(gè)方法,讓Ubuntu系統(tǒng)能夠安裝最新的Linux內(nèi)核,感興趣的朋友可以嘗試下
    2015-03-04
  • Linux內(nèi)核編程指南(第3版) PDF掃描版[40MB]

    《Linux內(nèi)核編程指南(第3版)》面向希望深入學(xué)習(xí)這種操作系統(tǒng)的讀者,全面介紹了Linux操作系統(tǒng)的技術(shù)原理。
    2015-03-02
  • 深入Linux內(nèi)核架構(gòu) PDF掃描版[23MB]

    深入Linux內(nèi)核架構(gòu)借助內(nèi)核源代碼中最關(guān)鍵的部分進(jìn)行講解,幫助讀者掌握重要的知識(shí)點(diǎn),從而在運(yùn)用中充分展現(xiàn)Linux系統(tǒng)的魅力。
    2015-03-02
  • Linux內(nèi)核模塊編寫詳解

    內(nèi)核編程常??雌饋?lái)像是黑魔法,而在亞瑟 C 克拉克的眼中,它八成就是了。Linux內(nèi)核和它的用戶空間是大不相同的:拋開漫不經(jīng)心,你必須小心翼翼,因?yàn)槟憔幊讨械囊粋€(gè)bug就
    2015-11-02

最新評(píng)論