欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Linux 引導過(guò)程內幕


引導 Linux? 系統的過(guò)程包括很多階段。不管您是引導一個(gè)標準的 x86 桌面系統,還是引導一臺嵌入式的 PowerPC? 機器,很多流程都驚人地相似。本文將探索 Linux 的引導過(guò)程,從最初的引導到啟動(dòng)第一個(gè)用戶(hù)空間應用程序。在本文介紹的過(guò)程中,您將學(xué)習到各種與引導有關(guān)的主題,例如引導加載程序、內核解壓、初始 RAM 磁盤(pán)以及 Linux 引導的其他一些元素。

早期時(shí),啟動(dòng)一臺計算機意味著(zhù)要給計算機喂一條包含引導程序的紙帶,或者手工使用前端面板地址/數據/控制開(kāi)關(guān)來(lái)加載引導程序。盡管目前的計算機已經(jīng)裝備了很多工具來(lái)簡(jiǎn)化引導過(guò)程,但是這一切并沒(méi)有對整個(gè)過(guò)程進(jìn)行必要的簡(jiǎn)化。

讓我們先從高級的視角來(lái)查看 Linux 引導過(guò)程,這樣就可以看到整個(gè)過(guò)程的全貌了。然后將回顧一下在各個(gè)步驟到底發(fā)生了什么。在整個(gè)過(guò)程中,參考一下內核源代碼可以幫助我們更好地了解內核源代碼樹(shù),并在以后對其進(jìn)行深入分析。

概述

圖 1 是我們在 20,000 英尺的高度看到的視圖。


圖 1. Linux 引導過(guò)程在 20,000 英尺處的視圖

當系統首次引導時(shí),或系統被重置時(shí),處理器會(huì )執行一個(gè)位于已知位置處的代碼。在個(gè)人計算機(PC)中,這個(gè)位置在基本輸入/輸出系統(BIOS)中,它保存在主板上的閃存中。嵌入式系統中的中央處理單元(CPU)會(huì )調用這個(gè)重置向量來(lái)啟動(dòng)一個(gè)位于閃存/ROM 中的已知地址處的程序。在這兩種情況下,結果都是相同的。因為 PC 提供了很多靈活性,BIOS 必須確定要使用哪個(gè)設備來(lái)引導系統。稍后我們將詳細介紹這個(gè)過(guò)程。

當找到一個(gè)引導設備之后,第一階段的引導加載程序就被裝入 RAM 并執行。這個(gè)引導加載程序在大小上小于 512 字節(一個(gè)扇區),其作用是加載第二階段的引導加載程序。

當第二階段的引導加載程序被裝入 RAM 并執行時(shí),通常會(huì )顯示一個(gè)動(dòng)畫(huà)屏幕,并將 Linux 和一個(gè)可選的初始 RAM 磁盤(pán)(臨時(shí)根文件系統)加載到內存中。在加載映像時(shí),第二階段的引導加載程序就會(huì )將控制權交給內核映像,然后內核就可以進(jìn)行解壓和初始化了。在這個(gè)階段中,第二階段的引導加載程序會(huì )檢測系統硬件、枚舉系統鏈接的硬件設備、掛載根設備,然后加載必要的內核模塊。完成這些操作之后啟動(dòng)第一個(gè)用戶(hù)空間程序(init),并執行高級系統初始化工作。

這就是 Linux 引導的整個(gè)過(guò)程?,F在讓我們深入挖掘一下這個(gè)過(guò)程,并深入研究一下 Linux 引導過(guò)程的一些詳細信息。





回頁(yè)首


系統啟動(dòng)

系統啟動(dòng)階段依賴(lài)于引導 Linux 系統上的硬件。在嵌入式平臺中,當系統加電或重置時(shí),會(huì )使用一個(gè)啟動(dòng)環(huán)境。這方面的例子包括 U-Boot、RedBoot 和 Lucent 的 MicroMonitor。嵌入式平臺通常都是與引導監視器搭配銷(xiāo)售的。這些程序位于目標硬件上的閃存中的某一段特殊區域,它們提供了將 Linux 內核映像下載到閃存并繼續執行的方法。除了可以存儲并引導 Linux 映像之外,這些引導監視器還執行一定級別的系統測試和硬件初始化過(guò)程。在嵌入式平臺中,這些引導監視器通常會(huì )涉及第一階段和第二階段的引導加載程序。

