日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Linux啟動(dòng)內(nèi)核源代碼解析(linux啟動(dòng)內(nèi)核源代碼)

Linux操作系統(tǒng)在運(yùn)行時(shí)需要啟動(dòng)內(nèi)核,而啟動(dòng)內(nèi)核的過(guò)程在一些場(chǎng)景下是必不可少的。在這篇文章中,我們將從源代碼的角度來(lái)了解Linux啟動(dòng)內(nèi)核的過(guò)程。

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)銅梁,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575

在Linux啟動(dòng)內(nèi)核的過(guò)程中,其實(shí)有兩個(gè)不同的部分:引導(dǎo)加載程序(bootloader)和內(nèi)核初始化。在本文中,我們將著重研究引導(dǎo)加載程序(bootloader)。

引導(dǎo)加載程序(bootloader)是一段程序,負(fù)責(zé)將內(nèi)核從存儲(chǔ)設(shè)備(如硬盤(pán))中加載到內(nèi)存中,并將控制權(quán)移交給內(nèi)核以便開(kāi)始執(zhí)行。在Linux系統(tǒng)中廣泛使用的引導(dǎo)加載程序是GRUB(GNU GRand Unified Bootloader)。

GRUB啟動(dòng)過(guò)程

GRUB啟動(dòng)過(guò)程中有兩個(gè)主要的階段:步驟一和步驟二。

步驟一

步驟一又稱為“階段1”,主要負(fù)責(zé)從硬盤(pán)上讀取階段二的代碼。在這個(gè)步驟中,GRUB會(huì)執(zhí)行以下操作:

1. 加載grub.cfg

GRUB的配置文件是grub.cfg,它包含了指示引導(dǎo)加載程序從哪個(gè)硬盤(pán)分區(qū)加載內(nèi)核的信息。 之一個(gè)文件系統(tǒng)在硬盤(pán)上的查找可以在任何大小或類(lèi)型的硬盤(pán)中發(fā)生,因此GRUB必須先查找grub.cfg。

2. 搜索grub.cfg的信息

一旦找到了grub.cfg,GRUB會(huì)搜索里面的信息以找到內(nèi)核的位置。這是通過(guò)讀取Linux根文件系統(tǒng)的標(biāo)識(shí)來(lái)完成的。這個(gè)標(biāo)識(shí)包含在grub.cfg的root行中。

3. 加載文件系統(tǒng)模塊

GRUB需要加載文件系統(tǒng)模塊以訪問(wèn)硬盤(pán)上的文件系統(tǒng)。字母大小寫(xiě)和位數(shù)可能會(huì)稍有不同,例如ext2.efi、ext4.mod。

4. 加載內(nèi)核

現(xiàn)在,GRUB已經(jīng)找到了內(nèi)核的位置,并加載了文件系統(tǒng)模塊,可以開(kāi)始加載內(nèi)核了。在這個(gè)過(guò)程中,GRUB使用multiboot標(biāo)準(zhǔn)中定義的數(shù)據(jù)結(jié)構(gòu)向內(nèi)核傳遞一些重要的信息。例如,GRUB可以將內(nèi)核放置在內(nèi)存中的哪個(gè)位置,以及內(nèi)核應(yīng)該如何訪問(wèn)一個(gè)具體的磁盤(pán)分區(qū)。

步驟二

步驟二又稱為“階段2”,主要負(fù)責(zé)加載內(nèi)核以及向內(nèi)核傳遞必要的信息,以使其能夠正確地啟動(dòng)。在這個(gè)步驟中,GRUB會(huì)執(zhí)行以下操作:

1. 加載內(nèi)核

在之一階段,GRUB通過(guò)multiboot數(shù)據(jù)結(jié)構(gòu)將內(nèi)核加載到預(yù)定的內(nèi)存位置。在這一步,GRUB會(huì)將它從占用內(nèi)存中刪除。

2. 傳遞內(nèi)核命令行和其他參數(shù)

GRUB使用multiboot標(biāo)準(zhǔn)來(lái)向內(nèi)核傳遞一組信息,例如內(nèi)核命令行參數(shù)。這些參數(shù)是內(nèi)核用來(lái)初始化和配置系統(tǒng)的命令行參數(shù)。

3. 啟動(dòng)內(nèi)核

GRUB跳轉(zhuǎn)到內(nèi)核入口點(diǎn),將控制權(quán)移交給內(nèi)核。

結(jié)論

