91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決Linux內核編譯失敗的問題

發布時間:2021-09-27 09:53:48 來源:億速云 閱讀:224 作者:iii 欄目:系統運維

本篇內容主要講解“如何解決Linux內核編譯失敗的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何解決Linux內核編譯失敗的問題”吧!

內核常識

我們先要了解一點.一個內核有哪些東西.

比如我們:

代碼如下:

rpm -ql kernel

可以見到如下的信息

代碼如下:

/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

見到沒,其實沒有什么東西,主要就上面幾個在 boot 下的文件 ,和在 /lib/modules 下的模塊文件.
System.map 內核符號映射表,顧名思義就是將內核中的符號(也就是內核中的函數)和它的地址能聯系起來的一個列表。
config 內核編譯的配置文件,make oldconfig 就需要使用這個文件.
vmlinuz 這就是真實的可引導的、壓縮的內核。

好了,由上面我們知道,這個和系統其它東西沒有關系了,所以刪除一個內核也就是刪除這幾文件.

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

Initrd 的了解和檢查

我今天要講的是最影響啟動的東西 initrd .大家會想,這是什么,內核中都沒有,其它這個是內核包安裝完后根據每個不同的硬件生成的.硬件不一樣這個不一樣.下面這個是很官方的介紹:
initrd是“initial ramdisk”的簡寫。initrd一般被用來臨時的引導硬件到實際內核vmlinuz能夠接管并繼續引導的狀態。圖中的initrd- 2.4.7-10.img主要是用于加載ext3等文件系統及scsi設備的驅動。

比 如,使用的是scsi硬盤,而內核vmlinuz中并沒有這個scsi硬件的驅動,那么在裝入scsi模塊之前,內核不能加載根文件系統,但scsi模塊 存儲在根文件系統的/lib/modules下。為了解決這個問題,可以引導一個能夠讀實際內核的initrd內核并用initrd修正scsi引導問 題。initrd-2.4.7-10.img是用gzip壓縮的文件,initrd實現加載一些模塊和安裝文件系統等功能。

所以我們現在知道了,如果是一個奇怪的硬件,但是不能正常使用,就是 initrd 默認沒有加載,要不就是內核沒有加進去.

下面根據導致失敗的原因進行一下分類處理

新內核啟動失敗后: 在原有老系統中使用 modprobe 和 lsmod 來確認需要加載的模塊

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

代碼如下:

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

我們發現,這臺機器有一些別的機器上沒有的硬件,就是 mpt 的相關內容.如果在上面重新編譯內核,沒有加載這幾個模塊,就一定會啟動失敗.

使用原因老系統中可以正常啟動的 initrd 來確認新內核需要加載的模塊

好了.上面還是我們看得見的,要是我們看不見,但啟動失敗怎么辦
我們可以解開 initrd.img 來看原始加載那些模塊.

代碼如下:

cd /boot/
mkdir tmp
cp initrd*****.img tmp
cd /tmp
zcat intrd**img | cpio -id
cat  init

好了,我們主要注意下面這些內容

代碼如下:

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

根據上面這些,和你原來的,看看你是不是沒有這些信息中提到的模塊.沒有,就快點加上吧,用這些方法處理后,99% 是能啟動的,在不能啟動我也幫不到你了

重新修改 initrd 的內核

代碼如下:

gzip -cd initrd-2.6.34.2.img | cpio -imd --quiet find . | cpio -co | gzip -9 > /tmp/initrd-2.6.34.2.img

編譯內核你可以知道的東西

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

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

代碼如下:

depmod [-b basedir] [-e] [-F System.map] [-n] [-v] [version] [-A]
depmod [-e] [-F System.map] [-n] [-v] [version] [filename...]


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

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

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

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

描述:mkinitrd可建立映像文件,以供Linux開機時載入ramdisk。

參數:
-f 若指定的映像問家名稱與現有文件重復,則覆蓋現有的文件。
-v  執行時顯示詳細的信息。
&ndash;omit-scsi-modules 不要載入SCSI模塊。
&ndash;preload=<模塊名稱> 指定要載入的模塊。
&ndash;with=<模塊名稱> 指定要載入的模塊。
&ndash;version 顯示版本信息

到此,相信大家對“如何解決Linux內核編譯失敗的問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

游戏| 循化| 嘉善县| 新郑市| 景宁| 富平县| 稷山县| 桦川县| 桃江县| 阳春市| 广汉市| 津市市| 旺苍县| 上饶县| 德清县| 渭源县| 宝丰县| 高淳县| 会宁县| 咸丰县| 大化| 鹤壁市| 天柱县| 海门市| 文昌市| 资讯| 沙湾县| 科尔| 鄂伦春自治旗| 云浮市| 翁源县| 余干县| 固镇县| 汤原县| 鄂伦春自治旗| 连城县| 临江市| 正镶白旗| 东丰县| 南涧| 瑞昌市|