提取 MBR 的信息

要查看 MBR 的內容,請使用下面的命令:

# dd if=/dev/hda of=mbr.bin bs=512 count=1 # od -xa mbr.bin

這個(gè) dd 命令需要以 root 用戶(hù)的身份運行,它從 /dev/hda(第一個(gè) IDE 盤(pán)) 上讀取前 512 個(gè)字節的內容,并將其寫(xiě)入 mbr.bin 文件中。od 命令會(huì )以十六進(jìn)制和 ASCII 碼格式打印這個(gè)二進(jìn)制文件的內容。

在 PC 中,引導 Linux 是從 BIOS 中的地址 0xFFFF0 處開(kāi)始的。BIOS 的第一個(gè)步驟是加電自檢(POST)。POST 的工作是對硬件進(jìn)行檢測。BIOS 的第二個(gè)步驟是進(jìn)行本地設備的枚舉和初始化。

給定 BIOS 功能的不同用法之后,BIOS 由兩部分組成:POST 代碼和運行時(shí)服務(wù)。當 POST 完成之后,它被從內存中清理了出來(lái),但是 BIOS 運行時(shí)服務(wù)依然保留在內存中,目標操作系統可以使用這些服務(wù)。

要引導一個(gè)操作系統,BIOS 運行時(shí)會(huì )按照 CMOS 的設置定義的順序來(lái)搜索處于活動(dòng)狀態(tài)并且可以引導的設備。引導設備可以是軟盤(pán)、CD-ROM、硬盤(pán)上的某個(gè)分區、網(wǎng)絡(luò )上的某個(gè)設備,甚至是 USB 閃存。

通常,Linux 都是從硬盤(pán)上引導的,其中主引導記錄(MBR)中包含主引導加載程序。MBR 是一個(gè) 512 字節大小的扇區,位于磁盤(pán)上的第一個(gè)扇區中(0 道 0 柱面 1 扇區)。當 MBR 被加載到 RAM 中之后,BIOS 就會(huì )將控制權交給 MBR。





回頁(yè)首


第一階段引導加載程序

MBR 中的主引導加載程序是一個(gè) 512 字節大小的映像,其中包含程序代碼和一個(gè)小分區表(參見(jiàn)圖 2)。前 446 個(gè)字節是主引導加載程序,其中包含可執行代碼和錯誤消息文本。接下來(lái)的 64 個(gè)字節是分區表,其中包含 4 個(gè)分區的記錄(每個(gè)記錄的大小是 16 個(gè)字節)。MBR 以?xún)蓚€(gè)特殊數字的字節(0xAA55)結束。這個(gè)數字會(huì )用來(lái)進(jìn)行 MBR 的有效性檢查。


圖 2. MBR 剖析

主引導加載程序的工作是查找并加載次引導加載程序(第二階段)。它是通過(guò)在分區表中查找一個(gè)活動(dòng)分區來(lái)實(shí)現這種功能的。當找到一個(gè)活動(dòng)分區時(shí),它會(huì )掃描分區表中的其他分區,以確保它們都不是活動(dòng)的。當這個(gè)過(guò)程驗證完成之后,就將活動(dòng)分區的引導記錄從這個(gè)設備中讀入 RAM 中并執行它。





回頁(yè)首


第二階段引導加載程序

次引導加載程序(第二階段引導加載程序)可以更形象地稱(chēng)為內核加載程序。這個(gè)階段的任務(wù)是加載 Linux 內核和可選的初始 RAM 磁盤(pán)。

GRUB 階段引導加載程序

/boot/grub 目錄中包含了 stage1、stage1.5stage2 引導加載程序,以及很多其他加載程序(例如,CR-ROM 使用的是 iso9660_stage_1_5)。