以上就是Linux啟動(dòng)內(nèi)核的過(guò)程及GRUB的啟動(dòng)過(guò)程,這些過(guò)程是開(kāi)源Linux操作系統(tǒng)里面至關(guān)重要的。顯然,這篇文章的范圍遠(yuǎn)不足以涵蓋整個(gè)Linux啟動(dòng)過(guò)程,但是通過(guò)閱讀GRUB的源代碼,我們可以更好地了解引導(dǎo)加載程序的工作方式,從而有助于我們更好地理解Linux操作系統(tǒng)的啟動(dòng)過(guò)程。

相關(guān)問(wèn)題拓展閱讀:

  • linux啟動(dòng)時(shí)怎么選擇新舊內(nèi)核

linux啟動(dòng)時(shí)怎么選擇新舊內(nèi)核

1 是手動(dòng)選擇在開(kāi)機(jī)時(shí)候按方上下方向鍵 界面會(huì)停留在選擇內(nèi)核的界面

2自動(dòng)選擇 系統(tǒng)默認(rèn)會(huì)選擇最新安裝的內(nèi)核.如果要更改談派斗默認(rèn)使用的內(nèi)核則修改配置文件/boot/grub/menu.lst(直接修羨蘆改grub.conf同樣可行 )下default默認(rèn)為0是表示之一個(gè)菜單選項(xiàng)(開(kāi)機(jī)時(shí)的內(nèi)核含磨選擇菜單),改為1就是使用第二個(gè)菜單項(xiàng)了。timeout表示菜單等待時(shí)間,單位為秒。

已安裝內(nèi)核的新版本(例如,實(shí)現(xiàn) P 支持),那不需要下載任何代碼跳過(guò)此部分繼續(xù)下一屏。

您可以在 上找到內(nèi)核代碼。當(dāng)您進(jìn)入到那后,您將發(fā)現(xiàn)內(nèi)核的源代碼按內(nèi)核版本(v2.2、v2.3 等),被組織到多個(gè)不同的目錄中。在每個(gè)目錄中,您將發(fā)現(xiàn)文件被冠以”linux-x.y.z.tar.gz”和”linux-x.y.z.tar.bz2″。這些就是敏枯 Linux 內(nèi)核的源代碼。您也將看到冠以 “patch-x.y.z.gz” 和 “patch-x.y.z.bz2” 的文件。這些是用來(lái)更新前面完整的內(nèi)核源代碼的補(bǔ)丁包。如果您希望編譯一個(gè)新的內(nèi)核版本,您將需要下載這些”linux”文件其中之一。

內(nèi)早擾核解包

如果您已從 kernel.org 下載一個(gè)新的內(nèi)核,現(xiàn)在是要將其解包時(shí)候了。首先,cd /usr/src。如果這里有一個(gè)存在的”linux”目錄,將其改名為”linux.old” (“mv linux linux.old”,以 root 權(quán)限)。

現(xiàn)在,可以解開(kāi)新的內(nèi)核包了。仍然在 /usr/src 目錄下,輸入 tar xzvf /path/to/my/kernel-x.y.z.tar.gz 或者 cat /path/to/my/kernel-x.y.z.tar.bz2 | bzip2 -d | tar xvf -,根據(jù)您下載的源代碼是用 gzip 或 bzip2 壓縮的。在輸入完此命令后,您下載的內(nèi)核源代碼會(huì)被釋放到一個(gè)新的”linux”目錄下。注意內(nèi)核源代碼通常將在硬盤(pán)上占用超過(guò)兆空間!

討論配置問(wèn)題

在您編譯內(nèi)核前,您需要配置它,配置是您精確控制在新內(nèi)核中啟用(禁止)哪些內(nèi)核功能的機(jī)會(huì)。您也將控制哪些會(huì)被編譯到內(nèi)核的二進(jìn)制映像(在啟動(dòng)時(shí)被載入)而哪些被編譯到需要時(shí)載入的內(nèi)核模塊文件。

老式配置內(nèi)核的方法是極為痛苦的過(guò)程,并涉及到進(jìn)入 /usr/src/linux 目錄并輸入 make config 命令。請(qǐng)放棄這種配置內(nèi)核的方式除非您想在命令行上回答幾百個(gè)(對(duì)!幾百個(gè))“yes/no”的問(wèn)題。

配置的新途徑

我們是現(xiàn)代人類(lèi),我們不在輸入 make config,而是輸入 make menuconfig 或者 make xconfig。如果您想要配置您的內(nèi)核,使用上述選擇之一。如果您輸入 make menuconfig,您將使用一個(gè)漂亮的基于文本的彩色菜單系統(tǒng)來(lái)配置內(nèi)核。如果您輸入 make xconfig,您將使用一個(gè)更漂亮的基于 X-Window 的 GUI 界面來(lái)配置內(nèi)核的各種選項(xiàng)。這里有一個(gè)使用 “make menuconfig” 的屏幕陸拿旦截圖:

當(dāng)使用 “make menuconfig” 時(shí),在左面出現(xiàn)一個(gè) “” 的選項(xiàng)能被編譯成為一個(gè)模塊。當(dāng)選項(xiàng)被選中,按下空格鍵來(lái)循環(huán)選擇選項(xiàng)是被選中或未選中, (“”)表示將被編譯成內(nèi)核映像而(“”)表示將被編譯成模塊。

配置技巧

在這里有極其多的內(nèi)核選項(xiàng),而且我們無(wú)法在此一一解釋所以請(qǐng)利用內(nèi)核內(nèi)置的幫助功能?;旧厦總€(gè)選項(xiàng)都至少有一些描述,而且每個(gè)通常都有一行”如果您不知道這個(gè)選項(xiàng)的含義,輸入 Y。(或者 N)”。這些提示在您不知道一個(gè)特定選項(xiàng)的含義時(shí)能幫助您。要使用幫助,選中您有疑問(wèn)的選項(xiàng)然后按 “?” 鍵。

編譯和安裝內(nèi)核

make dep; make clean

一旦您的內(nèi)核配置完畢,就可開(kāi)始編譯它了。在我們能編譯它前,我們需要生成依賴(dependency)信息并清除任何老的”編譯結(jié)果”。這可以通過(guò)在 /usr/src/linux 下輸入 make dep; make clean 完成。

make bzImage

現(xiàn)在是編譯真正的二進(jìn)制內(nèi)核映像時(shí)候了。輸入 make bzImage。過(guò)幾分鐘后,編譯會(huì)結(jié)束而且您在 /usr/src/linux/arch/i386/boot(x86 PC 內(nèi)核)目錄下找到 bzImage 文件。我們將待會(huì)告訴您如何安裝這個(gè)新內(nèi)核,但是現(xiàn)在我們要看看模塊編譯了。

編譯模塊

現(xiàn)在我們有了 bzImage,下面要編譯模塊了。即使您在配置內(nèi)核時(shí)沒(méi)有使用任何模塊,也不要跳過(guò)此步驟在編譯完 bzImage 后立刻編譯模塊是個(gè)好習(xí)慣。而且,如果您真的沒(méi)有模塊需要編譯,這個(gè)步驟也非??炀徒Y(jié)束了。輸入 make modules; make modules_install。這將導(dǎo)致模塊被編譯而且被安裝到 /usr/lib/ 目錄下。

祝賀您!您的內(nèi)核已經(jīng)被編譯完成了,您的內(nèi)核模塊也編譯完成并被安裝。現(xiàn)在是要重新配置 LILO,這樣您能使用新的內(nèi)核。

啟動(dòng)配置

LILO 入門(mén)

現(xiàn)在是最后來(lái)重新配置 LILO 的時(shí)候了,它將負(fù)責(zé)載入新的內(nèi)核。LILO 是更流行的 Linux 引導(dǎo)工具,而且為所有的主流 Linux 發(fā)行商所采用。您要作的之一件事是察看您的 /etc/lilo.conf 文件。它將包含一行看似 “image=/vmlinuz” 的語(yǔ)句。該語(yǔ)句告訴 LILO 到何處找到內(nèi)核。

啟動(dòng)配置, 第二部分

要配置 LILO 來(lái)使用新的內(nèi)核,您有兩種選擇。之一個(gè)是覆蓋您現(xiàn)有的內(nèi)核除非您手頭上有一些緊急啟動(dòng)措施如還有此內(nèi)核的引導(dǎo)盤(pán),這很危險(xiǎn)的方法。

更為安全的選擇是配置 LILO 是得它能從新的或舊的內(nèi)核引導(dǎo)。LILO 可配置成從新內(nèi)核缺省啟動(dòng),但仍提供一種方法讓您遇上問(wèn)題時(shí)能選擇舊的內(nèi)核來(lái)啟動(dòng)。這是推薦的作法,也是我們將隨后介紹的方法。

啟動(dòng)配置, 第三部分

您的 lilo.conf 文件有可能看起來(lái)如下:

boot=/dev/hda

delay=20

vga=normal

root=/dev/hda1

read-only

image=/vmlinuz

label=linux

要在您的 lilo.conf 文件中增添新的項(xiàng)目,參見(jiàn)下列步驟。首先,拷貝 /usr/src/linux/arch/i386/boot/bzImage 到您的根(root)分區(qū)上的一個(gè)文件,例如 /vmlinuz2。一旦拷貝完畢,復(fù)制您 lilo.conf 文件的最后三行并將它們添加到該文件的最后… 我們即將結(jié)束整個(gè)步驟了…

啟動(dòng)配置, 第四部分

現(xiàn)在,您的 lilo.conf 文件應(yīng)該看起來(lái)如下:

boot=/dev/hda

delay=

vga=normal

root=/dev/hda1

read-only

image=/vmlinuz

label=linux

image=/vmlinuz

label=linux

首先,將之一個(gè) “image=” 行改為 “image=/vmlinuz2″。其次,將第二個(gè) “l(fā)abel=” 行改為 “l(fā)abel=oldlinux”。然后,確定在文件的開(kāi)始有一行 “delay=20″如果沒(méi)有,增添一行。如果它已經(jīng)存在,將數(shù)字至少設(shè)為 20。

啟動(dòng)配置, 第五部分

您最后的 lilo.conf 文件將看起來(lái)如下:

boot=/dev/hda

delay=

vga=normal

root=/dev/hda

read-only

image=/vmlinuz

label=linux

image=/vmlinuz

label=oldlinux

作完這些修改后,您將需要以 root 身份運(yùn)行 “l(fā)ilo”。這非常重要!如果您不執(zhí)行此步,啟動(dòng)的過(guò)程無(wú)法繼續(xù)。運(yùn)行 “l(fā)ilo” 將給 lilo 一個(gè)機(jī)會(huì)來(lái)更新它的啟動(dòng)映射。

啟動(dòng)配置, 詳解

現(xiàn)在我們?cè)敿?xì)地解釋一下我們所作的改動(dòng)。這個(gè) lilo.conf 文件可以用來(lái)允許您啟動(dòng)兩個(gè)不同的內(nèi)核。它允許您啟動(dòng)您原來(lái)的內(nèi)核,位于 /vmlinuz 目錄下。它也允許您啟動(dòng)新的內(nèi)核,位于 /vmlinuz2 目錄下。在缺省情況下,它將嘗試啟動(dòng)您的新內(nèi)核(指向新內(nèi)核的 image/label 行首先出現(xiàn)在配置文件中)。

如果,出于某種原因,您需要啟動(dòng)舊內(nèi)核,只需在重新啟動(dòng)計(jì)算機(jī)時(shí)按住 Shift 鍵。LILO 將會(huì)監(jiān)測(cè)到此操作,然后允許您輸入要啟動(dòng)的映像標(biāo)簽名。要啟動(dòng)舊內(nèi)核,您需要輸入 “oldlinux”,然后按回車(chē)鍵。要看到有哪些選擇,您可按 TAB 鍵。

1 是手動(dòng)選擇在開(kāi)機(jī)時(shí)候按方上下方向鍵 界面會(huì)停留在選擇內(nèi)核的界面談派斗

2 自動(dòng)選擇 系統(tǒng)默認(rèn)會(huì)選擇最新安裝的內(nèi)核.如果要更改默認(rèn)使用的內(nèi)核則修改

配置文件

/boot/grub/menu.lst(直接修改grub.conf同樣可行 )下default默羨蘆認(rèn)為0是表示之一個(gè)菜單選項(xiàng)(開(kāi)機(jī)時(shí)的內(nèi)核選擇含磨菜單),改為1就是使用第二個(gè)菜單項(xiàng)了。timeout表示菜單等待時(shí)間,單位為秒。

開(kāi)機(jī)自檢以知渣猛后,會(huì)加載grub 這里會(huì)有兩個(gè)內(nèi)核,如果你保留了原內(nèi)核的話。只要按一下上下鍵選擇搭橋,然后回車(chē)就可以了。。。如果要修改為開(kāi)機(jī)自動(dòng)以某個(gè)內(nèi)核為默認(rèn)內(nèi)核,那么修改一下

/boot/grub/grub.conf就可以了。。。0為之一個(gè)內(nèi)核,1為第二個(gè)。上梁激邊的是0,下邊的是1

首先, 下kernel源碼, 編譯賣(mài)森新內(nèi)核兄鉛, 然后修改/boot/grub/grub.conf, 加一個(gè)新item, 最后reboot.

reboot后,參考hack_qyt的意見(jiàn).

下面是我自己新加羨配好的項(xiàng)( in /boot/grub/grub.conf), 供你參考.

#ID: 12

title=Gentoo Linux 2.6.35.7(my_kernel working,T410i,ntfs R, RF FS updated,FUSE knl supp, wifi, u2serial,nfs,acpi_lighting_adj)

root (hd0,4)

kernel /boot/kernel-2.6.0058 root=/dev/sda5 ramdisk=8192 hdc=ide-scsi

關(guān)于linux 啟動(dòng) 內(nèi)核 源代碼的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專(zhuān)注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。


分享名稱:Linux啟動(dòng)內(nèi)核源代碼解析(linux啟動(dòng)內(nèi)核源代碼)
文章鏈接:http://www.dlmjj.cn/article/djheioh.html