在 x86 PC 環(huán)境中,第一階段和第二階段的引導加載程序一起稱(chēng)為 Linux Loader(LILO)或 GRand Unified Bootloader(GRUB)。由于 LILO 有一些缺點(diǎn),而 GRUB 克服了這些缺點(diǎn),因此下面讓我們就來(lái)看一下 GRUB。(有關(guān) GRUB、LILO 和相關(guān)主題的更多內容,請參閱本文后面的 參考資料 部分的內容。)

關(guān)于 GRUB,很好的一件事情是它包含了有關(guān) Linux 文件系統的知識。GRUB 不像 LILO 一樣使用裸扇區,而是可以從 ext2 或 ext3 文件系統中加載 Linux 內核。它是通過(guò)將兩階段的引導加載程序轉換成三階段的引導加載程序來(lái)實(shí)現這項功能的。階段 1 (MBR)引導了一個(gè)階段 1.5 的引導加載程序,它可以理解包含 Linux 內核映像的特殊文件系統。這方面的例子包括 reiserfs_stage1_5(要從 Reiser 日志文件系統上進(jìn)行加載)或 e2fs_stage1_5(要從 ext2 或 ext3 文件系統上進(jìn)行加載)。當階段 1.5 的引導加載程序被加載并運行時(shí),階段 2 的引導加載程序就可以進(jìn)行加載了。

當階段 2 加載之后,GRUB 就可以在請求時(shí)顯示可用內核列表(在 /etc/grub.conf 中進(jìn)行定義,同時(shí)還有幾個(gè)軟符號鏈接 /etc/grub/menu.lst/etc/grub.conf)。我們可以選擇內核甚至修改附加內核參數。另外,我們也可以使用一個(gè)命令行的 shell 對引導過(guò)程進(jìn)行高級手工控制。

將第二階段的引導加載程序加載到內存中之后,就可以對文件系統進(jìn)行查詢(xún)了,并將默認的內核映像和 initrd 映像加載到內存中。當這些映像文件準備好之后,階段 2 的引導加載程序就可以調用內核映像了。





回頁(yè)首


內核

GRUB 中的手工引導

在 GRUB 命令行中,我們可以使用 initrd 映像引導一個(gè)特定的內核,方法如下:

grub> kernel /bzImage-2.6.14.2
[Linux-bzImage, setup=0x1400, size=0x29672e]

grub> initrd /initrd-2.6.14.2.img
[Linux-initrd @ 0x5f13000, 0xcc199 bytes]

grub> boot

Uncompressing Linux... Ok, booting the kernel.

如果您不知道要引導的內核的名稱(chēng),只需使用斜線(xiàn)(/)然后按下 Tab 鍵即可。GRUB 會(huì )顯示內核和 initrd 映像列表。

當內核映像被加載到內存中,并且階段 2 的引導加載程序釋放控制權之后,內核階段就開(kāi)始了。內核映像并不是一個(gè)可執行的內核,而是一個(gè)壓縮過(guò)的內核映像。通常它是一個(gè) zImage(壓縮映像,小于 512KB)或一個(gè) bzImage(較大的壓縮映像,大于 512KB),它是提前使用 zlib 進(jìn)行壓縮過(guò)的。在這個(gè)內核映像前面是一個(gè)例程,它實(shí)現少量硬件設置,并對內核映像中包含的內核進(jìn)行解壓,然后將其放入高端內存中,如果有初始 RAM 磁盤(pán)映像,就會(huì )將它移動(dòng)到內存中,并標明以后使用。然后該例程會(huì )調用內核,并開(kāi)始啟動(dòng)內核引導的過(guò)程。

當 bzImage(用于 i386 映像)被調用時(shí),我們從 ./arch/i386/boot/head.Sstart 匯編例程開(kāi)始執行(主要流程圖請參看圖 3)。這個(gè)例程會(huì )執行一些基本的硬件設置,并調用 ./arch/i386/boot/compressed/head.S 中的 startup_32 例程。此例程會(huì )設置一個(gè)基本的環(huán)境(堆棧等),并清除 Block Started by Symbol(BSS)。然后調用一個(gè)叫做 decompress_kernel 的 C 函數(在 ./arch/i386/boot/compressed/misc.c 中)來(lái)解壓內核。當內核被解壓到內存中之后,就可以調用它了。這是另外一個(gè) startup_32 函數,但是這個(gè)函數在 ./arch/i386/kernel/head.S 中。

在這個(gè)新的 startup_32 函數(也稱(chēng)為清除程序或進(jìn)程 0)中,會(huì )對頁(yè)表進(jìn)行初始化,并啟用內存分頁(yè)功能。然后會(huì )為任何可選的浮點(diǎn)單元(FPU)檢測 CPU 的類(lèi)型,并將其存儲起來(lái)供以后使用。然后調用 start_kernel 函數(在 init/main.c 中),它會(huì )將您帶入與體系結構無(wú)關(guān)的 Linux 內核部分。實(shí)際上,這就是 Linux 內核的 main 函數。


圖 3. Linux 內核 i386 引導的主要函數流程

通過(guò)調用 start_kernel,會(huì )調用一系列初始化函數來(lái)設置中斷,執行進(jìn)一步的內存配置,并加載初始 RAM 磁盤(pán)。最后,要調用 kernel_thread(在 arch/i386/kernel/process.c 中)來(lái)啟動(dòng) init 函數,這是第一個(gè)用戶(hù)空間進(jìn)程(user-space process)。最后,啟動(dòng)空任務(wù),現在調度器就可以接管控制權了(在調用 cpu_idle 之后)。通過(guò)啟用中斷,搶占式的調度器就可以周期性地接管控制權,從而提供多任務(wù)處理能力。

在內核引導過(guò)程中,初始 RAM 磁盤(pán)(initrd)是由階段 2 引導加載程序加載到內存中的,它會(huì )被復制到 RAM 中并掛載到系統上。這個(gè) initrd 會(huì )作為 RAM 中的臨時(shí)根文件系統使用,并允許內核在沒(méi)有掛載任何物理磁盤(pán)的情況下完整地實(shí)現引導。由于與外圍設備進(jìn)行交互所需要的模塊可能是 initrd 的一部分,因此內核可以非常小,但是仍然需要支持大量可能的硬件配置。在內核引導之后,就可以正式裝備根文件系統了(通過(guò) pivot_root):此時(shí)會(huì )將 initrd 根文件系統卸載掉,并掛載真正的根文件系統。

decompress_kernel 輸出

函數 decompress_kernel 就是顯示我們通??吹降慕鈮合⒌牡胤剑?

Uncompressing Linux... Ok, booting the kernel.

initrd 函數讓我們可以創(chuàng )建一個(gè)小型的 Linux 內核,其中包括作為可加載模塊編譯的驅動(dòng)程序。這些可加載的模塊為內核提供了訪(fǎng)問(wèn)磁盤(pán)和磁盤(pán)上的文件系統的方法,并為其他硬件提供了驅動(dòng)程序。由于根文件系統是磁盤(pán)上的一個(gè)文件系統,因此 initrd 函數會(huì )提供一種啟動(dòng)方法來(lái)獲得對磁盤(pán)的訪(fǎng)問(wèn),并掛載真正的根文件系統。在一個(gè)沒(méi)有硬盤(pán)的嵌入式環(huán)境中,initrd 可以是最終的根文件系統,或者也可以通過(guò)網(wǎng)絡(luò )文件系統(NFS)來(lái)掛載最終的根文件系統。





回頁(yè)首


Init

當內核被引導并進(jìn)行初始化之后,內核就可以啟動(dòng)自己的第一個(gè)用戶(hù)空間應用程序了。這是第一個(gè)調用的使用標準 C 庫編譯的程序。在此之前,還沒(méi)有執行任何標準的 C 應用程序。

在桌面 Linux 系統上,第一個(gè)啟動(dòng)的程序通常是 /sbin/init。但是這不是一定的。很少有嵌入式系統會(huì )需要使用 init 所提供的豐富初始化功能(這是通過(guò) /etc/inittab 進(jìn)行配置的)。在很多情況下,我們可以調用一個(gè)簡(jiǎn)單的 shell 腳本來(lái)啟動(dòng)必需的嵌入式應用程序。





回頁(yè)首


結束語(yǔ)

與 Linux 本身非常類(lèi)似,Linux 的引導過(guò)程也非常靈活,可以支持眾多的處理器和硬件平臺。最初,加載引導加載程序提供了一種簡(jiǎn)單的方法,不用任何花架子就可以引導 Linux。LILO 引導加載程序對引導能力進(jìn)行了擴充,但是它卻缺少文件系統的感知能力。最新一代的引導加載程序,例如 GRUB,允許 Linux 從一些文件系統(從 Minix 到 Reise)上進(jìn)行引導。





回頁(yè)首


參考資料

學(xué)習
  • 您可以參閱本文在 developerWorks 全球站點(diǎn)上的 英文原文 。

  • Boot Records Revealed 是有關(guān) MBR 和各種引導加載程序很好的資源。這個(gè)資源不僅僅是有關(guān) MBR 的資料的匯編,還討論了 GRUB、LILO 和各種 Windows? 引導加載程序的問(wèn)題。

  • 請查看 Disk Geometry 頁(yè)面來(lái)理解磁盤(pán)及其結構。您會(huì )發(fā)現有關(guān)磁盤(pán)的有用屬性。

  • live CD 是一個(gè)可以從 CD 或 DVD 上引導的操作系統,它不需要使用硬盤(pán)。

  • 引導加載程序之爭:了解 LILO 和 GRUB”(developerWorks,2005 年 8 月)詳細介紹了 LILO 和 GRUB 引導加載程序。

  • 在 developerWorks 上的 LPI 考試準備 系列教程中,我們可以學(xué)習有關(guān)引導 Linux 系統的詳細介紹,以及在準備參加系統管理員認證考試時(shí)需要準備的 Linux 基礎知識。

  • LILO 是 GRUB 的先驅?zhuān)俏覀兛赡馨l(fā)現它依然可以引導 Linux。

  • mkintrd 命令用來(lái)創(chuàng )建初始的 RAM 磁盤(pán)映像。這個(gè)命令可以用來(lái)構建初始的根文件系統,它可以用來(lái)引導允許提前加載訪(fǎng)問(wèn)真正根文件系統所需要的塊設備的配置。

  • Debian Linux Kernel Project 中,我們可以找到更多有關(guān) Linux 內核、引導和嵌入式開(kāi)發(fā)的信息。

  • developerWorks Linux 專(zhuān)區 中可以找到為 Linux 開(kāi)發(fā)人員準備的更多資源。

  • 隨時(shí)關(guān)注 developerWorks 技術(shù)事件和網(wǎng)絡(luò )廣播。

獲得產(chǎn)品和技術(shù)
  • MicroMonitor 為各種小型的目標設備提供了引導環(huán)境。我們可以使用這個(gè)監視器在嵌入式環(huán)境中引導 Linux。它已經(jīng)移植到 ARM、 XScale、MIPS、PowerPC、Coldfire 和 Hitachi 的 Super-H 上了。

  • GNU GRUB 是一個(gè)具有眾多選項和靈活性的引導 shell。

  • LinuxBIOS 是 BIOS 的一個(gè)替代品。LinuxBIOS 不但可以引導 Linux,而且它本身就是一個(gè)壓縮的 Linux 內核。

  • OpenBIOS 是另一個(gè)可移植的 BIOS 項目,可以在很多體系結構上進(jìn)行操作,例如 x86、Alpha 和 AMD64。

  • kernel.org 上可以找到最新的內核樹(shù)。

  • 訂購免費的 SEK for Linux,它有兩張 DVD,其中包括最新的 IBM for Linux 的試用版軟件,這些軟件包括 DB2?、Lotus?、Rational?、Tivoli? 和 WebSphere?。

  • 使用 IBM 試用版軟件 改進(jìn)您的下一個(gè)開(kāi)發(fā)項目,從 developerWorks 上可以直接下載這些軟件。


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Linux服務(wù)器啟動(dòng)過(guò)程詳解(引載)_江海川行
Linux 2.6 內核引導過(guò)程分析
深入理解linux啟動(dòng)過(guò)程
圖解linux啟動(dòng)過(guò)程
一文看懂Linux開(kāi)機流程BIOS
7.5 其他引導裝入程序
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久